51单片机实时时钟设计.docx
- 文档编号:4163857
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:190.87KB
51单片机实时时钟设计.docx
《51单片机实时时钟设计.docx》由会员分享,可在线阅读,更多相关《51单片机实时时钟设计.docx(13页珍藏版)》请在冰豆网上搜索。
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
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>0;j--);
}
voidwrite_com(unsignedcharcom)//写指令
{
rs=0;
rw=0;
en=0;
lcdp=com;
delay(5);
en=1;
delay(5);
en=0;
}
voidwrite_date(unsignedchardate)//写数据
{
rs=1;
rw=0;
en=0;
lcdp=date;
delay(5);
en=1;
delay(5);
en=0;
}
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);//第二行显示
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;
}
voidkey()
{
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);
}
}
}
}
}
voidmain()
{
init();
while
(1)
{
key();
}
}
voidtime0()interrupt1
{
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.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仿真结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 实时 时钟 设计