1、复位电路有3种方式:上电自动复位、按键电平复位和 外部脉冲复位本图是按键电平复位的电路,要保证复位信号高电平持续时间大于2个机器周期,即2us ,电容和电阻的选择要与12MHz晶体相匹配2.2.3 按键电路设计右边的9个键对应数字1-9,例如切换到键盘输入状态,手动输入4个1左边的3个键分别是SHIFT状态切换键 、“+”、“-”2.2.4电源电路VCC送进来的直流电经过三端稳压器稳压后,使输入电压稳定在+5V2.2.5继电器电路当P1.0送高电平的时候,三极管导通,磁体磁化将开关吸过来,开关闭合当P1.0送低电平的时候,三极管截止,磁体磁性消失,开关断开2.2.6数码管显示电路四个数码管分别
2、显示数字钟的小时十位、个位,分钟的十位、个位2.3 系统硬件总电路第三章 系统软件设计3.1 系统软件流程图主程序流程图首先对数码管清零,然后启动定时器T0计时,采用12M晶体,计时50ms;启动定时器T1动态扫描看是否有按键按下。进入循环,刷新缓冲区,调用LED显示,按键处理。子程序流程图刷新缓冲区子程序LED显示子程序不同的状态对应不同的亮灯情况按键处理子程序状态1调小时,状态2调分钟;键值为2对应+,键值为3对应-,键值为1,状态切换中断子程序流程图定时器1定时器0定时器T0用于计时。每隔50ms溢出。进入中断后,count用于计数,当count=10时,为半秒,使LED1状态取反,即L
3、ED1半秒闪烁。当到达一秒时,秒加1,count清零;到达60秒时,分加1,秒清零;到达60分时,时加1,分清零;到达24时,时清零。此时分、时的变化送至数码管显示,即数字钟。3.2 系统程序设计3.2.1 系统主程序void main(void) P1=0x00; EA=1; TMOD |=0x01;/定时器0计时50ms in 12M crystal TH0=0x3C; /初值15536 TL0=0xB0; ET0=1; /开启T0定时中断 TR0=1; /启动T0 TMOD |=0x10; /定时器1用于动态扫描 TH1=0xFa; /初值64240 TL1=0xF0; ET1=1; /
4、开启T1定时中断 TR1=1; /启动T1 while(1) RefreshTab(); LED_Display(); CMP(); if(!Line1|!Line2)Delay(200);Key_Process(); /消抖 3.2.2 定时中断子程序/*/* 定时器0中断用于计时 */void Timer0(void) interrupt 1TH0=0x3C; /重新赋值50ms溢出TL0=0xB0;count+;/if(count=10) / LED1=LED1; if (count=20) count=0; second+; /秒加1 if(second=60) second=0; m
5、inute+; /分加1 if(minute=60) minute=0; hour+; /时加1 if(hour=24) hour=0; /* 定时器1中断扫描显示+键值判断 */void Timer1(void) interrupt 3 /定时2ms显示下一个数码管 switch(num) case 0: P2=0x0f; /定义键值 if(!Line1)Keyno=1;Line2)Keyno=10; SEG_Display(); break; case 1: P2=0x1f;Line1)Keyno=4;Line2)Keyno=7; case 2: P2=0x2f;Line1)Keyno=3
6、;Line2)Keyno=12; case 3: P2=0x3f;Line1)Keyno=5;Line2)Keyno=8; case 4: P2=0x4f;Line1)Keyno=2;Line2)Keyno=11; case 5: P2=0x5f;Line1)Keyno=6;Line2)Keyno=9; default: break; num+; if(num=6) num=0;3.2.3按键处理子程序void Key_Process(void) if(shift=0&shift=3&=6) /第一路定时 flag=1; switch(state1) if(Keyno=4) state1=5;
7、 else if(Keyno=5) state1=9;t_10=hour;t_11=minute;x=1; else state1=1;break; if(Keyno=2)hour1+;if(hour1=24)hour1=0; if(Keyno=3&x=0)hour1-;if(hour1=-1)hour1=23; if(Keyno=1)shift+,state1=2; t_10=hour1; if(Keyno=2)minute1+;if(minute1=60)minute1=0;x=0)minute1-;if(minute1=-1)minute1=59; if(Keyno=1)shift+,s
8、tate1=3;hour1=0;minute1=0; t_11=minute1; case 3: if(Keyno=1)shift+,state1=4; t_12=hour1; if(Keyno=1)shift+,state1=0; t_13=minute1; case 5: if(Keyno=4&KeynoK0K1K2K3i=0&x=1) K0=Keyno-3; hour1=K0*10;state1=10; case 10:i=1&x=1) K1=Keyno-3; if(K0 state1=11;t_12=hour1+t_10; case 11:i=2&x=1) K2=Keyno-3; mi
9、nute1=K2*10;state1=12; case 12:i=3&x=1) K3=Keyno-3; if(K2 t_13=minute1+t_11;state1=0;shift=0;flag=0; =7&=10) flag=2; /第二路定时 switch(state1) case 1: if(Keyno=2)hour1+; if(Keyno=3)hour1-; t_20=hour1; if(Keyno=3)minute1-; t_21=minute1; t_22=hour1; if(Keyno=1)shift+,state1=1; t_23=minute1; else /(shift=1
10、1&=14) /第三路定时 flag=3; t_30=hour1; t_31=minute1; t_32=hour1; t_33=minute1; default : 第四章 实验结果和分析4.1 实验使用的仪器设备计算机,直流稳压电源4.2 测试结果分析首先将程序调入单片机中进行仿真,数字钟显示12:34。按SHIFT切换状态,按“+”“-”可以对小时和分钟进行调整。SHIFT=1:调数字钟的小时SHIFT=2:调数字钟的分钟SHIFT=3:进入第一路定时,设置起始时间的时SHIFT=4:设置起始时间的分SHIFT=5:设置终止时间的时SHIFT=6:设置终止时间的分SHIFT=7:进入第二
11、路定时,设置起始时间的时SHIFT=8:SHIFT=9:SHIFT=10:SHIFT=11:第三路定时,设置起始时间的时SHIFT=12:SHIFT=13:终止时间的时SHIFT=14:SHIFT=15:将回到SHIFT=0时,显示数字钟,循环进行第一路定时第二路定时第三路定时9:4010:4012:5017:3018:2020:50起始时间调时2号5号灯亮调分3好5号灯亮终止时间2号6号灯亮3号6号灯亮定时开始1号灯亮定时结束1号灯灭4.3创新功能A数字键输入时间进入定时状态后,数码管显示4个0,设定时间需要按“+”,“”很麻烦。前面三路定时只用了三个键,剩下的9个键就可以作为数字输入使用,
12、当然“+”“”也可以使用操作:进入第一路定时,即SHIFT=3,按下Keyno=4,进入数字输入状态,例如输入12:34.然后按“+”“”,可以调小时,再按一次SHIFT切换可以调分钟B设定间隔时间 类似洗衣机,微波炉的定时功能,以当前数字钟的显示时间为起始时间,用数字键盘输入间隔时间,例如:当前时间为12:34,输入0,5,0,1 即5小时1分钟,则定时终止时间为17:35进入第一路定时,即SHIFT=4,按下Keyno=5,进入设定间隔时间状态,定时开始的指示灯亮起,输入间隔时间后马上显示数字钟的时间,按下SHIFT切换到调时状态,按“+”将12调到17,再按一次SHIFT切换到调分状态,按“+”将34调到35后,定时结束,指示灯熄灭结束语本次实验先画好电路原理图,制作PCB板,然后焊接电路板。编程这一部分花费了大量时间,尤其是按键处理部分,尝试了很多种方法。只用SHIFT键切换,设置三路定时,按键次数较多,不方便。后尝试加入键盘数字输入,更方便,同时可按+-键调整时间。编好的程序烧录到单片机中,就可以用电路板测试定时效果了。写论文时,参考了大量网络资源。参考文献 1 孙涵芳,徐爱卿.MCS-51/96系列单片机原理及应用M. 北京:北京航空航天大学出版社,1996.2 马忠梅.单片机的C语言应用程序设计(修订版)M.北京:北京航
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1