学习日志
姓名:唐小玲 日期: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; } |
自我评价 (是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等) |
一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习! |
作业 |
无 |