北交大单片机课设电子时钟_第1页
北交大单片机课设电子时钟_第2页
北交大单片机课设电子时钟_第3页
北交大单片机课设电子时钟_第4页
北交大单片机课设电子时钟_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课设报告-电子时钟-单片机课程设计实验报告 课题:电子时钟姓名:学号:专业班级: 指导教师: 实验时间:2014年6月5日一、设计目的通过电子时钟综合设计,使学生学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制 LED 数码管显示原理,掌握单片机和按键以及 LED 数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解决实际问题的能力。二、设计任务及要求利用实验平台上 4 个 LED 数码管, 设计带有闹铃功能的数字时钟,要求: 1 在 4 位数码管上显示当前时间。显示格式“时时分分” 2 由 LED 闪动做秒显示。 3

2、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。三、硬件设计1.显示模块为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。方法是将所有位的段选线相应并联,由一个8位I/O口控制,从而形成段选线的多路复用,同时各位的公共端分别由相应的I/O线控制,实现分时选通。硬件电路图如下,图中10k电阻起到限流作用;三极管起到驱动数码管的作用。若不使用三极管,数码管发光微弱。2.闹铃模块闹铃声由交流蜂鸣器产生,电路图如下。当P2.4输出不同频率的方波,.蜂鸣器便会发出不

3、同的声音。3.整体硬件电路图四、软件设计1计时模块利用单片机定时器0完成计时功能。定时器0计时中断程序每隔1ms中断一次并当作一个计数,每中断一次计数加1,当计数1000次时,则表示1s到了,秒变量加1。当秒变量达到60时,秒变量清零同时分变量加1。分变量达到60时,分变量清零同时时变量加1。当时变量达到24时,时变量清零。由于实验要求由LED闪动做秒显示,因此每隔0.5s即计数500次时,P11(驱动LED灯)取反一次,从而实现LED灯闪动一次为1s,秒变量加1。该模块流程图如下:程序如下:void Delay(int m) /延时函数int y=m/10;while(-m);void In

4、it_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

5、.显示模块为在各位LED上分别显示不同的字符,需要采用循环扫描显示的方法,即在某一时刻只选通一条位选线,并输出该位的字段码,其余位则处于关闭状态。可见,各位LED显示的字符并不是同时出现的,但由于人眼的视觉暂留及LED的余辉,可以达到同时显示的效果。程序流程图如下:采用动态显示时,需要确定LED各位显示的保持时间。由于LED从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的CPU时间。程序如下:void display( uint x,uint y) /数码管显示函数qian = x/10;bai = x%10;shi = y/10;ge =y%10; s

6、1=0 ;if(j=1)/设置模式下调整位闪烁函数s_flag+;if(s_flag=20)P0=0xff; else P0 = digsegqian;if(s_flag=40)s_flag=0;else P0 = digsegqian;Delay(500);s1=1; s2 = 0;if(j=1)s_flag+;if(s_flag=20)P0=0xff; else P0 = digsegbai;if(s_flag=40)s_flag=0; else P0 = digsegbai;Delay(500); s2 = 1;s3 = 0;if(j=2)s_flag+;if(s_flag=20)P0=

7、0xff; else P0 = digsegshi;if(s_flag=40)s_flag=0; else P0 = digsegshi;Delay(500); s3 = 1;s4 = 0;if(j=2)s_flag+;if(s_flag=20)P0=0xff; else P0 = digsegge;if(s_flag=40)s_flag=0; else P0 = digsegge;Delay(500); s4 = 1;3按键判断及处理程序按键的闭合与否,反映在电压上就是呈现出高电平或低电平。由于机械触点的弹性作用,在闭合及断开的瞬间,电压信号伴随有一定时间的抖动,抖动时间与按键的机械特性有关

8、,一般是510ms。为了保证CPU确认一次按键动作,既不重复也不遗漏,必须消除抖动的影响。通过软件消除抖动的方法为:在程序执行过程中检测到有按键按下时,调用一段延时(约10ms)子程序,然后判断该按键的电平是否仍然保持在闭合状态,如果是,则确认有键按下。按键判断流程图如下:按键处理流程图如下:程序如下:char check_K1(void) /按键检测函数 if(KEY1=0)Delay(2000); /防抖动if(KEY1=0)while(KEY1=0) ;return 1;return 0;char check_K2(void) if(KEY2=0)Delay(2000);if(KEY2=

9、0)while(KEY2=0) ;return 1;return 0;char check_K3(void) if(KEY3=0)Delay(2000);if(KEY3=0)while(KEY3=0) ;return 1;return 0;char check_K4(void) if(KEY4=0)Delay(2000);if(KEY4=0)while(KEY4=0) ;return 1;return 0;4.音乐响铃模块音乐闹铃程序:单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。众所周知,周期为频率的

10、倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。另外,音乐的节拍是由延时实现的。在单片机音乐演奏程序中,包括了两个数据表,其中存放了事先算好的各种音符频率所对应的半周期的定时时间初始值。有了这些数据,单片机就可以演奏低音、中音、高音,三个八度共21个音符。演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。通过调用延迟来实现节拍数。乐曲的数据,也要写个数据表:表中每三个数字,说明了一个音符,它们分别代表:第一个数字是音符的数值;第二个数字是123之一,代表低音、中音、高音;第

11、三个数字是时间长度,以半拍为单位。乐曲数据表的结尾是三个0。音节与频率的关系如下表所示音调X音调X音调X低音1F921中音1FC8F高音1FE47低音2F9E1中音2FCEE高音2FE77低音3FA8C中音3FD44高音3FEA2低音4FAD8中音4FD6B高音4FEB6低音5FB68中音5FDB4高音5FEDA低音6FBE9中音6FDF4高音6FEFA低音7FC5B中音7FE2D高音7FF16程序流程图如下:程序如下:code unsigned char yinyue=1,1,5,5,6,6,5,0,4,4,3,3,2,2,1,0,5,5,4,4,3,3,2,0,5,5,4,4,3,3,2,

12、0;/蜂鸣器音乐音符表uint music1=0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc;/不同频率对应计数器处初值(高八位)uint music2=0x21,0xe1,0x8c,0xd8,0x68,0xe9,0x5b,0x8f;/不同频率对应计数器初值(低八位)for(y=0;y=32;y+) /音乐播放display(hour,minute); if(check_K2()TR1=0;beep=1;break;if(y=32) y=0;if(yinyuey=0)Delay(60000);elseTH1=music1yinyuey-1;TL1=music2y

13、inyuey-1;beep=0;TR1=1;Delay(20000);TR1=0;beep=1;Delay(40000);5.主函数流程图void main()uint flag=0; P1=0x7f;Init_Timer0();Init_Timer1();display(hour,minute); while(1) if(check_K3() /显示模式切换 flag+; if(flag=3)flag=0;if(setflag=0)if (flag=0)display(hour,minute);if (flag=1)display(minute,second);if(flag=2)if(al

14、armflag=1)s1=0;s2=0;s3=0;s4=0;P0=0xbf;Delay(500);s2=1;s2=1;s3=1;s4=1;if(alarmflag=-1)display(a_hour,a_minute);if(check_K4()alarmflag= -alarmflag;if(check_K1() setflag+;j=1;if(setflag=1|setflag=2)Set_timer();if(a_hour=hour&minute=a_minute&second2&alarmflag=-1) /闹钟时间判定for(y=0;y=32;y+) /音乐播放display(hou

15、r,minute); if(check_K2()TR1=0;beep=1;break;if(y=32) y=0;if(yinyuey=0)Delay(60000);elseTH1=music1yinyuey-1;TL1=music2yinyuey-1;beep=0;TR1=1;Delay(20000);TR1=0;beep=1;Delay(40000); 五、软件实现功能1. 设置当前时间2. 设置时间时,显示屏闪烁3. 采用“时时分分”或“分分秒秒”的形式显示当前时间4. 以1s为间隔进行流水灯操作5. 开启或关闭闹钟6. 设置闹钟时间7. 到达闹钟时间后,蜂鸣器响起,显示屏闪烁闹钟时间,按

16、下指定键后,蜂鸣器关闭8. 蜂鸣器发出指定音乐的声音六、实验感想经过为期两周的单片机课设,通进对两个软件学习和完成一个时钟秒表设计并进行简单调试,我学到了很多东西! 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 在我的课设时也遇到过这样或那样的问题,感谢同学们和助教的帮助,在他们的指导下,在自己的的努力下,我最终顺利的完成了实验。在整个的课设的过程中我学习了很多的东西,使我眼界打开,感受颇深。简单的软件与硬件学习使我了解到了人生学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论