电子时钟系统设计.doc

上传人:laozhun 文档编号:3989217 上传时间:2023-03-30 格式:DOC 页数:28 大小:355KB
返回 下载 相关 举报
电子时钟系统设计.doc_第1页
第1页 / 共28页
电子时钟系统设计.doc_第2页
第2页 / 共28页
电子时钟系统设计.doc_第3页
第3页 / 共28页
电子时钟系统设计.doc_第4页
第4页 / 共28页
电子时钟系统设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《电子时钟系统设计.doc》由会员分享,可在线阅读,更多相关《电子时钟系统设计.doc(28页珍藏版)》请在三一办公上搜索。

1、课 程 设 计 任 务 书题目 电子时钟系统设计 专业、班级 学号 姓名 主要内容、基本要求、主要参考资料等:一、主要内容: 熟悉单片机应用系统的设计方法和规范,达到综合的目的。 学习文件检索和查找数据手册的能力。 学习protel软件的使用。 学会整理和总结设计文档报告。二、基本要求: 以MCS-51系列单片机为核心,组成一个电子时钟系统。 系统显示由6位数码管显示组成,分别显示时间值的时、分、秒。 能够随时对当前时间进行调整。 能够随时输入定时(闹钟)时间。 定时(闹钟)时间到,发出闹钟提醒信号。 闹钟提醒信号的声音为断续形式,最长不超过1分钟。三、主要参考资料: 张毅坤等 单片微型计算机

2、原理及应用 西安 西安电子科技大学出版社 李建忠编著 单片机原理及应用 西安 西安电子科技大学出版社完 成 期 限: 指导教师签名: 课程负责人签名: 2013年 12月 22 日目 录摘 要11 设计方案选择21.1 单片机选型21.2 按键模块21.3 显示模块21.4 计时参考模块31.5 显示器驱动模块31.6 闹钟响铃模块41.7 电源模块42 硬件接线及设计42.1 单片机晶振配置52.2复位电路设计52.3 按键电路设计62.4 蜂鸣器驱动电路设计62.5 显示模块电路设计73 软件部分73.1 主函数流程图73.2 定时器T0中断服务程序流程图83.3 闹钟响应程序流程图93.

3、4 键盘扫描程序流程图104 系统综述114.1 上电界面114.2 调时界面114.3 闹钟设定界面114.4 正常走时界面124.5 闹钟响应12附录1 总体设计电路图15附录2 PCB图16附录3 元件清单17附录4 总程序18摘 要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广泛、发展很快。Intel公司生产的MCS-8051系列单片机是各单片机中最为典型和最有代表性的一种。本次设计以MCS-8051芯片为核心,辅助以必要的外围电路,设计了一个结构简单功能齐全的数值时钟。在硬件方面,单片机外接12MHz芯片进行驱动。通过数码管能够准确明亮的显示时

4、、分、秒;四个简单的按键实现对时间的调整;蜂鸣器实现闹钟响铃功能;软件方面采用c语言编程。整个电子钟系统能完成时间的显示、调试和一组定时闹钟的功能。 关键词:51单片机,定时器,闹钟,数码管1 设计方案选择1.1 单片机选型 根据选题芯片采用MCS-8051单片机,Intel公司生产的 51 系列 8 位单片机,凭借其成熟的技术标准和很高的性价比得到了广泛的普及与应用,其功能强大,用来做电子表硬件易实现,编程规范。1.2 按键模块 方案一:44行列式键盘如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷。缺点也很明显,一是浪费按键,用全键盘来实现设定时间的小功能不免

5、大材小用;二是从实用性考虑,全键盘体积大,明显不经济不方便。故放弃。 方案二:独立式按键如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,同时浪费按键,不高效,程序繁琐。本次设计适用于按键较少的情况。为了尽量实现按键的高效性,此次设计采用四个独立式按键,分别定义为key_mode、key_add、key_move,key_confirm,依次是模式键、加数键、移位键、确认键。1.3 显示模块方案一:液晶显示器LCD如果选择此方案,将会降低系统的功耗,可以用电池供电,便于携带,但液晶显示器的驱动电路复杂,使用起来有一定的难度。 方案二:数码管LED数码管的驱动电路简单,使用方便,如果

6、选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。 按照此次任务书设计要求,选择两个4位一体七段数码管用于显示。1.4 计时参考模块方案一:专用时钟芯片如果使用时钟芯片,系统就不怕掉电且时间精确,但这种芯片比较贵,浪费资源不经济。方案二:单片机内部定时/计数器由于本次设计本主要是为了学习单片机程序的编写和调试,以及设计硬件电路的一些方法,因此采用软件的方法来计时。本次设计用单片机内部定时/计数器T0作为电子时钟参考。1.5 显示器驱动模块 由于通过数码管公共极的电流较大,单片机I/O口驱动能力是不够的,故LED驱动模块必不可少。为避免过多地使用分立元件,本次设计采

7、用一片 74LS245来驱动位码,用P2口进行位选扫描。 图1 74LS245元件封装图74LS245是常用来驱动LED或者其他的设备,它是 8 路同相三态双向总线收发器,可双向传输数据,74LS245还具有双向三态功能。片选端,接低电平时传输数据,接高电平时A、B均为高阻态。方向选择端AB/,接高电平时信号由A向B传输(发送),接低电平时信号由B向A传输(接收)。1.6 闹钟响铃模块 通过三极管放大后驱动蜂鸣器工作,单片机I/O接三极管基极。1.7 电源模块本系统采用了数码管作为显示器,功耗较大,不便于使用电池供电。况且本系统的体积较大,即使使用电池供电也不便于随身携带,因此用5V外部稳压电

8、源来供电。2 硬件接线及设计8位七段LED显示器MCS-8051段码驱动晶 振复位电路位码驱动按 键蜂鸣器图2 系统硬件框图2.1 单片机晶振配置图3 单片机晶振配置和复位电路晶振选择 12MHz ,接到如图所示引脚。2.2复位电路设计图4 复位电路复位电路兼具上电复位功能以及按键复位功能,接到如图所示引脚。2.3 按键电路设计图5 按键电路采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。四个独立式按键分别定义为key_mode、key_add、key_move、key_confirm,依次是模式键、调时加键、调时移位键、确认键。2.4 蜂鸣器驱动电路设计图6 蜂鸣器驱动电路蜂鸣

9、器采用NPN三极管放大电路驱动,接到如图所示引脚。2.5 显示模块电路设计显示设备为共阳7段数码管(LED),用单片机P0口作为LED段选控制端,用单片机P2口作为LED位选控制端,并采用集成块74LS245作为位驱动模块。片选端接地,方向选择端AB/接电源。3 软件部分3.1 主函数流程图开 始初始化定时器T0循环中断计时主循环键盘扫描闹钟判定显示响应闹钟响应结 束图7 主函数程序流程图开 始3.2 定时器T0中断服务程序流程图T0重装初值t+1t=20?t=0, sec+1sec=60??sec=0, min+1min=60??min=0, hour+1hour=24??hour=0结 束

10、图8 定时器T0中断服务程序流程图3.3 闹钟响应程序流程图开 始闹钟判定闹钟定时到?闹钟打开?key_confirm按下?响铃一分钟关闭蜂鸣器结 束图9 闹钟响应程序流程图3.4 键盘扫描程序流程图开 始键盘扫描有键按下?键盘抖动?key_confirmkey_movekey_addkey_modeconfirm();mov+1add( );moshi+1moshi2?mov2?moshi=0mov=0结 束 图10 键盘扫描程序流程图4 系统综述4.1 上电界面电子表上电后自动初始化,接着从 00-00-00 开始走时,显示正常走时界面,此时闹钟默认关掉。按下key_mode键,可依次切换

11、到调时界面、调闹钟界面、正常走时界面,如此循环往复。上电初始化后,调时初值为00 00-00,闹钟初值为00-00 00。4.2 调时界面调时界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在调时界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。当且仅当在调时界面下,按下key_confirm键可确认设定,电子表按设定时间更新并走时,同时自动清零设定时间。此时再按 key_mode键切换回正常走时界面即能看到时间已经更新。如果调时后没有按下key_confirm键确认,而是直接按key_mode键

12、切换回正常走时界面,则设置时间被保存,当前时间并不更新。4.3 闹钟设定界面闹钟设定界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在闹钟设定界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。闹钟设置好后直接按key_mode键返回正常正常走时界面即可,无需按key_confirm键确认,闹钟设定值会自动保存。4.4 正常走时界面正常走时界面,从左至右依次显示时、分、秒,小点亮灭代表闹钟开闭。在正常走时界面下,按下key_add键和key_move键不产生操作,LED显示无变化;按下key_con

13、firm键可循环开闭闹钟,LED显示对应变换提示闹钟的开闭;按下key_mode键可依次切换到调时模式、闹钟设定模式、正常走时模式,循环往复。4.5 闹钟响应当正常走时到达闹铃设定值后,闹铃响应,正常情况下持续蜂鸣一分钟后自动关闭蜂鸣器。闹铃响铃过程中,若按下key_confirm键可立刻关闭蜂鸣器。闹铃响应后自动等待下次响应。总 结在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些

14、资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问

15、题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。参考文献1郑君里,应启珩,杨为理. 信号与系统(第二版)上册M. 高等教育出版社,20002郑君里,应启珩,杨为理. 信号与系统(第二版)下册M. 高等教育出版社,20003谭浩强. C程序设计(第二版)M. 清华大学出版社,20034 于京51系列单片机C程序设计与应用案例M北京:中国电力出版社,20065 孙育才ATMEL新型AT89S52系列单片机及其应用M北京:清华大学出版社, 20056吴坚,刘高平.基于GPRS网络的点对点图像传输方案J.计算机应用研究,2004,附 录附录1 总

16、体设计电路图附录2 PCB图附录3 元件清单序号元件名称规格型号/参数数量(个)1单片机AT89C5112显示驱动三极管Q113晶振12MHz14电容33pF210F15按键S116排阻10217电阻10K14.7K18蜂鸣器LS119数码管4BIT_8SEG_LED210驱动芯片74LS2451附录4 总程序/*头文件及宏定义*#include #define uchar unsigned char#define uint unsigned int/*软件延时程序*void delay(uint ii) while(-ii); /*定义数码管驱动码*uchar duan=0XC0,0XF9,

17、0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0X7F; /段选,0 1 2 3 4 5 6 7 8 9 - 灭 .uchar wei=0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80;/位选,共阳,从右至左/*定义变量*uchar t=0,sec=0,min=0,hour=0;/正常走时时间变量uchar sec1=0,min1=0,hour1=0; /时间设定值变量uchar sec2=0,min2=0,hour2=0; /闹钟设定值变量uchar alarm_en=0; /闹钟开关变量uchar alar

18、m_flag=0; /闹钟定时到达标志变量uchar p3=0,moshi=0,mov=0; /P3口查询,模式值,调整位/显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记uchar temp8,temp18,temp28,temp38;/*函数声明*void initialize(void); /初始化void show(void); /正常走时显示void show1(void); /时间设定显示void show2(void); /闹钟设定显示void show3(void); /调整位标记void show4(void); /闹钟开关标记void keyscan(void); /

19、键盘扫描void add(void); /调时调闹钟加数程序void confirm(void); /调时确认,闹钟开关void alarm_judge(void); /闹钟定时到达判定void beep(void); /闹钟响铃程序/*主函数*void main() initialize(); while(1) keyscan(); alarm_judge(); switch(moshi) case 0:show(); show4();break; /显示正常走时 case 1:show1();show3();break; /显示设置时间 case 2:show2();show3();bre

20、ak; /显示闹钟时间 if(alarm_flag=1 & alarm_en=1) /定时时间到达且闹钟打开 beep(); /*定时器初始化*void initialize(void) TMOD = 0x01; TH0 = 0X3C; TL0 = 0XB0; /50ms ET0 = 1; EA = 1;TR0 = 1;P1=0X7F; /初始化时关掉蜂鸣器 alarm_flag=alarm_en=0;/*定时器T0中断服务程序*void Timer0(void) interrupt 1 TL0 = 0XB0; TH0 = 0X3C; t+; if(t=20) / (50ms*20=1s) t

21、=0; sec+; if(sec=60) / 秒为60,则清零,分加1 sec=0; min+; if(min=60) / 分为60,则清零,时加1 min=0; hour+; if(hour=24) / 时为24,则清零 hour=0; if(sec1=60) sec1=0; min1+; if(min1=60) min1=0; hour1+; if(hour1=24) hour1=0; if(sec2=60) sec2=0; min2+; if(min2=60) min2=0; hour2+; if(hour2=24) hour2=0;/*正常时间显示程序*void show(void)

22、uchar i=0; temp0=sec%10;temp1=sec/10;temp2=10; temp3=min%10; temp4=min/10;temp5=10;temp6=hour%10;temp7=hour/10; for(i=0;i8;i+) P2=weii; P0=duantempi; delay(100); /*调时模式显示程序*void show1(void) uchar i=0; temp10=sec1%10;temp11=sec1/10;temp12=10; temp13=min1%10; temp14=min1/10;temp15=11;temp16=hour1%10;t

23、emp17=hour1/10; for(i=0;i8;i+) P2=weii; P0=duantemp1i; delay(100); /*闹钟设定模式显示程序*void show2(void) uchar i=0; temp20=sec2%10;temp21=sec2/10;temp22=11; temp23=min2%10; temp24=min2/10;temp25=10;temp26=hour2%10;temp27=hour2/10; for(i=0;i=3) moshi=0; while(p3=0XFE) / key_mode键按下到弹起期间 p3=P3; switch(moshi)

24、case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 if(p3=0XFD) /key_add键 delay(10);if(p3=0XFD) add(); while(p3=0XFD) / key_add键按下到弹起期间 p3=P3; switch(moshi) case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 if(p3=0XFB) /ke

25、y_move键 delay(10);if(p3=0XFB) mov+; if(mov=3) mov=0; while(p3=0XFB) / key_move键按下到弹起期间 p3=P3; switch(moshi) case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 if(p3=0XF7) /key_confirm键 delay(10);if(p3=0XF7) confirm(); while(p3=0XF7) / key_confirm键按下到弹起期间 p3=P3;

26、 switch(moshi) case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 /*调时调脑钟增数程序*void add(void) /模式1,调时模式,调时增数 if(moshi=1 & mov=0) sec1+; if(moshi=1 & mov=1) min1+; if(moshi=1 & mov=2) hour1+; /模式2,闹钟设定模式,闹钟增数 if(moshi=2 & mov=0) sec2+; if(moshi=2 & mov=1) min2+;

27、if(moshi=2 & mov=2) hour2+; /*确认键服务函数*void confirm(void) if(moshi=1) /模式1,调时环境下校正时间 t=TF0=0; sec=sec1; min=min1; hour=hour1; sec1=min1=hour1=0; alarm_en+; /开闭闹钟 if(alarm_en1) alarm_en=0;/*闹钟判断函数*void alarm_judge(void) if(hour=hour2 & min=min2 & sec=sec2 ) /定时到达设定标志 alarm_flag=1; if(hour=hour2 & min=min2+1) /常规响铃一分钟 alarm_flag=0; /*闹钟响铃函数*void beep(void)P1=!P1;

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号