TL0 = 0x17;
P3 = 0xff; // 先关闭所有数码管
P2 = dis_buf[dis_index]; // 显示代码传送到P0口 P3= dis_digit; //
dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管
dis_index++; //
dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 }
void timer1() interrupt 3 {
TH1 = 0xdc;
sec100++;
if(sec100 >= 100) {
16
sec100 = 0; inc_sec(); } }
void inc_sec() { sec++; if(sec > 59) { sec = 0; inc_min(); }
dis_buf[6] = dis_code[sec / 10]; // 秒十位 dis_buf[7] = dis_code[sec % 10]; // 秒个位 }
void inc_min() { min++; if(min > 59) {
17
min = 0; inc_hour(); }
dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 }
void inc_hour() { hour++; if(hour > 23) { hour = 0; }
if(hour > 9)
dis_buf[0] = dis_code[hour / 10]; // 时十位 else
dis_buf[0] = 0xff; // 当小时的十位为0时不显示 dis_buf[1] = dis_code[hour % 10]; // 时个位 }
18
void delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) {
for(i = 0; i < 120; i++); } }
第四章 课程设计结果分析
此时钟设计是利用protues仿真软件进行仿真,基本上实现了课程设计要求实现的功能。
硬件部分设臵了的六个按键。当按键一按下时,进入秒表显示状态,秒表开始计时,当按键六按下时,秒表暂停;当按键四按下时恢复到时间显示功能;当按键二按下时,进入调分状态,按一次,分加一,60一循环;按键三按下时,进入调时状态,按一次,时加一,60一循环;按键五按下时,进入闹铃设臵功能,紧接着按下按键二和按键三进行时和分的设臵,再按下按键4恢复显示时间,当显示的时间和定时设臵的时间一致时,蜂鸣器发出蜂鸣
19
声,蜂鸣时间我们设臵为10秒。
第五章 总结
经过一周的单片机课程设计,我组成员已基本完成课题要求。功能上基本达标:时钟的显示,秒表显示,定时功能,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;秒表功能,可以满足比赛计时的需要;调时功能,方便快捷;定时功能准确可靠,还有扩展成音乐闹钟的余地。硬件设施合乎要求,软件设计可以配合硬件实现要求功能。但是由于时间比较短,出现部分不足:使用定时和秒表功能时时间显示功能停止运行。经讨论只是软件部分还不完善。不过,我们相信,如果时间充足,将软件改进,我们完全可以很好实现所有功能。
另外,在本次设计的过程中,我们发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我们觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。
20