多功能定时器课程设计论文Word格式.docx

上传人:b****4 文档编号:17307123 上传时间:2022-12-01 格式:DOCX 页数:21 大小:290.12KB
下载 相关 举报
多功能定时器课程设计论文Word格式.docx_第1页
第1页 / 共21页
多功能定时器课程设计论文Word格式.docx_第2页
第2页 / 共21页
多功能定时器课程设计论文Word格式.docx_第3页
第3页 / 共21页
多功能定时器课程设计论文Word格式.docx_第4页
第4页 / 共21页
多功能定时器课程设计论文Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

多功能定时器课程设计论文Word格式.docx

《多功能定时器课程设计论文Word格式.docx》由会员分享,可在线阅读,更多相关《多功能定时器课程设计论文Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

多功能定时器课程设计论文Word格式.docx

复位电路有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].北京:

北京航

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1