当前位置:文档之家› 51单片机实时时钟设计

51单片机实时时钟设计

完成内容:完成一个简易数字时钟的软硬件设计,首先利用protus 完成功能方真,再利用dxp完成原理图和pcb的绘制,该数字时钟可具备如下功能:1、实现最基本的计时功能,显示时、分、秒,可以通过按键设置时间。

要求:时钟计时精确,按键操作不影响计时。

2、具备秒表计时功能。

要求:记时精度达到100ms,计时支持启动、暂停、继续和停止操作。

3、具备整点响铃提示功能。

要求:整点闹铃五短一长,闹钟响铃时可以按键清楚响铃。

4、具备日期显示和调整功能。

说明:以上功能中,1为必备功能,2、3、4为选做功能。

采用数码管完成显示,按键进行调整,供电采用usb供电,其中数码管和按键的个数以及操作方式自己决定。

系统操作以简洁,方便,原理图绘制正确,PCB布局布线规整为宜。

评测内容:protus的功能仿真测试,dxp原理图以及pcb绘制结果。

本设计使用89C51芯片作为控制芯片,复位电路和时钟电路构成单片机最小系统。

利用P0口8个引脚接上拉电阻,驱动LCD液晶显示时钟。

总体设计思路图 2.3单元电路设计本设计主要分为时钟电路模块,复位电路模块,显示模块和控制模块。

设计方案如下2.3.1 时钟模块89C51单片机的时钟信号通常用内部振荡方法得到,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方法。

由于单片机内部有一个高增益反相放大器,当外接晶振后单片机显示电路时钟电路 复位电路控制电路就构成了自激振荡器并产生振荡时钟脉冲。

晶振通常选择6MHz、12MHz、24MHz。

本设计采用12MHz晶振。

图中电容C1、C2起到稳固振荡频率、快速起振的作用。

电容值一般为5—30pF。

本设计选用33pF电容。

2.3.2 复位电路模块图2.4 复位电路复位操作完成电路的初始化,使单片机从一种确定的状态开始运行。

由上图可知,控制模块实际上就是单片机的最小系统。

本设计采用常用的上电且开关复位电路。

上电后,由于电容的充电,使RST持续一段高电平时间。

当单片机已在运行中时,按下复位键也能使RST 持续一段时间的高电平,从而实现上电且开关复位的操作。

此处C3电容取10uF,R2=K。

2.3.3控制模块图2.5 控制电路2.3.4显示模块显示部分电路设计如下图图2.6 显示模块电路图三、软件设计3.1程序设计思路(流程图)启动初始化选择时钟显示功能进入调时程序是否进入调时否运行时钟3.2源程序#include<reg52.h>unsigned char tab[]=" 23:58:48";unsigned char code tab2[]="hello";#define lcdp P0sbit rs=P3^5;sbit rw=P3^6;sbit en=P3^7;sbit led=P1^7;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;unsigned char n,count,mu;char ss=23,ff=58,mm=55;void delay(unsigned char z){unsigned char i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}void write_com(unsigned char com)//写指令{rs=0;rw=0;en=0;lcdp=com;delay(5);en=1;delay(5);en=0;}void write_date(unsigned char date)//写数据{rs=1;rw=0;en=0;lcdp=date;delay(5);en=1;delay(5);en=0;}void write_sj(unsigned add,unsigned date){unsigned char shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(shi+0x30);write_date(ge+0x30);}void init() //初始化{write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口write_com(0x06); //写一个字符后地址指针自动加1write_com(0x01); //显示清零,数据指针清零write_com(0x0c); //开显示,不显示光标//write_com(0x08);//write_com(0x0e);//光标开启,但不闪烁write_com(0x80); //显示位置for(n=0;n<10;n++){write_date(tab[n]);delay(1);}write_com(0x80+0x40+3);//第二行显示for(n=0;n<8;n++){write_date(tab2[n]);delay(1);}//定时器初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;TMOD=0x01;EA=1;ET0=1;TR0=1;}void key(){if(s1==0){delay(5);if(s1==0){mu++;while(!s1);}if(mu==1){TR0=0;write_com(0x80+9);write_com(0x0f);//光标闪烁}if(mu==2){write_com(0x80+6);write_com(0x0f);//光标闪烁}if(mu==3){write_com(0x80+3);write_com(0x0f);//光标闪烁}}if(mu==4){TR0=1;mu=0;write_com(0x0c);//关闭光标}if(mu!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(mu==1){mm++;if(mm==60)mm=0;write_sj(8,mm);write_com(0x80+9);}if(mu==2){ff++;if(ff==60)ff=0;write_sj(5,ff);write_com(0x80+6);}if(mu==3){ss++;led=!led;if(ss==24)ss=0;write_sj(2,ss);write_com(0x80+3);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(mu==1){mm--;if(mm==-1)mm=59;write_sj(8,mm);write_com(0x80+9);}if(mu==2){ff--;if(ff==-1)ff=59;write_sj(5,ff);write_com(0x80+6);}if(mu==3){ss--;led=!led;if(ss==-1)ss=23;write_sj(2,ss);write_com(0x80+3);}}}}}void main(){init();while(1){key();}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256; count++; if(count==20){count=0;mm++;if(mm==60){mm=0;ff++;if(ff==60){ff=0;ss++;if(ss==24){ss=0;}write_sj(2,ss);}write_sj(5,ff);}write_sj(8,mm);}}四、仿真调试总体仿真电路图如下图所示图4.1 整体仿真原理图4.1 keil简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C 语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。

因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

4.2 keil与protues联调双击图标进入Keil uVision2编程环境,输入程序。

返回桌面双击图标进入PROTEUS仿真环境。

点击左上角选项P后根据设计的电路图调出所需元件画好硬件原理图如图4.1所示。

然后按照4.1节所写步骤设置keil和proteus的工作环境。

实现keil和proteus的连调。

4.3 仿真结果。

相关主题