《单片机课程设计的报告--数字钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计的报告--数字钟.docx(6页珍藏版)》请在第壹文秘上搜索。
1、单片机课程设计一一数字钟一、设计目的及意义(1)稳固、加深和扩大51系列单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;(3)对课题设计方案的分析、选择、比较、熟悉用51单片机做系统开发、研制的过程,软硬件设计的方法、内容及步骤二、原理图设计中简要说明设计目的(1)功能:24小时制时间显示,可随时进展时间校对调整,整点报时及闹钟功能。(2)原理图中所使用的元器件功能在图中的作用1 .主要元件AT89C51P3.2/INTO(外部中断0)定时器/计数器。溢出中断2 .LED
2、及按键开关用于时间的显示和设定(3)各器件的工作过程及顺序计时状态,AT89C5I通过Pl口持续向LED发送信号,使LED扫描显示刚前时分秒,当出现定时器/计数器0溢出中断时,时间加多1秒,AT89C51从P1口向LED输出新的时间;只按住SETUP键时,进入外部中断0,时间计数停顿,通过点击按键H,M,S对时分秒进展调整,新的时间值送给了计时程序,松开SETUP键退出中断,回到计时状态;按住SETUP键和ALARM键时,进入外部中断0,时间计数停顿,通过点击按键H,M对时分进展闹钟定时,AT89C51记忆时分值,退出时先松开SETUP键再松开ALARM;闹铃:当时间值和设定闹铃值一样时,进展
3、闹铃一分钟。流程图#include#defineuintunsignedint#defineucharunsignedcharsbitwelal=P20;sbitwela2=P21;sbitwela3=P22;sbitwela4=P23;sbitwela5=P24;sbitwela6=P25;sbitdp=P17;sbitc=POO;sbitc1=PO1;sbitc2=P02;sbitc3=PO3;sbitc4=P04;sbitc5=PO5;sbitkai=P32;ucharcodetable=OxcO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,
4、0x88,0x83,0xc6,0xal,0x86,0x8e;voiddisplay(void);voiddelay(uint);uintnum=0,num1=0,num2=0,num3=0;uintshi,ge,shi1,gel,shi2,ge2;uintshi1t,ge1t,shi2t,ge2t;voiddelay(uintx)(uinti,j;for(i=x;i0;i-)fr(j=110y0-);1voidmain()(TMOD=OxII;THO=(65536-50000)/256;TLO=(65536-50000)%256;EA=1;开总中断EXO=1;开外部中断OITO=0;外部中段O
5、设为电平触发ETO=1;TO溢出中断充许TRO=1;ITl=O;while(l)启动内部定时器外部中段1设为边沿触发display();)voiddisplay(void)扫描显示(wela5=l;Pl=tableshi;delay;wela5=0;wela6=l;Pl=tablege;delay;wela6=0;wela3=l;Pl=bleshil:delay(5);wela3=0;wela4=l;Pl=tablegel;dp=O;delay(5);wela4=0;wela1=1;Pl=tableshi2;delay;welal=0;wela2=l;Pl=tablege2;dp=O;dela
6、y(5);voidIntOOinterrupt0/时间调整功能,外部中断0,与闹钟功能,按住SETUP进入,松开退出while(kai=0)c3=l;关闭闹铃display();if(c=l)/秒(ge+;delay(10);if(ge=10)(ge=O;shi+;if(shi=6)shi=O;)1while(c)display();)if(cl=l)分gel+;delay(10);if(gel=10)(gel=O;shil+;if(shi1=6)shi1=0;)1while(cl)display();)if(c2=l)Mge2+;delay(10);if(ge2=10)ge2=0;shi2+
7、;if(shi2=2&ge2=4)shi2=0;ge2=0;)/24进Owhile(c2)display();)if(c4=l)闹钟功能区,按住ALARM和SETUP时,就能进展闹钟设定,设定完成后,先松开SETUP再松开ALARMF才有效shilt=shi1;gelt=ge1;shi2t=shi2;ge2t=ge2;)elsenuml=shi*10+ge;num2=shi1*10+ge1;num3=shi2*lO+ge2;1voidT0time()interrupt1定时器0溢出中断(THO=(65536-50000)/256;TLO=(65536-50000)%256;num+;if(num=5)/num=20时,为现实1秒(num=0;numl+;if(num1=60)(num1=0;num2+;)shi=numl10;ge=numl%10;if(num2=60)(num2=0;num3+;1gel=num2%10;if(num3=24)(num3=O;)shi2=num310;ge2=num3%10;if(shil=0&geI=O)整点检测报时c3=0;else(c3=l;)if(shil=shilt&gel=gelt&shi2=shi2t&ge2=ge2t)闹钟检测c3=0;elsec3=l;)