1、一、摘要本次实训课程题是设计一个两位倒计时器,这次实训锻炼了我们自主设计,自主学习,自己动手的能力,两位倒计时器要求达到“99秒的倒计时”并且带有按键复位功能的计时器 。 这次设计的倒计时系统的硬件电路设计主要由中央处理模块、矩阵键盘、LED数码显示器等模块组成,再加上一些基本元器件实现倒计时的功能。其中不同的模块根据自己的的特点实现不同的功能,在整个系统中都起到了不可替代的作用。它们相辅相成,如果缺少任何一个模块或者任何一个元器件,都不可能完成本次设计。本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确调用,完成了可以随时设置初值的基于51单片机控制的99秒倒
2、计时系统。 【关键词 关键词】倒计时器 单片机 矩阵键盘 Keil uVision2 LED数码显示器 目录一、摘要二、总体设计方案 1、功能要求三、硬件设计 1、矩阵键盘 2、复位电路 3LED数码显示电路四、软件设计1、设计程序2.原理图五、软硬件联调六、总结七、致谢八、参考文献二、总体设计方案 倒计时器以AT89C52单片机为核心,起着控制作用。系统包括两位数码管显示电路,按键电路,复位电路。1、功能要求:1.系统上电,数码管显示“99”.2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。3.按键的定义如下:“暂停/开始”按键S13:当S13按下时,秒表
3、计时停止,数码管显示当前数值,再次按下时恢复计时。“设置”按键S14:当停止计时时,按下S14键,可以设置秒数。按键S1-S10分别对应数字0-9,先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。设置结束后,按下S13键启动计时。“重新开始”按键S15:当S15按下时,数码管显示为“99”,秒表从新开始计时。 三、硬件设计1、矩阵键盘 矩阵键盘又称为行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4 *4 =16 个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率,
4、从而节约系统资源。 并且与芯片at89c51的P1.0P1.7(即D0D3)口相连,实现矩阵键盘扫描原理。2、复位电路RST 引脚是复位信号的输入端,只要高电平的复位信号持续两个机器周期以上的有效时间,就可以使单片机上电复位。上电自动复位是通过电容充电实现的,上电瞬间,RST 端电位与Vcc 相同,随充电电流的减少,RST 的电位逐渐下降,直到复位信号无效。按键复位在此不在作过多的介绍,其原理和上电复位是相同的。但其采用的是脉冲复位电路和电平复位电路两种。本电路应用定时器0方式1工作方式,该方式是一个16 位计数器的计时中断法。所以工作方式寄存器TMOD的M1M0两位为01。设置定时器模式时,
5、加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。比如,12M的晶振每秒可产生1M的机器周期1,50ms就是50000个机器周期,定时器0工作方式1工作,计数长度为=65536个外部脉冲,65536-50000周期=初值15536,从15536开始计数,总共累加50000次计数器产生一次溢出,所以定时器的高八位和低八位TH0和TL0的值为:TH0 = (65536-TIME)/256;TL0 = (65536-TIME)%256;其中TIME=50000;其中TL0是低八位当达到256的时候,向高八位进1,然后低八位重新计数,所以高八位对差值求整
6、,低八位对差值求余。由于采用的是定时器0所以TMOD的高四位为0000;选通控制只要用软件使TR0就启动了定时器,所以门控位GATE为0;表示设置为定时方式。所以工作方式TMOD=0000 0001H=0X01H。复位电路:3LED数码显示电路单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(58、88点阵等)。通常在显示上采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特
7、点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。从格式可知数码管显示电路要用到2位数码管。考虑到数码管的段和位比较多,数码管有段选和位选控制,在此电路中有8个位选,8个段选,分别用单片机的P0口和P2进行8个位的控制。 四、软件设计本次设计采用的是定时器0、工作方式1,MAXTIME为99秒的倒计时计数器。其中最重要的就是主程序的设计,因为无论多少个子程序模块,如果主程序没有能够合理正确的调用子程序的话,那么子程序就如同虚设
8、。#include#includeUnsigned char code Tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;Unsigned char code jp=0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77; unsigned char a=0,0;unsigned char int_time;unsigned char second;unsigned char c;sbit sound=P27;bit zt;bit
9、 sz;unsigned char count;unsigned char y;unsigned char x;unsigned char count2;/函数功能:数码管动态扫描延时void delay(unsigned char s) unsigned char i,j;for(i=0;is;i+)for(j=0;j200;j+);/数码管显示子程序void DisplaySecond(unsigned char k) P2=0xfe;P0=Tabk/10;delay(50);P2=0xfd;P0=Tabk%10;delay(50);P2=0xff;/扫描键盘的值void sm(void)
10、 unsigned char k,j,n,a,m; m=0xfe; P1=0xf0; k=P1; k=k&0xf0; if(k!=0xf0) delay(30); if(k!=0xf0) for(j=0;j4;j+) P1=m;n=P1; for(a=0;a16;a+) if(jpa=n) c=a; /键值保存在C中 while(P1=jpa); m=_crol_(m,1); /按键void aj(void ) if(P1!=0xf0) delay(30); if(P1!=0xf0) if(c=10) /按下暂停/开始键 count+;if(count=1) TR0=0;zt=1;if(cou
11、nt=2)TR0=1;zt=0;count=0;if(c=11) /按下设置键 if(zt=1) second=0; sz=1; count2=0; if(c10) /按下数字键 if(sz=1) count2+; if(count2=1) a0=c; second=a0*10+a1;if(count2=2) a1=c; second=a0*10+a1; if(c=12) /按下重新开始键 DisplaySecond(second=99); P1=0xf0;/主函数void main(void) TMOD=0x01;TH0=(65536-46083)/256;TL0=(65536-46083)
12、%256;EA=1;ET0=1;TR0=1;int_time=0;second=99;while(1) sm();aj();DisplaySecond(second);/函数功能:定时器0的中断服务子程序void interserve(void)interrupt 1 using 1 TR0=0;int_time +;if(int_time=20) int_time=0;second-;if(second=-1) second=0;sound=1;TH0=(65536-46083)/256;TL0=(65536-46083)%256;TR0=1;2.原理图五、软硬件联调一、 系统调试工具Kei
13、l uVision2 Keil uVision2 仿真器是一款利用其IDE 集成开发环境作为仿真环境的廉价仿真器,是利用SST公司具有IAP功能的单片机SST89C58 制作而成,主要是利用了SST89C58的IAP 功能,所谓IAP 功能是In application program的英文缩写,是在应用编程的意思,通俗一点讲就是:它可以通过串口将用户的程序下载到单片机中,可以通过串口对单片机进行编程。它之所以具有这种功能,实际上它有两块程序flash区,其中一块 flash 中运行的程序可以更改另外的一块程序 flash 区中的程序,正是利用这一特性才用它作成了仿真器,我们把仿真器的监控程序
14、事先烧入SST89C58,监控程序通过 SST89C58 的串口和PC通讯,当使用 KEIL UVISION2 的 IDE 环境仿真时,用户的程序通过串口被监控程序写入flash程序区中,当用户设置断点等操作仿真程序时,flash 程序中的用户程序也在相应的更改,从而实现了仿真功能 。 二 、调试的主要方法 调试的主要方法 点击 启动 Keil uVision2。 新建一个工程。Project 菜单New project ,选择好我们要保存的文件夹后,键入 yaodong 保存。接着弹出 CPU 类型选择框,选择最常用的AtmelAT89C51,按确定。 在工程中加入文件。新建一个文件,文件菜
15、单 FileNew,我们再点击save the active document按钮,(另存为)弹出对话框后,我们文件名框中键入yaodong.c(注意文件后缀名是.c)保存,这个时候C 语言文件创建完毕。 现在可以把文件加入到工程中去。点击Target1 前面的+号,右键单击 Source Group 1选择 Add Files to GroupSource Group 1,在弹出的对话框中选择一创建好的djs.c文件,选择添加 Add,然后关闭此对话框。 此时工程建成,可以写入程序了。在写入程序的时候,通过软件设计模块,先写好主程序的框架,然后在需要调用子程序的时候,一个子程序一个子程序进行
16、编写、调试。 当程序完成之后,点击Rebuild all target files按钮 (重新编译所有目标文件)进行程序调试、查错,在程序下面的提示框Output window中点击出错的提示,进行程序改错。 安装USB驱动后,进行烧录软件,下载,编译。六、总结在这次的课程设计中,我收获了也很多,同时也遇到了一些困难,才开始只单纯设计99秒倒计时,编程这块还行,编译都通过了,没遇到什么困难,但是在设计电路的时候,数码管选择有些问题,一种是静态,一种是动态的。我开始选择的是静态的,显示都是一闪一闪的,询问老师之后,改成了动态的,但是还是一闪一闪的,老师说:你的选择的数码管显示时间有问题,选大不行
17、,选小也不行,我就自己慢慢弄,感觉弄了很久。后来在编程中加入矩阵键盘的程序,出现了一些问题,一开始编的时候编译通过了,但是在硬件电路中,根本不起作用,后来才发现键盘没有赋值,想了很久,还是不会,又跟同学讨论了很久,还是没有答案,最终决定问老师,在老师的帮助下,我和我的搭档终于完成了这次的实训内容。经过一周半的努力,课程设计基本完成了,在设计的过程中,学到很多有用的知识。在设计中,我深深体会到做一个电子成品是多么的不容易,它是需要付出很多的艰辛劳动。其中包括方案的比较,元器件价格的比较,成品性能的比较等等诸多因素。但再复杂的产品都是从简单而来的,我们只有现在打好基础,发挥创新能力,才能与时俱进。
18、我发现自己掌握的并不扎实,自身存在太多问题了,幸好有指导老师和同学的帮助,才能顺利完成这次设计。通过这次毕业设计我会在以后的学习和工作中不断地完善自己的不足。七、致谢在本次课程设计过程中,我学到了很多东西,也接触到了一些以前没有遇到过的问题,在不停的解决问题的时候真是受益颇多!在这里,我首先要感谢我尊敬的刘燎原以及刘天飞老师。 两位老师要指导很多同学的设计,无论他们工作量有多大,可总是还在百忙之中抽出大量的时间来指导我们。无论何时我们有疑问,他们总是抽出时间为我们解答。在此我要再一次向我的老师刘燎原以及刘天飞老师表示深深的感谢和崇高的敬意,谢谢您! 八、参考文献1 郭天祥.51 单片机视频教程
19、. 2 马家辰.孙玉德.张颖. MCS51 单片机原理及接口技术(修订版)哈尔滨工业大学出版社2004 3 李光飞. 楼然苗. 胡佳文. 谢象佐. 单片机课程设计实例指导. 北京航空航天大学出版社. 2004 4 张培仁. 张志坚. 高修峰. 十六位单片微处理器原理及应用(凌阳SPCE061A). 清华大学出版社. 2005 5 李广第 单片机基础 第1版北京:北京航空航天大学出版社,1999 6 石东新. 温淑鸿. 单片机原理与应用实验指导书. 中国传媒大学. 信息工程学院 7 鲁云飞. 任志禄等. 51 单片机在全自动倒计时控制器中的应用. 沈阳建筑工程学院学报(自然科学版). 2002 年1月第18卷第1期 8 PDF文档. 单片机开发与典型运用设计 9 郭天祥. PPT. 十天学会单片机和C语言 10 何立民从Cygnal 80C51F看8位单片机发展之路单片机与嵌入式系统应用,2002年,第5期 11 张志良编著.单片机原理与控制技术.第2版. 机械工业出版社 12 贵国庆. 单片机学习开发系统应用之三4*4矩阵键盘的工作原理与编程.山西太原 13 刘定良. 用AT89C2051设计的秒倒计时器. 长沙民政职业技术学院学报. 第12卷第1期. 2005 14 刘文奇. 基于单片机的电子倒计时器设计.重庆电子工程职业 2009