基于单片机的数字时钟设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于单片机的数字时钟设计小组成员:航空学院马创材料学院黄鹏材料学院张凌设计简介▷控制核心——STC90C51单片机▷显示器——七段式数码管▷软件——keil编写程序,导入proteus仿真▷功能——时间显示、按键调时、闹铃定时(待定)系统设计系统框图报时电路单片机电源电路时钟电路复位电路显示电路控制电路硬件设计——系统仿真电路图系统硬件组成及其功能一、电源电路二、时钟电路其输入引脚为18(XTA2)、19(XTAL1).电路有2个电容(C1/C2)其容量约为30pF还有一个晶体振荡器(1.2~12mHz)。时钟电路用于产生单片机工作所需要的时钟信号三、按键电路单片机引脚默认输出为高电平,当开关按下时引脚与地相连,引脚电平为低电平,单片机采集到低电平做出反应。四、复位电路a、上电复位b、按键复位五、显示电路六、报时电路74HC573OE:三态允许控制端低电平有效LE:数据锁存使能,1D~8D为数据输入端1Q~8Q为数据输出端功能:芯片74HC573是8位三态锁存器.可锁存地址,数据,可作缓冲器用。在本设计中采用74HC573提高对数码管的驱动能力。软件设计一、主程序流程图二、按键程序流程图三、程序及其功能#includereg51.hunsignedcharSeg[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0x40};//数码管显示1-9和—的断码unsignedcharCom[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};//数码管亮灭的数组/***************************************************************定义全局变量***************************************************************/unsignedintcounter=0;//定义计数数据unsignedcharmode;//定义模式unsignedcharsecond=0,minute=0,hour=0;//定义秒分时的初值unsignedcharADD_bit=0,DEC_bit=0,flag=0;//加标志位和减标志位赋初值0,/**************************************************************定义按键**************************************************************/sbitms=P1^0;//按键P^0调节模式变化sbitADD=P1^1;//按键P1^1实现加一sbitDEC=P1^2;//按键P1^2实现减一sbitSPK=P1^7;//按键P1^7实现报时/***************************************************************延时函数***************************************************************/voiddelay(unsignedintt){while(t--);}/******************************************************************数码管扫描******************************************************************/voidSegplay(){P0=Seg[second%10];P3=Com[7];delay(100);P3=Com[8];P0=Seg[second/10];P3=Com[6];delay(100);P3=Com[8];P0=Seg[10];P3=Com[5];delay(100);P3=Com[8];P0=Seg[minute%10];P3=Com[4];delay(100);P3=Com[8];P0=Seg[minute/10];P3=Com[3];delay(100);P3=Com[8];P0=Seg[10];P3=Com[2];delay(100);P3=Com[8];P0=Seg[hour%10];P3=Com[1];delay(100);P3=Com[8];P0=Seg[hour/10];P3=Com[0];delay(100);P3=Com[8];}/***************************************************************按键扫描***************************************************************/voidKeyget(){//通过标志位来控制模式if(ms==0){flag=1;}if((ms)&&(flag)){flag=0;mode++;if(mode==3)mode=0;}if(mode==1){if(ADD==0){ADD_bit=1;}//加按键if((ADD)&&(ADD_bit)){ADD_bit=0;minute++;if(minute==60)minute=0;}if(DEC==0){DEC_bit=1;}//减按键if((DEC)&&(DEC_bit==1)){DEC_bit=0;if(minute==0)minute=60;minute--;}}if(mode==2){if(ADD==0){ADD_bit=1;}if((ADD)&&(ADD_bit)){ADD_bit=0;hour++;if(hour==24)hour=0;}if(DEC==0){DEC_bit=1;}if((DEC)&&(DEC_bit==1)){DEC_bit=0;if(hour==0)hour=24;hour--;}}}/***************************************************************报时扫描***************************************************************/voiddidi(){if(second==0&&minute==0){SPK=1;delay(20);SPK=0;}}/**************************************************************************中断初始化**************************************************************************/voidtime0(){TMOD=0x01;//设置定时器模式1TH0=(65536-50000)/256;//高八位赋初值TL0=(65536-50000)%256;//低八位赋初值TR0=1;//启动定时器0计数ET0=1;//使能定时器中断EA=1;//使能总中断}/***********************************************************************主函数***********************************************************************/voidmain(){time0();while(1){Keyget();//加减控制Segplay();//数码管显示didi();//报时控制}}/**************************************************************************中断服务程序**************************************************************************/voidtimer0()interrupt1{TH0=(65536-50000)/256;//高八位赋初值TL0=(65536-50000)%256;//低八位赋初值counter++;if(counter==20){counter=0;second++;if(second==60){second=0;minute++;}//秒进位if(minute==60){minute=0;hour++;}//分进位if(hour==24){hour=0;}}}结论利用单片机来控制共阴极数码管显示时钟(时、分、秒),并且用三个按键(第一个开关控制调整时和分,第二个按键控制时或分的加一,第三个按键控制时或分的减一),同时用蜂鸣器来产生整点报时的功能。从而进一步加强了对单片机的认识和了解,和对数码管的结构进行更深一步的认识。利用单片机仿真软件初步实现了可调数字钟整点报时电路的功能。

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功