多功能电子万年历.docx
- 文档编号:1690791
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:28
- 大小:711.74KB
多功能电子万年历.docx
《多功能电子万年历.docx》由会员分享,可在线阅读,更多相关《多功能电子万年历.docx(28页珍藏版)》请在冰点文库上搜索。
多功能电子万年历
单片机开发与设计
工程师
考试设计文档
设计题目:
基于DS12C887的多功能时钟设计
学校:
湖南人文科技学院
系别:
通信与控制工程系
专业:
自动化
班级:
07级自动化一班
学生姓名:
周军张乐云占友雄
学号:
074211350742115607421102
时间:
2010年6月
摘要
单片机是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。
它体积小、成本低、功能强、广泛应用于智能产业和工业自动化上。
51系列单片机是各单片机中最为典型和最有代表性的一种。
这次设计通过对它的学习、应用,从而达到学习、设计、开发软、硬的能力。
本文通过对一个基于单片机的能实现多功能万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。
系统由主控制器STC89C52、时钟电路DS12C887、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示功能,掉电数据保存功能(外部断电的情况下保存10年以上)。
关键词:
STC89C52单片机;时钟电路DS12C887;万年历;
目录
1方案论证与选择1
2单元电路设计与计算2
2.1主控制器STC89C522
2.2时钟电路DS12C8874
2.3复位电路7
2.4显示电路7
3系统软件的设计8
3.1系统工作流程8
3.2键盘扫描程序9
4设计仪器10
5总结与思考及致谢11
参考文献12
附录一:
硬件电路原理图13
附录二:
程序14
附录三:
实物图20
多功能电子万年历
1方案论证与选择
系统单片机芯片部分采用STC89C52,片内ROM全都采用FlashROM;与MCS-51系列单片机完成该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
系统显示模块采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
系统采用DS12CR887时钟芯片实现时钟,DS12CR887芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区。
在外部断电的情况下时钟可自行走10年以上。
原理框图如图1所示:
图1方案一系统方框图
2单元电路设计与计算
2.1主控制器STC89C52
STC89C52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。
STC89C52具有如下特点:
(1)40个引脚双列直插芯片。
(2)8kBytesFlash片内程序存储器。
(3)128bytes的随机存取数据存储器(RAM)。
(4)4个8位输入/输出(I/O)口,每一条I/O线都能独立地作输出或输入。
(5)5个中断优先级2层中断嵌套中断。
(6)2个16位可编程定时计数器。
(7)2个全双工串行通信口。
(8)看门狗(WDT)电路。
(9)内时钟振荡器。
1.内部结构
按功能分为8部分:
CPU,程序存储器,数据存储器,时钟电路,串行口,并行I/O口,中断系统,定时/计数器。
2.引脚定义及功能
VCC(40):
+5V。
GND(20):
接地。
P0口(39-32):
P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流。
P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流。
P2口(21-28):
P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流。
P3口(10-17):
P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口。
RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间。
XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入。
XTAL2(18):
来自反向振荡器的输出。
PSEN(29):
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现。
ALE/PROG(30):
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲。
EA/VPP(31):
当EA保持低电平时,外部程序存储器地址为(0000H-FFFFH)不管是否有内部程序存储器。
FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
3.片外总线结构
分为三部分:
数据总线DataBus(DB),地址总线AddressBus(AB),控制总线ControlBus(CB)。
4.STC89C52芯片引脚图
图2STC89C52芯片引脚图
2.2时钟电路DS12C887
1.DS12C887的结构及工作原理
DS12C887是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。
是一款与DS12885功能呢兼容的替代产品。
该器件提供RTC/日历、定时闹钟、三个可屏蔽的中断和一个通用中断输出、可编程方波以及114字节电池备份的静态RAM。
少于31天的月份,月末日期可自动调整,其中包括闰年补偿。
该器件还可以工作于24小时或带AM/PM指示的12小时格式。
一个精密的温度补偿电路来监视Vcc的状态。
如果检测到主电源故障,该器件可自动切换到备用电源供电。
VBACKUP引脚用于支持可充电电池或超级电容,内部包括一个始终有效的涓流充电器。
DS12C887可以通过一个多路复用的单字节接口访问,该接口支持Intel和Motorola模式。
DS12CR887将DS12R887和DS12R885与石英晶体和电池集成在一起。
2.主要功能及特点
⏹为充电电池或超级电容提供涓流充电
⏹可选Intel或Motorola总线时序
⏹RTC计数秒、分、时、日期、月份和年份,闰年补偿至2100年
⏹具有三个可单独屏蔽中断标志位的中断输出
⏹定时闹钟为每秒一次至每日一次
⏹122us至500ms周期速率
⏹时钟更新周期结束标志
⏹14字节的时钟和控制寄存器
⏹114字节带清0输入的通用RAM
⏹可编程方波输出
⏹自动电源故障检测和切换电路
⏹+5.0V或+3.3V工作电源
⏹工业级温度范围
⏹DS12C887集成了电池与石英晶体
3.DS12c887的引脚结构及功能
图3DS12C887芯片引脚图
▪MOT:
模式选择,DS12C887有两种工作模式,即Motorola模式和Intel模式,当MOT接Vcc时,选择Motorola模式;当MOT接地或者悬空时,选择Intel模式。
在本设计中选择Intel模式。
▪SQW:
方波输出,通过对控制寄存器A的编程,能得到13种方波信号的输出。
▪AD0~AD7:
地址/数据复用总线。
▪AS:
地址选通输入,在进行读写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887中。
▪WR:
写数据控制输入。
▪RD:
读数据控制输入。
▪CS:
片选信号输入线,低电平有效。
▪IRQ:
中断请求输出线,低电平有效。
▪REST:
复位输入线,低电平有效。
▪NC:
空引脚。
3.数据输入输出(I/O)
数据读时序如图5所示:
图4数据读时序图
数据写时序如图6所示:
图5数据写时序图
4.DS12C887的初始化设置
DS12C887内部自带锂电池,能够连续不间断工作,一般无须每次都初始化,即使是系统复位时也如此。
初始化时,应首先禁止芯片内部的更新周期操作,所以先将DS12C887状态寄存器B中的SET位置1,然后初始化时标参数寄存器(00H~09H单元)和状态寄存器A,此后通过读状态寄存器C,清除状态寄存器C中的周期中断标志位PF、报警中断标志位AF、更新周期结束中断标志位UF。
通过读寄存器D中的URT位,判断DS12C887内部锂电池的状态,决定片内的RAM是否可用,读状态寄存器口后VRT位将自动置1,最后将状态寄存器B中的SET位置0,芯片开始计时工作。
2.3复位电路
MCS-51单片机的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
上电复位:
上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。
上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。
为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
上电自动复位电路图如图7所示:
图6上电自动复位图
上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
2.4显示电路
显示电路采用15个LED数码管。
用动态扫描法实现LED显示。
数码管显示器成本低,配置灵活,与单片机接口简单,在单片机应用系统中广泛应用。
数码管是由8个发光二极管构成的显示器件。
在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。
本文用到的6个数码管均是共阳极的。
当发光二极管导通时,它就会发光。
每个二极管就是一个笔划,若干个二极管发光时,就构成了一个显示字符。
将单片机的P0口与数码管的段选端相连,低电平的对应的发光二极管亮,这样,由P0口输出不同的电平,就可以控制数码管显示不同的字符。
本文的15个数码管均采用动态显示方式,显示当前的时间。
输出时分别由段选控制和位选控制。
位选由P2口通过译码器控制,当其为低电平时,对应的数码管点亮。
3系统软件的设计
3.1系统工作流程
本设计采用DS12C887时钟芯片来进行时钟显示,DS12C887在任何数据传送时必须先初始化,根据设计要求读入芯片。
同时,根据设计要求设置时钟。
因此我们通过键盘扫描设置三个键(设置键、加键、减键)。
根据各个键的作用可以对时钟芯片里的DS12C887读出的数据进行设置,实现对时间进行调整,再在LED数码管上显示。
主程序流程图如图9所示:
图7主程序流程图
3.2键盘扫描程序
键盘扫描程序流程图如图11所示:
图8键盘扫描程序流程图
4设计仪器
我们采用单片机学习板2010A,主要仪器如表格3所示:
表1主要仪器清单
仪器名称
数量
STC89C52
1块
DS12c887
1块
74LS154
1块
轻触按键
4个
数码管
15位
12M晶振
1个
9015pnp三极管
15个
470欧姆电阻
8个
1K电阻
15个
5总结与思考及致谢
在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识,完成了对万年历的设计,达到了预期的目的。
在最初的设计中相互学习、相互讨论、研究,完成了最初的设想。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,终于能够完成它。
在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。
也练就了我们的耐心,做什么事都在有耐心。
此次设计中学到了很多很多东西,这是最重要的。
总之,此次设计让我们真正学有所用,也巩固和加深的自己的理论知识,本产品的所有功能实现用到了单片机的所有功能模块,让我们对单片机系统的应用更加熟练与灵活。
此次设计能顺利圆满的完成,除了依靠我们三人组的坚持不懈努力外,还得感谢那些一直在背后辛勤指导我们的老师,由于所学知识有限,有很多问题都不能正确的解答,多亏有老师们耐心的指导和帮助,才使我的设计顺利的完成,在此对各位老师表示忠心的感谢。
感谢你们为我们排除了思路上的障碍,感谢你们辛勤地指导,请允许我向你们致以崇高的敬意,感谢你们,老师!
参考文献
[1]楼然苗,李光飞.单片机课程设计指导.(M)北京航空航天大学出版社,2007
[2]楼然苗,李光飞.51系列单片机设计实例.(M)北京航空航天大学出版社,2006
[3]郭天祥.新概念51单片机C语言教程.(M)电子工业出版社,2009
[4]张鑫.单片机原理及应用.(M)电子工业出版社,2005
[5]陈涛.单片机应用及C51程序设计.(M)机械工业出版社,2008
[6]张义和,陈敌北.例说8051.(M)人民邮电出版社,2006
[7]许惠民.单片微型计算机原理、接口及应用.(M)北京邮电大学出版社,2000
[8]朱定华,戴汝平.单片微机原理与应用.(M)北京:
清华大学出版社,2003
附录一:
硬件电路原理图
附录二:
程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitkey1=P3^4;//位声明
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitdsas=P3^3;
sbitdsrw=P3^2;
sbitdsds=P3^1;
ucharcodetable[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xfe};//共阳数码管显示0-9字符编码
ucharsaom[15];
uintsecond,minuts,hour,year,mouth,day,week,num,i,j,t0;
ucharaa=1,s,ms;
voiddelay(uintx)//延时函数
{
for(i=x;i>0;i--)
for(j=80;j>0;j--);
}
voidwrite_ds(ucharadd,uchardate)//写DS12C887
{
dsas=1;
dsds=1;
dsrw=1;
P1=add;
dsas=0;
dsrw=0;
P1=date;
dsrw=1;
dsas=1;
}
ucharread_ds(ucharadd)//读DS12C887
{
uchards_date;
dsas=1;
dsds=1;
dsrw=1;
P1=add;
dsas=0;
dsds=0;
P1=0xff;
ds_date=P1;
dsds=1;
dsas=1;
returnds_date;
}
voidset_time()
{
write_ds(4,15);
write_ds(2,22);
write_ds(7,18);
write_ds(8,5);
write_ds(9,10);
write_ds(6,6);
}
voidLEDdula()//送数码管段选
{
saom[0]=table[hour/10];
saom[1]=table[hour%10];
saom[2]=table[10];
saom[3]=table[minuts/10];
saom[4]=table[minuts%10];
saom[5]=table[10];
saom[6]=table[second/10];
saom[7]=table[second%10];
saom[8]=table[year/10];
saom[9]=table[year%10];
saom[10]=table[mouth/10];
saom[11]=table[mouth%10];
saom[12]=table[day/10];
saom[13]=table[day%10];
saom[14]=table[week];
}
voiddisplay()//用于数码管显示扫描
{
LEDdula();
for(num=0;num<15;num++)
{
P0=0xff;
P2=0xf0+num;
P0=saom[num];
delay
(1);
}
}
voiddisplay2()
{
P0=0xff;
P2=0xf3;
P0=table[s/10];
delay
(1);
P0=0xff;
P2=0xf4;
P0=table[s%10];
delay
(1);
P0=0xff;
P2=0xf5;
P0=0xbf;
delay
(1);
P0=0xff;
P2=0xf6;
P0=table[ms/10];
delay
(1);
P0=0xff;
P2=0xf7;
P0=table[ms%10];
delay
(1);
}
voidinit()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
voidkeyscan()//键盘扫描用于调整时间
{//key1键调整时间时的‘位’选择功能
if(key1==0)//调整时间时只显示要调整的位
{//每按一下key1键,要调整的位就
delay(10);//循环显示出现,以便调整
if(key1==0)
{
aa++;
while(!
key1);
}
}
if(aa==2)
{
P0=0xff;
P2=0xf0;
P0=table[hour/10];
delay
(1);
P0=0xff;
P2=0xf1;
P0=table[hour%10];
delay
(1);
}
if(aa==3)
{
P0=0xff;
P2=0xf3;
P0=table[minuts/10];
delay
(1);
P0=0xff;
P2=0xf4;
P0=table[minuts%10];
delay
(1);
}
if(aa==4)
{
P0=0xff;
P2=0xf6;
P0=table[second/10];
delay
(1);
P0=0xff;
P2=0xf7;
P0=table[second%10];
delay
(1);
}
if(aa==5)
{
P0=0xff;
P2=0xf8;
P0=table[year/10];
delay
(1);
P0=0xff;
P2=0xf9;
P0=table[year%10];
delay
(1);
}
if(aa==6)
{
P0=0xff;
P2=0xfa;
P0=table[mouth/10];
delay
(1);
P0=0xff;
P2=0xfb;
P0=table[mouth%10];
delay
(1);
}
if(aa==7)
{
P0=0xff;
P2=0xfc;
P0=table[day/10];
delay
(1);
P0=0xff;
P2=0xfd;
P0=table[day%10];
delay
(1);
}
if(aa==8)
{
P0=0xff;
P2=0xfe;
P0=table[week];
delay
(1);
}
if(aa==9)
{
P0=0xff;
P2=0xf3;
P0=table[s/10];
delay
(1);
P0=0xff;
P2=0xf4;
P0=table[s%10];
delay
(1);
P0=0xff;
P2=0xf5;
P0=0xbf;
delay
(1);
P0=0xff;
P2=0xf6;
P0=table[ms/10];
delay
(1);
P0=0xff;
P2=0xf7;
P0=table[ms%10];
delay
(1);
}
if(aa==10)
aa=1;
if(key2==0)//key2键执行‘+’功能
{
delay(5);
if(key2==0)
{
switch(aa)
{
case2:
hour++;if(hour==24)hour=0;
write_ds(4,hour);break;
case3:
minuts++;if(minuts==60)minuts=0;
write_ds(2,minuts);break;
case4:
second++;if(second==60)second=0;
write_ds(0,second);break;
case5:
year++;write_ds(9,year);break;
case6:
mouth++;if(mouth==13)mouth=1;
write_ds(8,mouth);break;
case7:
day++;if(day==32)day=1;
write_ds(6,day);break;
case8:
week++;if(week==8)week=1;
write_ds(6,week);break;
case9:
s=0;ms=0;TR0=1;break;
}
while(!
key2);
}
}
if(key3==0)//key3执行“-”功能
{
delay(5);
if(key3==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 电子 万年历