资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机课设报告-电子时钟-1单片机课程设计实验报告课题课题: :电子时钟姓名:姓名:学号:学号:专业专业班班级级: : 指指导导教教师师: : 实验时间实验时间: :2014 年 6 月 5 日单片机课设报告-电子时钟-2一、设计目的通过电子时钟综合设计,使学生学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制 LED 数码管显示原理,掌握单片机和按键以及 LED 数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解决实际问题的能力。二、设计任务及要求利用实验平台上 4 个 LED 数码管, 设计带有闹铃功能的数字时钟,要求: 1 在 4 位数码管上显示当前时间。显示格式“时时分分” 2 由 LED 闪动做秒显示。 3 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。三、硬件设计1.显显示模示模块块为了将时间在 LED 数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现 LED 显示。方法是将所有位的段选线相应并联,由一个 8 位 I/O 口控制,从而形成段选线的多路复用,同时各位的公共端分别由相应的 I/O 线控制,实现分时选通。硬件电路图如下,图中 10k 电阻起到限流作用;三极管起到驱动数码管的作用。若不使用三极管,数码管发光微弱。单片机课设报告-电子时钟-32.闹铃闹铃模模块块闹铃声由交流蜂鸣器产生,电路图如下。当 P2.4 输出不同频率的方波,.蜂鸣器便会发出不同的声音。3.整体硬件整体硬件电电路路图图单片机课设报告-电子时钟-4四、软件设计1 计时计时模模块块利用单片机定时器 0 完成计时功能。定时器 0 计时中断程序每隔 1ms 中断一次并当作一个计数,每中断一次计数加 1,当计数 1000 次时,则表示 1s 到了,秒变量加 1。当秒变量达到 60 时,秒变量清零同时分变量加 1。分变量达到 60 时,分变量清零同时时变量加 1。当时变量达到 24 时,时变量清零。由于实验要求由 LED 闪动做秒显示,因此每隔 0.5s 即计数500 次时,P11(驱动 LED 灯)取反一次,从而实现 LED 灯闪动一次为 1s,秒变量加 1。该模块流程图如下:单片机课设报告-电子时钟-5程序如下: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;单片机课设报告-电子时钟-6 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 的余辉,可以达到同时显示的效果。程序流程图如下:单片机课设报告-电子时钟-7采用动态显示时,需要确定 LED 各位显示的保持时间。由于 LED 从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的 CPU 时间。程序如下:void display( uint x,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 单片机课设报告-电子时钟-8P0 = 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=0xff; else P0 = digsegshi; if(s_flag=40)单片机课设报告-电子时钟-9s_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按按键键判断及判断及处处理程序理程序按键的闭合与否,反映在电压上就是呈现出高电平或低电平。由于机械触点的弹性作用,在闭合及断开的瞬间,电压信号伴随有一定时间的抖动,抖动时间与按键的机械特性有关,一般是510ms。为了保证 CPU 确认一次按键动作,既不重复也不遗漏,必须消除抖动的影响。通过软件消除抖动的方法为:在程序执行过程中检测到有按键按下时,调用一段延时(约 10ms)子程序,然后判断该按键的电平是否仍然保持在闭合状态,如果是,则确认有键按下。单片机课设报告-电子时钟-10按键判断流程图如下:按键处理流程图如下:程序如下:char check_K1(void) /按键检测函数 if(KEY1=0) Delay(2000); /防抖动if(KEY1=0) while(KEY1=0) ; return 1;单片机课设报告-电子时钟-11 return 0; char check_K2(void) if(KEY2=0) Delay(2000); if(KEY2=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;单片机课设报告-电子时钟-12 return 0; 4.音音乐乐响响铃铃模模块块音乐闹铃程序:单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。另外,音乐的节拍是由延时实现的。在单片机音乐演奏程序中,包括了两个数据表,其中存放了事先算好的各种音符频率所对应的半周期的定时时间初始值。有了这些数据,单片机就可以演奏低音、中音、高音,三个八度共21 个音符。演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。通过调用延迟来实现节拍数。乐曲的数据,也要写个数据表:表中每三个数字,说明了一个音符,它们分别代表:第一个数字是音符的数值;第二个数字是 123 之一,代表低音、中音、高音;第三个数字是时间长度,以半拍为单位。乐曲数据表的结尾是三个 0。音节与频率的关系如下表所示单片机课设报告-电子时钟-13音调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,0;/蜂 鸣器音乐音符表uint music1=0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc;/不同频率对应计数单片机课设报告-电子时钟-14器处初值(高八位) 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); else TH1=music1yinyuey-1; TL1=music2yinyuey-1; beep=0; TR1=1; Delay(20000); TR1=0; beep=1; Delay(40000); 5.主函数流程主函数流程图图单片机课设报告-电子时钟-15void 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);单片机课设报告-电子时钟-16if (flag=1) display(minute,second);if(flag=2) if(alarmflag=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
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号