51单片机实时时钟设计Word文件下载.docx
《51单片机实时时钟设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机实时时钟设计Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
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>
unsignedchartab[]="
23:
58:
48"
;
unsignedcharcodetab2[]="
hello"
#definelcdpP0
sbitrs=P3^5;
sbitrw=P3^6;
sbiten=P3^7;
sbitled=P1^7;
sbits1=P1^0;
sbits2=P1^1;
sbits3=P1^2;
unsignedcharn,count,mu;
charss=23,ff=58,mm=55;
voiddelay(unsignedcharz)
{
unsignedchari,j;
for(i=z;
i>
0;
i--)
for(j=110;
j>
j--);
}
voidwrite_com(unsignedcharcom)//写指令
rs=0;
rw=0;
en=0;
lcdp=com;
delay(5);
en=1;
voidwrite_date(unsignedchardate)//写数据
rs=1;
lcdp=date;
voidwrite_sj(unsignedadd,unsigneddate)
unsignedcharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(shi+0x30);
write_date(ge+0x30);
voidinit()//初始化
write_com(0x38);
//设置16x2显示,5x7点阵,8位数据接口
write_com(0x06);
//写一个字符后地址指针自动加1
write_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);
//第二行显示
8;
write_date(tab2[n]);
//定时器初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
voidkey()
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);
if(mu==3)
write_com(0x80+3);
if(mu==4)
mu=0;
//关闭光标
if(mu!
=0)
if(s2==0)
s2);
mm++;
if(mm==60)
mm=0;
write_sj(8,mm);
ff++;
if(ff==60)
ff=0;
write_sj(5,ff);
ss++;
led=!
led;
if(ss==24)
ss=0;
write_sj(2,ss);
if(s3==0)
s3);
mm--;
if(mm==-1)
mm=59;
ff--;
if(ff==-1)
ff=59;
ss--;
if(ss==-1)
ss=23;
voidmain()
init();
while
(1)
key();
voidtime0()interrupt1
count++;
if(count==20)
count=0;
}
四、仿真调试
总体仿真电路图如下图所示
图4.1整体仿真原理图
4.1keil简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。
因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
4.2keil与protues联调
双击图标进入KeiluVision2编程环境,输入程序。
返回桌面双击图标进入PROTEUS仿真环境。
点击左上角选项P后根据设计的电路图调出所需元件画好硬件原理图如图4.1所示。
然后按照4.1节所写步骤设置keil和proteus的工作环境。
实现keil和proteus的连调。
4.3仿真结果