电子时钟单片机课程设计报告.docx

上传人:sccc 文档编号:4891761 上传时间:2023-05-21 格式:DOCX 页数:17 大小:300.27KB
返回 下载 相关 举报
电子时钟单片机课程设计报告.docx_第1页
第1页 / 共17页
电子时钟单片机课程设计报告.docx_第2页
第2页 / 共17页
电子时钟单片机课程设计报告.docx_第3页
第3页 / 共17页
电子时钟单片机课程设计报告.docx_第4页
第4页 / 共17页
电子时钟单片机课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《电子时钟单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《电子时钟单片机课程设计报告.docx(17页珍藏版)》请在三一办公上搜索。

1、单片机课程设计报告题 目 电子时钟 专业班级 学 号 学生姓名 指导教师 学院名称 电子信息工程学院 2014年 6月10日目录一、课程设计教学目标2二、设计目的2三、设计任务及要求2四、程序框图31.计时模块32.显示模块33.按键判断及处理程序44.音乐响铃模块55.主函数流程图6五、程序清单7六、感想体会16一、课程设计教学目标通过电子时钟等单片机技术课程十个题目的设计,使学生学会应用单片机技术的基本知识和基本技能,初步了解形成解决实际问题的能力及实际动手的能力。能正确使用实验开发平台或仿真器,会观察实验现象、记录有关数据,并能通过分析得出正确结论。学会阅读、分析或设计简单的单片机应用系

2、统线路图及设备的线路方框图。掌握阅读和编写简单的汇编程序或 C51 语言程序。思考利用单片机系统的开发、研制过程,初步具备设计和调试单片机应用系统的能力;并逐步培养学生的辩证思维能力,提高学生的全面素质。二、设计目的通过电子时钟综合设计,使学生学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制 LED 数码管显示原理,掌握单片机和按键以及 LED 数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解决实际问题的能力。三、设计任务及要求利用实验平台上 4 个 LED 数码管, 设计带有闹铃功能的数字时钟,要求:1在 4 位数码管上

3、显示当前时间。显示格式“时时分分”2由 LED 闪动做秒显示。3利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。四、程序框图1.计时模块利用单片机定时器0完成计时功能。定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1。当秒变量达到60时,秒变量清零同时分变量加1。分变量达到60时,分变量清零同时时变量加1。当时变量达到24时,时变量清零。由于实验要求由LED闪动做秒显示,因此每隔0.5s即计数500次时,P11(驱动LED灯)取反一次,从而实现LED灯闪动一次为1s,秒

4、变量加1。该模块流程图如下:2.显示模块为在各位LED上分别显示不同的字符,需要采用循环扫描显示的方法,即在某一时刻只选通一条位选线,并输出该位的字段码,其余位则处于关闭状态。可见,各位LED显示的字符并不是同时出现的,但由于人眼的视觉暂留及LED的余辉,可以达到同时显示的效果。程序流程图如下:采用动态显示时,需要确定LED各位显示的保持时间。由于LED从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的CPU时间。3.按键判断及处理程序按键的闭合与否,反映在电压上就是呈现出高电平或低电平。由于机械触点的弹性作用,在闭合及断开的瞬间,电压信号伴随有一定时间的

5、抖动,抖动时间与按键的机械特性有关,一般是510ms。为了保证CPU确认一次按键动作,既不重复也不遗漏,必须消除抖动的影响。通过软件消除抖动的方法为:在程序执行过程中检测到有按键按下时,调用一段延时(约10ms)子程序,然后判断该按键的电平是否仍然保持在闭合状态,如果是,则确认有键按下。按键判断流程图如下:按键处理流程图如下:4.音乐响铃模块音乐闹铃程序:单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的半个周期的定

6、时时间初始值,送入定时器,再由定时器按时输出高低电平。另外,音乐的节拍是由延时实现的。程序流程图如下:5.主函数流程图五、程序清单#includereg52.h#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/ /段选和位选都是低电平有效/二极管要亮必需正偏所以共阴极数码管位选必需是低电平选通,这样段选加高电平该段才能亮code unsigned char digseg=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x8

7、6,0x8E;/普通显示 / 0 1 2 3 4 5 6 7 8 9 A b C d E Fcode unsigned char digseg1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E;/普通显示 / 0 1 2 3 4 5 6 7 8 9 b c d e f code unsigned char segsel=0xfe,0xfd,0xfb,0xf7;/*定义并初始化变量*/uchar dminite=10; /定时的初始值uchar dhour=12; /定时的初始值uch

8、ar mstcnt=0;uchar seconde=0;uchar minite=0;uchar hour=12;sbit P3_2=P32; / 定时显示开调整定义 uchar n=0;sbit P3_3=P33; /minite调整定义sbit P3_4=P34; /hour调整定义sbit P3_5=P35;/定时显示关调整定义sbit BUZZER=P24; /蜂鸣器调整定义/*函数声明*/void delay(uchar k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /显示当前时间子程序void dishow( );/显示

9、定时子程序void keyscan( ); /键盘扫描子程序void compare( );/定时时间比对程序/*/ /*延时子程序*/*/void delay (uchar k)uchar j;while(k-)!=0) for(j=0;j125;j+) ; /*/ /*时间处理子程序*/*/void time_pro( void) if(seconde=60) /秒钟设为60进制 seconde=0; minite+; if( minite=60) /分钟设为60进制 minite=0; hour+; if(hour=24) /时钟设为24进制 hour=0; /*/*键盘扫描子程序*/*

10、/void keyscan (void) if(P3_2=0) delay(90); /按键去抖 if(P3_2=0) n=1; if(P3_5=0) delay(90); if(P3_5=0) n=0; if(n=0) if(P3_3=0) /按键1分的调整 delay(90); if(P3_3=0) hour+; if(hour=24) hour=0; if(P3_4=0) /按键1小时的调整 delay(90); if(P3_4=0) minite+; if(minite=60) minite=0; if(n=1) dishow(); /显示定时时间 if(P3_4=0) /按键1分的调

11、整 delay(90); if(P3_4=0) dminite+; if(dminite=60) dminite=0; if(P3_3=0) /按键1小时的调整 delay(90); if(P3_3=0) dhour+; if(dhour=24) dhour=0; /*/* 显示时间子程序*/*/void display(void) P2=segsel0; P0=digseghour/10; /显示小时的十位 delay(3); P2=segsel1; P0=(digseg1(hour%10); /显示小时的个位 delay(3); P2=segsel2; P0=digsegminite/10

12、; /显示分的十位 delay(3); P2=segsel3; P0=digsegminite%10; /显示分的个位 delay(3); /*/* 显示定时时间子程序*/*/ void dishow(void) P2=segsel0; P0=digsegdhour/10; /显示小时的十位 delay(3); P2=segsel1; P0=(digseg1(dhour%10); /显示小时的个位 delay(3); P2=segsel2; P0=digsegdminite/10; /显示分的十位 delay(3); P2=segsel3; P0=digsegdminite%10; /显示分的

13、个位 delay(3); /*/*中断程序*/*/void timer0(void) interrupt 1 using 0 /定时器0方式1,5ms中断一次 TH0=0xed; /预置计数初值 TL0=0xff; mstcnt+; if(mstcnt=200) seconde+; mstcnt=0; if(seconde%2=1) P1=0; else P1=0xff; /*/*定时时间比对程序*/*/ void compare(void) if(dhour=hour&minite=dminite) BUZZER=0; delay(9); /*/*主函数*/*/void main(void)

14、P1=0xff; /初始化p1口,全设为1 TMOD=0x01; /time0为定时器,方式1,16为计数器 TH0=0xed; /预置计数初值 TL0=0xff; EA=1; /EA=0表示所有中断请求被禁止,EA=1,则是否允许中断由各个中断控制位决定 ET0=1; /内部定时器0的开关,EA为总开关,当EA=1,ET0=1时,内部定时器0打开 TR0=1; /启动定时器 while (1) keyscan( ); /按键扫描 time_pro( ); /时间处理if(n=0) display( ); /显示时间 compare( ); /定时时间比对 六、感想体会这次课程设计是我第一次真

15、正的接触单片机。这几个星期的时间里,我学到了很多的东西。首先是硬件电路的问题。电路的焊接其实是挺简单的。焊完之后才我把数码管焊反了,让人欲哭无泪。后来在众多同学的帮助下,终于取了出来,重新焊接了一次。经过这次的教训,我以后在焊接电路和其他任何事情的时候,都要看清楚再做,一点都马虎不得,不然最后只能马虎了自己。对于单片机设计,其硬件电路主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。其实我一直都是很头疼编程的。这次希望能多学习一点知识,为大创做准备。还是硬着头皮编了一些子程

16、序。另外还借鉴了很多例程中的子程序。但怎样衔接各个子程序才是关键问题所在。比如在音乐响铃时,会导致数码管没有显示。这就要求我们仔细分析程序的结构,在响铃程序的相应位置调用数码管显示子程序。在这个地方也得到了很多同学的指点。此次课程设计让我更深刻地体会到课堂的学习对于真正地操作还相差很远,需要锻炼自学能力才能真正解决实际生活中的问题,而理论的学习只有在实践中才能对知识有更好的认识和理解。【参考文献】1戴胜华,蒋大明,杨世武等. 单片机原理与应用M. 北京:北京交通大学出版社,2008. 2张毅刚,单片机原理与应用M. 北京: 高等教育出版社, 2004.3周航慈.,单片机程序设计基础M. 北京: 北京航空航天大学出版社,1997.

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号