多功能定时器课程设计论文Word格式.docx
《多功能定时器课程设计论文Word格式.docx》由会员分享,可在线阅读,更多相关《多功能定时器课程设计论文Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
复位电路有3种方式:
上电自动复位、按键电平复位和外部脉冲复位
本图是按键电平复位的电路,要保证复位信号高电平持续时间大于2个机器周期,即2us,电容和电阻的选择要与12MHz晶体相匹配
2.2.3按键电路设计
右边的9个键对应数字1-9,例如切换到键盘输入状态,手动输入4个1
左边的3个键分别是SHIFT状态切换键、“+”、“-”
2.2.4电源电路
VCC送进来的直流电经过三端稳压器稳压后,使输入电压稳定在+5V
2.2.5继电器电路
当P1.0送高电平的时候,三极管导通,磁体磁化将开关吸过来,开关闭合
当P1.0送低电平的时候,三极管截止,磁体磁性消失,开关断开
2.2.6数码管显示电路
四个数码管分别显示数字钟的小时十位、个位,分钟的十位、个位
2.3系统硬件总电路
第三章系统软件设计
3.1系统软件流程图
主程序流程图
首先对数码管清零,然后启动定时器T0计时,采用12M晶体,计时50ms;
启动定时器T1动态扫描看是否有按键按下。
进入循环,刷新缓冲区,调用LED显示,按键处理。
子程序流程图
刷新缓冲区子程序
LED显示子程序
不同的状态对应不同的亮灯情况
按键处理子程序
状态1调小时,状态2调分钟;
键值为2对应+,键值为3对应-,键值为1,状态切换
中断子程序流程图
定时器1
定时器0
定时器T0用于计时。
每隔50ms溢出。
进入中断后,count用于计数,当count=10时,为半秒,使LED1状态取反,即LED1半秒闪烁。
当到达一秒时,秒加1,count清零;
到达60秒时,分加1,秒清零;
到达60分时,时加1,分清零;
到达24时,时清零。
此时分、时的变化送至数码管显示,即数字钟。
3.2系统程序设计
3.2.1系统主程序
voidmain(void)
{
P1=0x00;
EA=1;
TMOD|=0x01;
//定时器0计时50msin12Mcrystal
TH0=0x3C;
//初值15536
TL0=0xB0;
ET0=1;
//开启T0定时中断
TR0=1;
//启动T0
TMOD|=0x10;
//定时器1用于动态扫描
TH1=0xFa;
//初值64240
TL1=0xF0;
ET1=1;
//开启T1定时中断
TR1=1;
//启动T1
while
(1)
{
RefreshTab();
LED_Display();
CMP();
if(!
Line1||!
Line2){Delay(200);
Key_Process();
}//消抖
}
}
3.2.2定时中断子程序
/******************************************************************/
/*定时器0中断用于计时*/
voidTimer0(void)interrupt1
{TH0=0x3C;
//重新赋值50ms溢出
TL0=0xB0;
count++;
//if(count==10)
//LED1=~LED1;
if(count==20)
count=0;
second++;
//秒加1
if(second==60)
second=0;
minute++;
//分加1
if(minute==60)
{
minute=0;
hour++;
//时加1
if(hour==24)
hour=0;
}
}
}
/*定时器1中断扫描显示+键值判断*/
voidTimer1(void)interrupt3
//定时2ms显示下一个数码管
switch(num)
case0:
P2=0x0f;
//定义键值
if(!
Line1)Keyno=1;
Line2)Keyno=10;
SEG_Display();
break;
case1:
P2=0x1f;
Line1)Keyno=4;
Line2)Keyno=7;
case2:
P2=0x2f;
Line1)Keyno=3;
Line2)Keyno=12;
case3:
P2=0x3f;
Line1)Keyno=5;
Line2)Keyno=8;
case4:
P2=0x4f;
Line1)Keyno=2;
Line2)Keyno=11;
case5:
P2=0x5f;
Line1)Keyno=6;
Line2)Keyno=9;
default:
break;
num++;
if(num==6)
num=0;
3.2.3按键处理子程序
voidKey_Process(void)
{if(shift>
=0&
&
shift<
=2)//数字钟
switch(STATE)
{
if(Keyno==1){shift++,STATE=1;
if(Keyno==2){hour++;
if(hour==24)hour=0;
if(Keyno==3){hour--;
if(hour==-1)hour=23;
if(Keyno==1){shift++,STATE=2;
if(Keyno==2){minute++;
if(minute==60)minute=0;
if(Keyno==3){minute--;
if(minute==-1)minute=59;
if(Keyno==1){shift++,state1=0;
STATE=0;
}
elseif(shift>
=3&
=6)//第一路定时
flag=1;
switch(state1)
{
if(Keyno==4){state1=5;
elseif(Keyno==5){state1=9;
t_1[0]=hour;
t_1[1]=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_1[0]=hour1;
if(Keyno==2){minute1++;
if(minute1==60)minute1=0;
x==0){minute1--;
if(minute1==-1)minute1=59;
if(Keyno==1){shift++,state1=3;
hour1=0;
minute1=0;
t_1[1]=minute1;
case3:
if(Keyno==1){shift++,state1=4;
t_1[2]=hour1;
if(Keyno==1){shift++,state1=0;
t_1[3]=minute1;
case5:
if(Keyno>
=4&
Keyno<
=12&
i==0){K[0]=Keyno-3;
i++;
}hour1=K[0]*10;
state1=6;
break;
case6:
i==1){K[1]=Keyno-3;
}if(K[0]>
K[0]<
=1&
K[1]>
K[1]<
=9){hour1=K[0]*10+K[1];
if(K[0]==2&
=3){hour1=K[0]*10+K[1];
state1=7;
case7:
i==2){K[2]=Keyno-3;
minute1=K[2]*10;
state1=8;
case8:
i==3){K[3]=Keyno-3;
i=0;
}if(K[2]>
K[2]<
=5&
K[3]>
K[3]<
=9){minute1=K[2]*10+K[3];
state1=1;
case9:
LED7=1;
if(Keyno>
i==0&
x==1){K[0]=Keyno-3;
hour1=K[0]*10;
state1=10;
case10:
i==1&
x==1){K[1]=Keyno-3;
if(K[0]>
state1=11;
t_1[2]=hour1+t_1[0];
case11:
i==2&
x==1){K[2]=Keyno-3;
}minute1=K[2]*10;
state1=12;
case12:
i==3&
x==1){K[3]=Keyno-3;
}if(K[2]>
t_1[3]=minute1+t_1[1];
state1=0;
shift=0;
flag=0;
}
=7&
=10)
{flag=2;
//第二路定时
switch(state1)
case1:
if(Keyno==2){hour1++;
if(Keyno==3){hour1--;
t_2[0]=hour1;
if(Keyno==3){minute1--;
t_2[1]=minute1;
t_2[2]=hour1;
if(Keyno==1){shift++,state1=1;
t_2[3]=minute1;
else//(shift>
=11&
=14)//第三路定时
{flag=3;
{
t_3[0]=hour1;
t_3[1]=minute1;
t_3[2]=hour1;
t_3[3]=minute1;
default:
}
第四章实验结果和分析
4.1实验使用的仪器设备
计算机,直流稳压电源
4.2测试结果分析
首先将程序调入单片机中进行仿真,数字钟显示12:
34。
按SHIFT切换状态,按“+”“-”可以对小时和分钟进行调整。
SHIFT=1:
调数字钟的小时
SHIFT=2:
调数字钟的分钟
SHIFT=3:
进入第一路定时,设置起始时间的时
SHIFT=4:
设置起始时间的分
SHIFT=5:
设置终止时间的时
SHIFT=6:
设置终止时间的分
SHIFT=7:
进入第二路定时,设置起始时间的时
SHIFT=8:
SHIFT=9:
SHIFT=10:
SHIFT=11:
第三路定时,设置起始时间的时
SHIFT=12:
SHIFT=13:
终止时间的时
SHIFT=14:
SHIFT=15:
将回到SHIFT=0时,显示数字钟,循环进行
第一路定时
第二路定时
第三路定时
9:
40~10:
40
12:
50~17:
30
18:
20~20:
50
起始时间
调时
2号5号灯亮
调分
3好5号灯亮
终止时间
2号6号灯亮
3号6号灯亮
定时开始
1号灯亮
定时结束
1号灯灭
4.3创新功能
A.数字键输入时间
进入定时状态后,数码管显示4个0,设定时间需要按“+”,“—”很麻烦。
前面三路定时只用了三个键,剩下的9个键就可以作为数字输入使用,当然“+”“—”也可以使用
操作:
进入第一路定时,即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].北京:
北京航