单片机课程设计可调数字钟(来自河北大学)

上传人:第*** 文档编号:62163535 上传时间:2018-12-17 格式:DOC 页数:17 大小:250.50KB
返回 下载 相关 举报
单片机课程设计可调数字钟(来自河北大学)_第1页
第1页 / 共17页
单片机课程设计可调数字钟(来自河北大学)_第2页
第2页 / 共17页
单片机课程设计可调数字钟(来自河北大学)_第3页
第3页 / 共17页
单片机课程设计可调数字钟(来自河北大学)_第4页
第4页 / 共17页
单片机课程设计可调数字钟(来自河北大学)_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《单片机课程设计可调数字钟(来自河北大学)》由会员分享,可在线阅读,更多相关《单片机课程设计可调数字钟(来自河北大学)(17页珍藏版)》请在金锄头文库上搜索。

1、一、绪论单片机正朝着高性能和多品种的方向发展,下一步的趋势将是继续向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机应用的重要意义还在于,它从根本上改变了传统控制系统的设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在已经能用单片机通过软件方法来实现了。用单片机设计制作数字钟是单片机的一个典型应用。通过设计制作一个数字钟,我们可以充分了解单片机的工作原理,学会如何用单片机实现数据的处理以及设备的控制等。设计制作一个数字钟虽然简单,但涉及到的内容却十分广博。本课程设计是基于单片机时钟的LED显示,通过单片机产生计数功能,经由LED数码

2、管显示,显示时间时、分、秒,并用按键进行时间调整,同时带有整点报时功能。本课程设计只是设计制作一个功能简单的数字钟,旨在通过对简单的硬件和软件的操作和应用以实现用数码管显示的数字钟,尝试基本的电路设计和单片机的C语言编程以及锻炼实践动手能力。二、 整体设计本设计采用51单片机内部定时器产生时钟来进行准确计时,时分秒由3个变量来记录,定义按键功能,来实现时钟的调节,最终是由LED数码管来动态显示时间。三、硬件电路设计3.1 总体电路设计3.2信号处理电路3.3单片机最小系统电路单片机外围电路有时钟电路和复位电路等,时钟电路采用的是内部时钟方式,在单片机内部有一振荡电路,在外部的XTAL1和XTA

3、L2引脚外接石英石英晶体(晶振)就构成了自激振荡器课在单片机内部产生时钟脉冲信号,两电容作用是稳定频率和快速起振,晶振的振荡频率我们采用的是经典值12MHz。复位电路采用的是上电复位和按键复位均有效的方式,单片机执行复位操作后进入初始化状态。主要功能引脚能能如下:P0的8位引脚产生8位段选信号,用于数码管显示;P1.0口控制着电路板上的绿色指示灯的亮灭,其中1为灭,0为亮;P2口各引脚功能:P2.0 P2.2分别连接3-8译码器的A、B、C输入端,编程时需要写P2.0 P2.2口来实现控制六个数码管的逐个显示;P2.3连接3-8译码器的使能端,编程时需要对P2.3写入0;P2.7 P2.4分别

4、连接K1K4按键,编程时,需要通过读取P2.7 P2.4的值获取按键状态;3.4 显示电路设计3.5 串口通信电路设计3.6 电源电路设计3.7 按键控制电路设计本次设计采用了4个独立的按键K1,K2,K3,K4用于后期时间的调整,其分别与单片机的P2.7 P2.4引脚连接,编程时,需要通过读取P2.7 P2.4的值获取按键状态。各按键经由上拉电阻与VCC相连,当按键按下时,与按键相连接的引脚为低电平,按键弹起时是高电平,即一次按键按下,为一个下降沿和一个上升沿。四、软件设计4.1 程序设计总体思路本次设计要实现数字钟的可调功能,我把程序分化为五个模块分别进行编写,分别为时间处理子程序、显示子

5、程序、按键扫描子程序、整点报时子程序以及中断子程序。4.2 各模块程序设计4.2.1 时间处理子程序在此模块中把秒sec设置为六十进制,分钟min设置为六十进制,小时hour设置为二十四进制,即当时间增加1s时,将显示部分的“秒”位加一,加到60以后进位为“分”,“秒”位清零;当“分”累加到60后进位为 “时” ,“分” 位清零;当“时”位为24以后,所有位清零后重新开始记时。时间处理子程序如下:void proc() /时间处理子程序if(sec=60) /秒变量满60进一sec=0;min+;if( min=60) /分变量满60进一min=0;hour+;if(hour=24) /时变量

6、满24进一hour=0;4.2.2 时钟显示子程序此段子程序用于实现数码管的动态显示,分为段选和片选。当系统处于正常计时状态时,数码管正常显示时钟,时与分之间和分与秒之间的小数点以1Hz的频率闪烁;当调节按键按下时,adjust_flag=1,小数点停止闪烁,当调节哪一位时(时、分、秒),哪一位的个位的小数点常亮,便于显示哪一位正在处于调节状态。时钟显示子程序如下:void display() /时钟显示子程序a=0;b=0;c=0; /位选,刷新小时的十位P0=zixinghour/10; /段选,将小时的十位数的字形赋给P0输出显示delay(3); /延时3msa=1;b=0;c=0;

7、/位选,刷新小时的个位if(adjust_flag=0&TR0=1) /正常计时时,时的个位的小数点闪烁if(dot=1)P0=(zixing(hour%10);elseP0=(zixing(hour%10)|0X80; /字形码的第一位是小数点的亮暗控制位,与0x80相与使小数点点亮else if(adjust_selc=3) /如果处于调节状态下的调时模式P0=(zixing(hour%10)|0X80; /时的个位,小数点常亮elseP0=(zixing(hour%10);/调节其他位时,小数点则不亮delay(3);a=0;b=1;c=0; /位选,刷新分的十位P0=zixingmin

8、/10;delay(3);a=1;b=1;c=0; /位选,刷新分的个位if(adjust_flag=0&TR0=1) /正常计时时,分的个位的小数点闪烁if(dot=1)P0=(zixing(min%10);elseP0=(zixing(min%10)|0X80; else if(adjust_selc=2) /如果处于调节状态下的调分模式P0=(zixing(min%10)|0X80; /分的小数点常亮elseP0=(zixing(min%10); /调节其他位时小数点则不亮delay(3);a=0;b=0;c=1;/位选,刷新秒的十位P0=zixingsec/10;delay(3);a=

9、1;b=0;c=1; /位选,刷新秒的个位if(adjust_selc=1) /如果处于调节状态下的调秒模式P0=(zixing(sec%10)|0X80; /秒的个位小数点常亮elseP0=(zixing(sec%10); /正常计数和调节其他位时,小数点都不亮delay(3);4.2. 3 检测按键子程序按键扫描子程序即扫描读取K1、K2、K3、K4,如果有按键按下,则做相应的处理。规定按键的功能如下:K4(P2.4):调节按键,当按一下K4时,由时间状态进入调节状态,调节标志变量adjust_flag=1,此时若adjust_selc=1,调秒;再按一下, adjust_selc=2,则

10、调分;再按一下,adjust_selc=3,则调时;再按一下,adjust_selc=4,adjust_selc=0,按一下K3或K2,由调节状态便成为时钟显示状态。K3(P2.5):加1按键,在调节状态下即adjust_flag=1,按一下K3按键则相应的调节位加1;K2(P2.6):减1按键,在调节状态下即adjust_flag=1,按一下K2按键则相应的调节位减1。检测按键子程序如下:void testkey () /检测按键子程序 if(P2_4=0) /K4键按下时display();display();display();display();display(); /用延时进行消抖处

11、理if(P2_4=0)TR0=0; /调时按键按下时,关闭定时器,停止计时adjust_flag=1; /调节标志置1,进入调时状态if(adjust_selc4)adjust_selc+; /更改调节位置elseadjust_selc=1; if(P2_5=0&adjust_flag=1) /K3加1键功能定义display();display();display();display();display(); /用延时进行防抖处理if(P2_5=0)switch(adjust_selc) /定义各调节模式下的按键功能 case 1: /调秒if(sec59)sec+;elsesec=0;br

12、eak;case 2: /调分if(min59)min+;elsemin=0;break;case 3: /调时if(hour0)sec-;elsesec=59;break;case 2: /调分if(min0)min-;elsemin=59;break;case 3: /调时if(hour0)hour-;elsehour=23;break;case 4:adjust_flag=0; /确认状态时,按一下K2则进入时钟计时模式TH0=0x3c; /定时器重新赋初值,开始计时TL0=0xb0;TR0=1;display();break;default:break; 4.2.4整点时绿灯点亮子程序

13、绿灯与P1.0相连,通过P2.7口控制P1.0的电平,用标志变量clock_flag记录按键K1的状态,K1按一次整点绿灯点亮功能开启,在分和秒都为0时,即整点时,绿灯亮一下;K1再按一次,定时功能关闭,整点时绿灯不再点亮。整点时绿灯点亮子程序:void clock() /整点绿灯亮子程序,此功能开启后,遇整点时绿灯亮一下if(P2_7=0)display();display();display();display();display();/延时使按键去抖动if(P2_7=0) /P2_7对应K1按键,按一次开启整点报时功能,再按一下关闭clock_flag=clock_flag;if(clock_flag=1&sec=0&min=0)green=0; /整点到

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号