苏嵌学习日志9

学习日志

姓名:唐小玲 日期:2018.7.20

 

 

 

今日学习任务

 

编写程序实现电子时钟功能,并使用按键进行时间的调整

 

日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

程序编写已完成,可用按键实现时分秒的加减操作及清零操作

 

日开发中出现的问题汇总

 

个人单片机这一部分知识点学的不好,掌握程度不够,编写程序的时候有很多问题,需要重新多加练习编写代码。

 

日未解决问题

 

依旧不会独立编写难度稍高的代码。

 

 

日开发收获

 

1.timer.h

sbit time_choose = P3^0;

sbit jian = P3^1;    

sbit jia = P3^2;   

sbit clear = P3^3;

 

int SecondFlag = 0;      

int FlashFlag = 0;    

int Second10Flag = 0;   

int HourAdjustFlag = 0;   

int MinuteAdjustFlag = 0;   

int SecondAdjustFlag = 0;  

 

int Second = 00;  

int Minute = 00;

int Hour = 00;

int choose_n = 0;

 

unsigned char Led1 = 0x00, Led2 = 0x00, Led3 = 0x00, Led4 = 0x00, Led5 = 0x00, Led6 = 0x00;

int TimeCount, Second10Count;  

 

unsigned char code LedTab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

2.电子时钟.c

#include <reg51.h>

#include "timer.h"

/*延时函数*/

void Delay100us(int Times)

{

Times = Times * 100;

while(Times--);

}

/*按键操作*/

void key()

{

if(!time_choose) //选择调整时分秒

{

++choose_n;

 

switch(choose_n)

{

case 1:

HourAdjustFlag = 1;   

  MinuteAdjustFlag = 0;

  SecondAdjustFlag = 0;  

  Second10Flag = 1;

break;

case 2:

MinuteAdjustFlag = 1;

    HourAdjustFlag = 0;

    SecondAdjustFlag = 0;

    Second10Flag = 1;

  break;

case 3:

SecondAdjustFlag = 1;

    HourAdjustFlag = 0;

    MinuteAdjustFlag = 0;

    Second10Flag = 1;

  break;

default:

choose_n = 0;

break;

}

while (!time_choose);

}

 

if(!jia)     //+

{

while(!jia);

 

if(HourAdjustFlag)

{

if(Hour < 23)

{

Hour++;

Second10Count = 0;

}

else

{

Hour = 0;

}

}

 

if(MinuteAdjustFlag)

{

if(Minute < 59)

{

Minute++;

Second10Count = 0;

}

else

{

Minute = 0;

}

}

 

if(SecondAdjustFlag)

{

if(Second < 59)

{

Second++;

Second10Count = 0;

}

else

{

Second = 0;

}

}

}

 

if(!jian)     //-

{

while(!jian);

if(HourAdjustFlag)

{

if(Hour > 0 && Hour < 24)

{

Hour--;

Second10Count = 0;

}

else

{

Hour = 0;

}

}

 

if(MinuteAdjustFlag)

{

if(Minute > 0 && Minute < 60)

{

Minute--;

Second10Count = 0;

}

else

{

Minute = 0;

}

}

 

if(SecondAdjustFlag)

{

if(Second > 0 && Second < 60)

{

Second--;

Second10Count = 0;

}

else

{

Second = 0;

}

}

}

 

if(!clear) //清零

{

Hour = 00;   

      Minute = 00;

Second = 00;

    }

}

 

void timer_display() interrupt 3 //控制显示

{

TR1 = 0;

TL1 = 0x13;

TH1 = 0x2C;

 

P1 = 0x00;     

P2 = 0xfe;

P1 = LedTab[Led1];

Delay100us(1);

 

P1 = 0x00;

P2 = 0xfd;

 

if(FlashFlag) //控制小数点1秒隐1秒显

{

P1 = LedTab[Led2] | 0x80;

}

else

{

P1 = LedTab[Led2] & 0x7f;

}

Delay100us(1);

 

P1 = 0x00;   

P2 = 0xfb;

P1 = LedTab[Led3];

Delay100us(1);

 

P1 = 0x00;

P2 = 0xf7;

 

if(FlashFlag) //控制小数点1秒隐1秒显

{

P1 = LedTab[Led4] | 0x80;

}

else

{

P1 = LedTab[Led4] & 0x7f;

}

Delay100us(1);

 

P1 = 0x00;    

P2 = 0xef;

P1 = LedTab[Led5];

Delay100us(1);

 

P1 = 0x00;

P2 = 0xdf;

P1 = LedTab[Led6];

Delay100us(1);

 

TR1 = 1;

 

if(TimeCount < 100)

{

TimeCount++;

}

else

{

TimeCount = 0x00;

SecondFlag = 1;

 

if(Second10Flag)  

{

if(Second10Count < 20)

{

Second10Count++;

}

else

{

Second10Count = 0x00;  

Second10Flag = 0;   

HourAdjustFlag = 0;    

MinuteAdjustFlag = 0;

  SecondAdjustFlag = 0;

}

}

}

}

 

int main()

{

SecondFlag = 0;

TimeCount = 0x00;

 

TMOD = 0x10f;  //C/T=0工作于定时方式,工作于方式1

  TL1 = 0x13;

TH1 = 0x2C;

EA = 1;     

TF1 = 0;

ET1 = 1;    

TR1 = 1;

 

while(1)

{

if(SecondFlag)

{

if(Second % 2 == 0)

{

FlashFlag = 1;

}

else

{

FlashFlag = 0;

}

 

if(Second < 59)

{

Second++;

}

else

{

if(Minute < 59)

{

Minute++;

}

else

{

if(Hour < 23)

{

Hour++;

}

else

{

Hour = 0;

}

Minute = 0;

}

Second = 0;

}

SecondFlag = 0;

}

 

if(HourAdjustFlag)

{

if(Second10Flag)

{

if(FlashFlag)

{

Led1 = 0x0a; //小时隐

Led2 = 0x0a;

}

else

{

Led1 = Hour/10; //小时显

Led2 = Hour%10;

}

}

else

{

Led1 = Hour/10;

Led2 = Hour%10;

}

}

else

{

Led1 = Hour/10;

Led2 = Hour%10;

}

 

if(MinuteAdjustFlag)

{

if(Second10Flag)

{

if(FlashFlag)  //???

{

Led3 = 0x0a;

Led4 = 0x0a;

}

else

{

Led3 = Minute/10;

Led4 = Minute%10;

}

}

else

{

Led3 = Minute/10;

Led4 = Minute%10;

}

}

else

{

Led3 = Minute/10;

Led4 = Minute%10;

}

 

if(SecondAdjustFlag)

{

if(Second10Flag)

{

if(FlashFlag)

{

Led5 = 0x0a;

Led6 = 0x0a;

}

else

{

Led5 = Second/10;

Led6 = Second%10;

}

}

else

{

Led5 = Second/10;

Led6 = Second%10;

}

}

else

{

Led5 = Second/10;

Led6 = Second%10;

}

  key();

}

return 0;

}

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习!

 

 

作业

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81139171
今日推荐