搜索
您的当前位置:首页数字定时器设计 (2)

数字定时器设计 (2)

来源:世旅网


设计任务

设计一个数字定时器 设计要求

1,定时1-99分钟,开机上电并且默认10分钟。 2,显示时间自选,不一定使用数码管。

3,定时时间可调,调试方式为两种,一是步进,二是直接输入。 4,有负载,220V/A,要求开机上电的时候,负载关闭。 5,有相关的提示信息,一旦时间设定之后,会给出时间设定的提示信息。 6,定时时间到,关闭电晕啊,切断负载电源,关闭电源。 7,系统工作电源Vin=+12V 设计基本理论 本设计将采用89C51单片机,89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh?Programmable?and?Erasable?Read?Only?Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机自带5个中断,两个16位定时器32个I/O口,可擦除只读存储器可以反复擦除多次,功能相当强大。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 主体模块设计 数字定时器系统的基本组成如下图所示 数字定时系统电路的原理框图根据设计任务与要求,可初步将系统分为五大功能模块:主电路、按键电路、显示电路、继电器电路。进一步细说,主电路选用AT89C51作为中央处理器,系统采用12MHZ的晶振;按键控制电路由两个个按键(启动键(start)、时间设定键(set))组成,采用三个独立开关,按键按下产生一个脉冲信号;显示电路由二位8段共阴极数码管和一个9位100欧姆上拉排阻组成,位选,个位和十位由P0输出,段选由P1输出;继电器电路由一个继电器和一个用电器(灯泡)组成,通过电路与P3.0相连。当P3.0输出高电平时,继电器不吸合,灯亮。

各部件具体设计

1单片机最小系统的设计模块??

硬件连接说明:本系统以AT89C51单片机为核心。单片机采用内部振荡的方式。通过200欧姆电阻与一个6位8段LED数码显示管相连。从P0口输出LED数码管的字形码,从P2口输出LED

精心整理

数码管的位选码,高电平有效。4个功能按键和P1口相连,中间通过10K的电阻与+5V电源相连,按键另一端接地,P1口低电平时表示按键被按下。报警电路则与P3.0口相连,当P3.0口输出高电平时,蜂鸣器响。

2晶振电路设计?

由于单片机内部振荡方式电路简单,时钟信号比较稳定,是独立的单片机应用系统的首选,故本设计采用内部振荡方式,采用12MHZ的晶振。数字定时系统电路的晶振电路图如下图所示。

3定时中断?

本设计电路采用定时器T0产生定时中断,由于本设计需要0.1s的基本时间,故选择其工作在定时方式1下。这时定时器T0是一个16位的计时器,由它产生50ms的基本定时中断,两次中断后将得到0.1s的时间。 4键盘电路? 键盘电路有独立式键盘和矩阵式两种。独立式键盘占用I/O口线较多,适用于按键较少的情况。矩阵式键盘占用的I/O口相对较少,适用于按键很多的情况。共设置4个按键,每个按键分别完成复位、开始/暂停、设置、调整的功能。其电路连接图如下图所示。 5?报警电路? 报警电路将采用p3.0口驱动,当数码管显示下图所示 6显示电路? 对于显示电路,本设计采用6位8段共阴极LED数码管显示。上电显示最大倒计时时间99.00.00-。其中“-”位为系统状态标志位,当显示“-”时,表示系统处于等待状态,按下开始键后将开始计数,开始计数后此数码管将关闭显示,以达到省电的目的?,当显示“E”时,表示系统正处于调时状态,此时只用两个调时键有用,按下开始键或复位键将没有用。其显示电路图如下图所示。 系统的调试与结果测试 电后LED数码管显示最大倒计时值99.00.0-,程序处于等待状态 此时,主程序不断调用显示子程序以及扫描键盘按键情况,当检测到有键按下后,转到相应的程序执行。?

1.开始/暂停键按下后程序开始减1计数直到0,同时状态显示管熄灭,计数值到0后报警器响。若中途遇到开始/暂停键按下则,暂停倒计时。

2.若中途遇到复位键按下则将倒计时器的倒计时值设置为最大值,并处于等待状态。 3.复位键按下后,程序复位,系统处于等待状态,状态显示管显示“-”。?? 精心整理

4.当设置键被按下后,程序进入调时设置状态,同时状态显示管显示等退出调时状态后,设置状态时开始/暂停键和复位键恢复功能

结果分析

本设计是一个采用了由内部振荡的时钟方式、程控扫描方式的独立式键盘、动态显示LED数码管和蜂鸣器式报警器组成的系统。因此该系统使用的电子器件少、外围电路简单,定时精准,使用的I/O少,系统消耗的功耗小,剩余的I/O口多便于扩展其他功能。但是另一方面,本系统由于使用了程控式的键盘和动态显示的LED数码管,所以对CPU的使用率相对较高。?

开始在主程序的循环中没有添加调用显示子程序的语句,导致在没有按键按下的情况下LED数码管没有显示。当在主程序循环检测按键的过程中添加了调用显示子程序的语句后就解决了这一问题。由于键盘需要消抖延时和等待按键释放,所以相似的情况又出现了——按下按键后有一段时间LED数码管断续显示或者按下按键后不释放按键时LED数码管没有显示。仔细分析后发现,问题出现的原因还是一样的,由于本设计的LED数码管采用了动态显示,故需要不断调用显示子程序,否则会导致LED数码管没有显示。所以最终做了以下改进:1.按键的消抖延时选择调用两次显示子程序(每次显示子程序大约用时5ms,两次即为10ms左右)来取代原来的10ms软件延时。2.在等待按键释放时,使用循环调用显示子程序来替代原来的循环等待。经过上述两点的改进后,LED数码管无显示或者断续显示的问题就得到了彻底的解决。 心得体会 ?初次看到本次的课程设计的题目时,感觉设计的难度不大,但是由于是第一次运用 单片机设计,在设计过程中又遇到了种种困难,又感觉到要完成此次设计还需要花费很大的时间和精力。但是经过不断的努力,运用科学的分析方法,最终完成了本次计算机课程设计。? 经过三个星期的课设,过程曲折可谓一语难尽。在此期间我也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。? 生活也是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过这次课设,我才真正领略到“艰苦奋斗”这一词的真正含义,只有亲自动手才能体会其中的内涵。我想说,设计确实有些辛苦,但苦中也有乐。每当遇到困难的时候,老师和同学给了我很大的帮助,让我学到了很多东西。在此,我对帮助过我的同学及老师深表感谢。我感觉通过课设我和同学们之间的距离更加近了;我想说,设计确实很累,但当我们的设计出现成果时,心中也不免产生喜悦,正所谓“三百六十行,行行出状元”我认为无论干什么,只要人生活的有意义就可以。?

另外,课堂上也有部分知识不太清楚,于是我又不得不边学边用,时刻巩固所学知识,通过课设把以前不了解的东西能够学习一下,更深的体会其中的含义,使我收获颇多。整个设计我基本上还满精心整理

意,由于水平有限,难免会有错误,所以还请老师批评指正。

精心整理

附录:所使用的VB程序

ORG?0000H?????? AJMP?MAIN?

ORG?000BH??????????;T0中断程序入口地址?????? AJMP?T0ZD?????? ORG?00100H?

MAIN:CLR?TR0????????????;主程序开始?????? CLR?P3.0???????????;关闭蜂鸣器?

SETB?20H.1?????????;使显示管状态标志位有效

CLR?20H.0??????????;开始/暂停标志位,使程序处于等待开始?????? MOV?40H,#00H???????;0.1S位查表码?????? MOV?41H,#00H???????;秒钟个位位查表码 MOV?42H,#00H???????;秒钟十位位查表码?????? MOV?43H,#00H???????;分钟个位位查表码?????? MOV?44H,#06H???????;分钟十位位查表码?????? MOV?45H,#00H???????;状态显示管查表码?????? MOV?46H,#02H???????;定时器定时次数?????? SETB?EA?????????;开总中断?????? SETB?ET0????????;开定时器T0中断?????? MOV?TMOD,#01H??????;定时器工作方式0?????? MOV?TL0,#0B0H??;定时初值,采用50MS时?????? MOV?TH0,#3CH??? JPJC:LCALL?XSCX??? MOV?P1,#0FFH???????;判断复位键是否按下?????? JB?P1.0,JC12? LCALL?XDYS?????????;调用消抖延时程序(XDYS)?????? JB?P1.0,JC12? PP10:JNB? P1.0,DP10??????;等待按键按下? AJMP?MAIN??????????;复位键按下后转到主程序(MAIN)重新开始? JC12:MOV?P1,#0FFH???????;判断设置键是否按下?????? JB?P1.2,JC11?????? LCALL?XDYS?????? JB?P1.2,JC11?

PP12:JNB?P1.2,DP12??????;调整设置键按下后转到调时子程(TSCX)?????? ACALL?TSCX??

JC11:MOV?P1,#0FFH???????;判断开始/暂停键是否按下??????

JB?P1.1,JPJC?????? LCALL?XDYS?????? JB?P1.1,JPJC?

精心整理

PP11:JNB?P1.1,DP11?

CPL?20H.0??????????;将标志位取反?

JB?20H.0,KSJS??????;开始/暂停标志为1则开始计(KSJS)?????? CLR?TR0 SETB20H.1

AJMPJPJC;继续检测键盘按键情况(JPJC)

DP10:LCALLXSCX;等待按键按下时,调用显示程序,防止显示管没显示

AJMPPP10DP11:LCALLXSCX AJMPPP11DP12:LCALLXSCX AJMPPP12KSJS:CLR20H.1;清除状态显示管 SETBP2.5JBP3.0,JPJC;若蜂鸣器响,则不启动计时器 SETBTR0;启动计时器TO(KSJS) AJMPJPJC;显示子程序 XSCX:MOVDPTR,#TAB;显示子程序(XSCX) MOVA,40HMOVCA,@A+DPTR MOVP2,#0FFH;关闭显示. MOVP0,A;输出0.1S位的显示段码. CLRP2.0; P2.0=0 ACALLXSYS MOVDPTR,#TAB1; MOVA,41H MOVCA,@A+DPTR MOVP2,#0FFH;关闭显示. MOVP0,A;输出秒钟个位的显示码. CLRP2.1; P2.1=0 ACALLXSYS MOVDPTR,#TAB MOVA,42H MOVCA,@A+DPTR MOVP2,#0FFH;关闭显示. MOVP0,A;输出秒钟十位位的显示段码. CLRP2.2; P2.2=0 ACALLXSYS MOVDPTR,#TAB1 MOVA,43H MOVCA,@A+DPTR MOVP2,#0FFH;关闭显示.

MOVP0,A;输出分钟个位的显示段码.

CLRP2.3; P2.3=0 ACALLXSYS MOVDPTR,#TAB MOVA,44H MOVCA,@A+DPTR MOVP2,#0FFH;关闭显示.

MOVP0,A;输出分钟十位的显示段码. CLRP2.4; P2.4=0 ACALLXSYS JNB20H.1,ZBTC; 20H.1为1则显示计时器状态 MOVDPTR,#TAB2 MOVA,45H MOVCA,@A+DPTR MOVP2,#0FFH;关闭显示. MOVP0,A;输出段码. CLRP2.5; P2.5=0 ACALLXSYS ZBTC:RET TSCX:CLR?TR0?????;调时子程序(TSCX)?????? CLR?20H.0???????;使时间调整时处于暂停状态?????? MOV?40H,#00H?????? MOV?41H,#00H?????? MOV?42H,#00H?????? MOV?43H,#00H????? MOV?44H,#00H? SETB?20H.1???????????;使状态显示管的位选码有效????? MOV?45H,#01H????????;将状态显示码更改为E(调时状态)????? MOV?R0,#44H? JCTZ:ACALL?XSCX??????????;先调用显示程序,扫描时间调整键????? MOV?P1,#0FFH?

JB?P1.3,NEXT????????;+1键盘没有按下????? ACALL?XDYS??????????;键盘按下,消抖延时???? JB?P1.3,NEXT?

DEN0:JNB?P1.3,DEN1???????;等待按键释放? AJMP?JYCX???????????;+1键按下后,跳转到+1程序? NEXT:MOV?P1,#0FFH????? JB?P1.2,JCTZ?

ACALL?XDYS??????????;键盘按下,消抖延时?????

精心整理

JB?P1.2,JCTZ?

DEN2:JNB?P1.2,DEN3???????;等待按键释放????? MOV?A,44H?

CJNE?A,#06H,DEC4?????;设置键再次按下,将调整指针指向下一位?????

AJMP?TCTS?DEC4:DEC?R0?

CJNE?R0,#3FH,JCTZ?????;若R0为3FH则退出调时程序??? AJMP?TCTS?????????;若@R0不为#06H,但R0为#3FH,则跳出调时程序???

JYCX:CJNE?R0,#44H,XIA1?????;加1调时部分 CJNE?@R0,#06H,INCR????;调整分钟十位?????? AJMP?SET0?XIA1:CJNE?R0,#43H,XIA2? AJMP?TZ09?????????????;调整分钟个位?XIA2:CJNE?R0,#42H,XIA3? CJNE?@R0,#05H,INCR????;调整秒钟十位?????? AJMP?SET0?XIA3:CJNE?R0,#41H,XIA4? AJMP?TZ09?????????????;调整秒钟个位?XIA4:CJNE?R0,#40H,TCTS? TZ09:CJNE?@R0,#09H,INCR??????;调整0.1秒位 SET0:MOV?@R0,#00H????? AJMP?JCTZ?INCR:INC?@R0????? AJMP?JCTZ?DEN1:ACALL?XSCX????? AJMP?DEN0?DEN3:ACALL?XSCX????? AJMP?DEN2??? TCTS:MOV?TH0,#3CH????????????;退出调时程序?????? MOV?TL0,#0B0H? MOV?45H,#00H????????????;将状态显示码更改为D(等待状态)?????? RET??;????T0中断子程序??? T0ZD:CLR?EA?????????????????;T0中断子程序,关中断?(T0ZD)?????? CLR?ET0????? CLR?TR0???? DJNZ?46H,TCZD? MOV?46H,#02H???????????;当定时两次后重新给计时次数赋值为2

MOVR0,#40H;减1计数,R0为40H CJNE@R0,#01H,R040 INCR0;R0为41H

CJNE@R0,#00H,DEC1INCR0;R0为42H CJNE@R0,#00H,DEC1INCR0;R0为43H CJNE@R0,#00H,DEC1INCR0;R0为44H CJNE@R0,#00H,DEC1

AJMPJYFHR040:CJNE@R0,#00H,DEC1;R0为40H

INCR0;R0为41H CJNE@R0,#00H,R041 INCR0;R0为42H CJNE@R0,#00H,R042 INCR0;R0为43H CJNE@R0,#00H,R043 INCR0;R0为44H CJNE@R0,#00H,R044 AJMPZJFHR041: MOV40H,#09H DEC41H AJMPTCZDR042: MOV40H,#09H MOV41H,#09H DEC42HAJMPTCZDR043: MOV40H,#09H MOV41H,#09H MOV42H,#05H DEC43H AJMPTCZD R044:MOV40H,#09H MOV41H,#09H MOV42H,#05H MOV43H,#09H DEC44H AJMPTCZD DEC1:DEC40H TCZD:MOVTH0,#3CH;退出中断子程序 MOVTL0,#0B0H SETBEA SETBET0 SETBTR0 AJMPZZFHJYFH:DEC40H ZJFH:SETBP3.0;启动蜂鸣器ZZFH:RETI XDYS:ACALLXSCX;消抖延时程序,延时10ms(2*5ms) ACALLXSCX;采用调用显示子程序延时以改善LED显示效果 RETXSYS:MOV55H,#20;显示延时程序,延时1ms DEL2:MOV56H,#25DEL1:DJNZ56H,DEL1 DJNZ55H,DEL2 RET

TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH TAB1:DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH

TAB2:DB040H,79H;D等待状态,E调时状态

END

精心整理

因篇幅问题不能全部显示,请点此查看更多更全内容

Top