1、湖 南 人 文 科 技 学 院课 程 设 计 报 告课程名称 :单片机原理及应用课程设计设计题目: 电子定时器 系 别: 通信与控制工程系 专 业: 自动化 班 级: 2008 级自动化 1 班 学生姓名: 黄永军 马武彬 学 号: 08421116 08421149 起止日期:2010 年 12 月 20 日 20010 年 12 月 26 日指导教师: 成继中 方智文 教研室主任: 方智文 指导教师评语:指导教师签名: 年 月 日成绩项 目 权重黄永军 马武彬1、设计过程中出勤、学习态度等方面 0.22、课程设计质量与答辩 0.53、设计报告书写及图纸规范程度 0.3成绩评定总 成 绩 教
2、研室审核意见:教研室主任签字: 年 月 日教学系审核意见:主任签字: 年 月 日摘 要本次设计在以 STC89C52 单片机为核心的系统板上利用 C 语言设计电子定时器。该电子定时器能定时给电器供电或断电,最大定时时间可以长达六十分钟且可以再一分钟到六十分钟之间任意调节时间长短,操作使用方便。采用 STC89C52 单片机控制,5位共阳数码管显示时间,蜂鸣器提示,继电器作电器电源输出控制。该定时器可预置定时时间,可通过矩阵键盘上的四个按键来选定定时器预定时间和开始和暂停,然后结合继电器对电器进行供电和断电;利用单片机内部的定时器 T0,成功实现了计时器的计时功能;本电子定时器会在定时时间到达零
3、时通过蜂鸣器进行报警,以此提醒用户电器即将断电,方便用户对电器进行其它的操作。关键词:电子定时器;供电或断电;继电器;60 分钟;数码显示;8255目 录设计要求.11 方案论证与对比.11.1 方案一.11.2 方案二.21.3 方案对比与选择.22 单元电路设计与计算.32.1 STC89C52 与 8255 电路设计 32.2 矩阵键盘电路的设计.32.3 继电器电路的设计.42.4 蜂鸣器电路的设计.52.5 数码管显示电路设计.53 系统软件工作流程图.63.1 系统工作流程.63.2 定时器 T0 中断服务流程及分析 64 系统调试及性能分析.75 详细仪器清单.86 总结与思考及
4、致谢.9参考文献.10附录一:单片机系统板原理图.12附录二:详细系统源程序.131电子定时器设计要求利用单片机为核心,设计并制作电子定时器,具有以下功能:(1) 电子定时器能定时给电器供电或断电;(2) 给电最大时间可以长达 30min;(3) 四位数码管显示时间;(4) 继电器作电器电源输出控制。1 方案论证与对比1.1 方案一该方案由待命状态、预定定时时间、定时器开始与暂停系统、系统处理、DS1302 处理时间、蜂鸣器报警、数码显示等模块组成。系统的计时部分采用了一块时钟芯片 DS1302,用其实现系统通过继电器对电器供电的计时工作。原理框图如图1 所示:2图 1 方案一系统方框图1.2
5、 方案二该方案仅由待命状态、预定时间、定时器开始与暂停系统、系统处理、继电器供电或断电、蜂鸣器报警、数码显示四个模块组成。整个系统的计时功能皆由STC89C52 内部自带的定时器 T0 来实现。同样,结合继电器给电器供电,并利用蜂鸣器进行断电报警。原理框图如图 2 所示:图 2 方案二系统方框图1.3 方案对比与选择以上两个方案在原理上显然都可以完成该电子定时器的设计。但方案一中利用DS1302 时钟芯片进行计时,虽然可达到题目的计时要求,但题目要求最大计时需达到 30 分钟,而该芯片的计时周期规定了为 24 小时制,所以如果采用该方案的话,程序的设计处理复杂度将会大大增加。在方案二中,利用
6、STC89C52 单片机内部的定时器 T0 循环溢出中断,从而完成定时器的计时功能,5 位共阴数码管显示时间,继电器作电器电源输出控制,其电路简单,操作使用方便,大大减轻了设计的工作量。所以选定该方案来进行本次课程设计。32 单元电路设计与计算2.1 STC89C52 与 8255 路设计在本次设计中,需用到多个输出端口,所以熟悉单片机的接口也是至关重要的。本系统采用8255I/O扩展,P0、P2口为总线控制I/O扩展;在扩展的IO口中,PA口作为数码管的位选端口;PB作为数码管的段选端口;P12口连接继电器,P3口分别用以控制各个中断、蜂鸣器等各个模块的控制。在XTAL2引脚和XTAL1引脚
7、之间接有一块12M的晶振,从而使芯片内部的定时器能实现计时功能。单片机接口分配电路如图3所示:RESETP32I/OP36P35RESETP36P35PA0PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC7PA1P26P10P1P12P13P14P15P16P17XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P1.0/T21P1.1/T2
8、EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A92P2.2/A1023P2.3/A1 24P2.4/A1225P2.5/A1326P2.6/A1427U1STC89C52D034D13 D232D331D430D529D628D727RD5WR36A09A18RESET35CS6PA04PA13PA22PA31PA440PA539PA638PA737PB018PB119PB
9、220PB321PB42PB523PB624PB725PC014PC115PC216PC317PC413PC512PC61PC710U2825AX1CRYSTALC130pC230pSW1SW-SPSTC31uF R11k图 3 STC89C52与8255电路设计2.2 矩阵键盘电路的设计根据设计要求,需要通过按键来选择系统的工作方式,所以我从 44 矩阵键盘上定义了四个按键,可以通过按键 S4、S8 来设定定时时间;通过按键 S12、S16 来控制系统工作的开始和暂停。矩阵键盘电路如图 4 所示:4图 4 矩阵键盘电路原理图在程序中,先将第一列的公共线拉高,即给 PC4 口赋一个值(如 0x
10、10)。然后如果这一排有键被按下的话,PC3 口的值就会发生改变,例如按下 S4 号键,PC3 口的值就会由低电平变成高电平,依次类推,我们就可以根据 PC3-PC0 口值的变化来获得各个键值。2.3 继电器电路的设计由P12 引脚输出高低电平经S2控制三极管的通断,从而控制继电器的吸合与释放,继电器的输出端采用分离方式,即输出端不与内电路连接,直接连接端子,这样会增加更多利用功能,可控制更高电压设备的开和关,图上的S2单刀双掷开关控制继电器电路的电源。继电器电路原理图如图5所示:图 5 继电器电路原理图52.4 蜂鸣器电路的设计为了提醒用户对电器供电或断电后的其它工作,设计中用到了蜂鸣器的报
11、警功能。定时器1用来控制蜂鸣器响应的频率。在电路中蜂鸣器由P3.3 脚控制,当将所预置的时间倒数完毕后数码管进行模拟警报器声发出警报。蜂鸣器设计电路如图6示:图 6 蜂鸣器电路原理图2.5 数码管显示电路设计由于该设计需用到五位数码管来显示时间,所以必须要有一个数码管显示电路。电路数码管为共阳型。数码管位的选择由8255 PA口来处理,每次只选择其中一位数码管显示。用动态扫描技术对五个数码管进行扫描,由PA控制位选。利用快速的循环显示,人眼看到的就是多位了。用PB口控制数码管的段选,根据不同的显示时间选择不同的段码。每显示一位数码管都进行消隐,消除暗瘾。数码管连接图如下:图 7 数码管显示电路
12、原理图63 系统软件工作流程图3.1 系统工作流程程序采用模块化、结构化设计,并采用了软件抗干扰技术,其软件的可靠性较好,可维护性强。在本主程序中有 3 个状态:待命状态、计时工作状态和到点工作状态。当系统进入待命状态时,数码管上会显示“3000”样符号;通过按键 S4和 S8 来预置定时时间,时间可调范围是 0 到 59 分 59 秒。只要按下 S12 定时器打开开始倒计时。在工作中如果按下 S16 就可以暂停倒计时。在工作中,都结合数码管显示时间,继电器给电器供电,当时间显示到 0000 时蜂鸣器就会报警,表示继电器给电器断电了。系统程序流程图如下图所示:图 8 系统程序流程图73.2 定
13、时器 T0 中断工作分析定时器 T0 用于时间计时。定时溢出中断周期设为 50ms,中断进入后先进行定时中断值校正,当中断累计 20 次(即 50ms201s)时,对秒计数单元进行减 1操作;当到了 0s 时,分计数单元减 1 操作;直到计时完毕。4 系统调试及性能分析先检查印制板及焊接的质量情况,在检查无误后通电检查数码管的点亮状况。至于矩阵键盘的调试,关键是把握好按键的去抖效果。当出现按键“不灵”情况,一般是由于程序中用于按键去抖的延时时间不够。将程序编辑编译完成后,将生成的 hex 文件通过串口下载软件下载到 STC89C52 单片机芯片中去。在进行调试之前,还应注意操作的顺序:先进行定
14、时时间的预置,然后选定工作方式。下表所列的是系统定时功能测试结果。表 1 系统计时测试结果测量序号 理论值 测量值1 分钟 1 分钟 1 分钟5 分钟 5 分钟 4 分 59 秒10 分钟 10 分钟 9 分 58 秒15 分钟 15 分钟 14 分 57 秒30 分钟 30 分钟 29 分 56 秒误差分析:由于程序中使用了一些延时语句,所以如果计时时间过长的话,就会在时间上产生一定的误差。因为我们的计时完全是通过单片要内部的计时器来完成的,所以该误差是不可避免的。85 详细仪器清单表 2 仪器清单仪器名称 数量STC89C52 开发板 1 块串口下载线 1 根电源线 1 根万用表 1 块9
15、6 总结与思考及致谢课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。在这次课程设计过程中使我从中学到许多以前在课本和课堂上所无法学到的,特别是在课程设计过程中查找资料的过程中从中学到了许多东西并从中体会到许多的乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。在本次课程设计的过程中,曾得到过老师与几位同学的悉心指导与帮助,才使得我的设计非常圆满的完成,在此对他们表示我们最衷心的感谢,谢谢你们!因学习知识的能力和时间有限,并且此次单片机原理及应用课程设计对于我们来说还只是初体验,
16、因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评和指正,并再次感谢曾帮助过我的老师和同学。10参考文献1 楼然苗,李光飞编著.单片机课程设计指导M. 北京: 北京航空航天大学出版社,20072 朱定华,戴汝平编著.单片微机原理与应用M. 北京: 清华大学出版社,20033 胡汉才编著.单片机原理及接口技术M. 北京: 清华大学出版社,20044 谭浩强编著.C 程序设计( 第三版)M.北京: 清华大学出版社,20055 李大友.姜秀芳主编.单片微型硬件.软件及应用M. 北京 :高等教出版社,20036 沈红卫编著.单片机应用系统设计实例与分析M. 北京 :北京航空航天大学出版社,20
17、021112附录一:单片机系统板原理图13附录二:详细系统源程序#include#include #define PA XBYTE0xD1FF /*PA 口地址*/#define PB XBYTE0xD2FF /*PB 口地址*/#define PC XBYTE0xD5FF /*PC 口地址*/#define CON XBYTE0xD7FF /*控制字地址*/#define uint unsigned int#define uchar unsigned charsbit RELAY=P12; /*定义继电器接口*/sbit been=P33;/*数码管段*/uchar code TAB_COD
18、E=0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,0X20,0X28,0X30,0X25,0XE4,0X23,0X64,0X74;uchar num,t,s,m=30;/*小延时函数*/void delay(uint a)while(a-);void Time();void Start();void keyscan();void main()TMOD=0x21;/定时器工作方式设置TH0=(65535-50000)/256;14TL0=(65535-50000)%256;EA=1;ET0=1;ET1=1;CON=0x81;/控制字设置while(1)keysc
19、an();Time();Start();/*数码管显示函数*/void Start()PB=0xff;/*消影*/delay(100);PA=0xfe; /*位选通*/PB=TAB_CODEm/10;/*分十位显示*/delay(150);PB=0xff;delay(150);PA=0xfd;PB=TAB_CODEm%10;/*分个位显示*/delay(150);PB=0xff;delay(150);PA=0xfb;PB=0x7f; /*时间分隔-显示*/15delay(150);PB=0xff;delay(150);PA=0xf7;PB=TAB_CODEs/10;/*秒十位显示*/delay
20、(150);PB=0xff;delay(150);PA=0xef;PB=TAB_CODEs%10;/*秒个位显示*/delay(150);PB=0xff;delay(50);while(s=0/*定时器关闭*/TR1=1;/*定时器 1 打开*/RELAY=1;/*继电器断电*/delay(350);PA=0;PB=0xa0;num+=2; /*键盘扫描函数*/void keyscan()uchar k,j=0x10;CON=0x81;/*初始化 8255 控制器*/PC=0x10;/*把 PC.4 口拉高*/16k=PC;k=k/*判断是否有键按下*/if(k!=0) delay(50);S
21、tart();if(k!=0) while(PC!=0x10)/*松手检测*/Start(); k=k+j;if(k=0x18)m+;if(m=60) m=0;if(k=0x14)if(m=0)m=60;m-;if(k=0x12)/开始键TR0=1;RELAY=0;if(k=0x11)/暂停键17TR0=0;RELAY=1;P1=PC;/*倒计时控制函数*/void Time()if(t=20)t=0;if(s=0)s=60;if(m=0)m=60;m-;s-;void Ser0() interrupt 1TH0=(65535-50000)/256;TL0=(65535-50000)%256;t+;/定时器中断 1 设计蜂鸣器响应的频率void Ser1() interrupt 318TH1=0x01;TL1=num;been=!been;/*END*/