- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北交大单片机课设电子时钟
单片机课程设计实验报告课题:电子时钟姓名:学号:专业班级:指导教师:实验时间:2014年6月5日一、设计目的通过电子时钟综合设计,使学生学会利用8051 定时器时间计时处理功能,了解按键扫描及控制LED 数码管显示原理,掌握单片机和按键以及LED 数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解决实际问题的能力。二、设计任务及要求利用实验平台上 4 个 LED 数码管, 设计带有闹铃功能的数字时钟,要求: 1. 在 4 位数码管上显示当前时间。显示格式“时时分分” 2. 由 LED 闪动做秒显示。 3. 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。三、硬件设计1.显示模块为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。方法是将所有位的段选线相应并联,由一个8位I/O口控制,从而形成段选线的多路复用,同时各位的公共端分别由相应的I/O线控制,实现分时选通。硬件电路图如下,图中10k电阻起到限流作用;三极管起到驱动数码管的作用。若不使用三极管,数码管发光微弱。2.闹铃模块闹铃声由交流蜂鸣器产生,电路图如下。当P2.4输出不同频率的方波,.蜂鸣器便会发出不同的声音。3.整体硬件电路图四、软件设计1.计时模块利用单片机定时器0完成计时功能。定时器0计时中断程序每隔1ms中断一次并当作一个计数,每中断一次计数加1,当计数1000次时,则表示1s到了,秒变量加1。当秒变量达到60时,秒变量清零同时分变量加1。分变量达到60时,分变量清零同时时变量加1。当时变量达到24时,时变量清零。由于实验要求由LED闪动做秒显示,因此每隔0.5s即计数500次时,P1^1(驱动LED灯)取反一次,从而实现LED灯闪动一次为1s,秒变量加1。该模块流程图如下:程序如下:void Delay(int m) //延时函数{int y=m/10;while(--m);}void Init_Timer0()//计时器初始化函数{TMOD=0x11; TH0=0xEE;TL0=0x00; ET0=1;TR0=1;EA=1;}void Init_Timer1()//计时器初始化函数{TMOD=0x11; ET1=1;TR1=0;EA=1;}void time0(void) interrupt 1 //计时函数{TH0=0xee;TL0=0x00;i++;if (i==199) {P1=_cror_(P1,1); //循环位移second++;if(second==60) {second=0;minute++;if(minute==60){minute=0;hour++;if(hour==24){hour=0;}}}i=0;}}2.显示模块为在各位LED上分别显示不同的字符,需要采用循环扫描显示的方法,即在某一时刻只选通一条位选线,并输出该位的字段码,其余位则处于关闭状态。可见,各位LED显示的字符并不是同时出现的,但由于人眼的视觉暂留及LED的余辉,可以达到同时显示的效果。程序流程图如下:采用动态显示时,需要确定LED各位显示的保持时间。由于LED从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的CPU时间。程序如下:void display( uintx,uint y) //数码管显示函数{qian = x/10;bai = x%10;shi = y/10;ge =y%10; s1=0 ;if(j==1)//设置模式下调整位闪烁函数{s_flag++;if(s_flag=20){P0=0xff; }else{P0 = digseg[qian];if(s_flag==40)s_flag=0;}}else P0 = digseg[qian];Delay(500);s1=1;s2 = 0;if(j==1){s_flag++;if(s_flag=20){P0=0xff; }else{P0 = digseg[bai];if(s_flag==40)s_flag=0;}}else P0 = digseg[bai];Delay(500); s2 = 1;s3 = 0;if(j==2){s_flag++;if(s_flag=20){P0=0xff; }else{P0 = digseg[shi];if(s_flag==40)s_flag=0;}}else P0 = digseg[shi];Delay(500);
文档评论(0)