资源描述:
《基于单片机的数字时钟设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、郑州航空工业管理学院单片机课程设计2011届电子信息工程专业班级题目基于单片机的数字时钟设计学号姓名指导教师王丹二О一三年十二月二十八日电子时钟的基本原理该课程设计为数字时钟的设计,以STC89C52为核心,配合数码管显示器和按键提供长期、连续、可靠、稳定的工作环境。该数字电子钟有时分秒显示和日期显示以及时间和日期调整的功能。系统软件设计编程主要实现参数设置,实现键盘、数码管显示器等各模块的功能。设计要求:1、单片机内部的定时器实现时钟功能;2、显示小时、分钟、秒钟;3、后初始时间为12-00-00;4、设定时分秒。单片机的接口信号
2、是数字信号。MAX232是一种把电脑的串行口RS-232信号电平(-10,+10v)转换为单片机所用到的TTL信号点平(0,+5)的芯片。系统硬件设计框图如图2-1所示。图2-1系统硬件设计框图一、电子时钟的硬件设计根据要求,利用DXP2004画出数字时钟的原理图如下所示:图1电子时钟原理图数字时钟是一个将“时”、“分”、“秒”显示的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。因此,一个基本的数字钟电路主要由显示器“时”,“分”,“秒”和单片机,还有校时电路组成。8个数码管的段选接到单片机的P
3、0口,位选接到单片机的P2口。显示电路通过三极管驱动,将“时”、“分”、“秒”通过七段显示器显示出来。按键KEY1至KEY6由矩阵电路构成,按KEY1键秒加一,按KEY2键秒减一,按KEY3键分加一,按KEY4键分减一,按KEY5键时加一,按KEY6键时减一。通过手动复位键进行复位,手动复位后的初始时间为12-00-00。表1元件清单表一、电子时钟的软件设计程序流程图如下:开始N24小时到?分清零,时加1NNNYY时单元清零时间显示中断返回一秒时间到?60秒时间到?60分钟到?秒单元加1秒清零,分加1YY开始NYNYNY时加减1显示
4、时间结束秒按键按下?秒加减1分按键按下?分加减1时按键按下?源程序如下:#include#defineucharunsignedchar#defineuintunsignedintucharnum=0,SEC=0,MIN=0,HOUR=12,key;ucharcodetab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};voiddelayms(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}
5、/*********************************函数名:keyscan()功能描述:矩阵键盘扫描*********************************/voidkeyscan()//矩阵键盘扫描函数{ucharx,y;P3=0xf0;if(P3!=0xf0){delayms(10);if(P3!=0xf0){switch(key){case0x7e:key=1;SEC++;break;case0x7d:key=2;if(SEC>0)SEC--;break;case0x7b:key=3;MIN++;br
6、eak;case0x77:key=4;if(MIN>0)MIN--;break;case0xbe:key=5;HOUR++;break;case0xbd:key=6;if(HOUR>0)HOUR--;break;default:key=100;break;}}}}voiddisplay(void){uchari;for(i=0;i<8;i++){dig=dig&~BIT(i);//dig
7、=BIT(i);
8、=逻辑或switch(i){case0:seg=tab[SEC%10];break;case1:seg=tab[SEC/10];
9、break;case2:seg=tab[10];break;case3:seg=tab[MIN%10];break;case4:seg=tab[MIN/10];break;case5:seg=tab[10];break;case6:seg=tab[HOUR%10];break;case7:seg=tab[HOUR/10];break;default:break;}delayms(3);dig
10、=BIT(i);//dig=dig&~BIT(i)}}voidinit()//初始化函数,做初始化工作的{dig=0xFF;//位选seg=0
11、x00;//段选TMOD
12、=0X01;//定时器0方式1IE
13、=0X82;//EA=1,T0=1TCON
14、=0X10;//定时器控制寄存器TR0=1}voidmain(){init();//初始化子程序while(1){keyscan