基于AT89S51单片机的扩展时钟系统设计 精品.docx
- 文档编号:29211349
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:21
- 大小:523.08KB
基于AT89S51单片机的扩展时钟系统设计 精品.docx
《基于AT89S51单片机的扩展时钟系统设计 精品.docx》由会员分享,可在线阅读,更多相关《基于AT89S51单片机的扩展时钟系统设计 精品.docx(21页珍藏版)》请在冰豆网上搜索。
基于AT89S51单片机的扩展时钟系统设计精品
基于AT89S51单片机的扩展时钟系统设计
摘要:
随着人类科技文明的发展,人们对于时钟的要求在不断地提高,时钟已不仅仅被看成一种来显示时间的工具。
在很多实际应用中它还需要能够实现更多其他的功能。
时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。
本文正式基于这种方向,以AT89S51单片机为核心,结合新型时钟芯片DS12887,并利用液晶LCD1602显示数字时钟。
关键字:
AT89S51单片机;时钟芯片DS12887;液晶LCD1602
Abstract:
Withthedevelopmentofthetechnologicalsociety,requirementsforclockisconstantlyimproving,theclockhasnotonlybeenseenasatimetoshowtools.Italsoneedstobeabletoachievemoreinmanypracticalapplications.Digitalclock,multi-functionalmodernclockproductionhasbecomethedominantdesigndirection.Inthispaper,formallybasedonthisdirection,AT89S51microcontrollerasthecore,CombinedwiththenewclockchipDS12887,AndLCD1602LCDdisplaydigitalclock。
Keywords:
AT89S51microcontroller;TimeclockDS12887;LCD1602
1引言
数字时钟已经成为人们日常生活中必不可少的必需品,广泛应用于个人家庭以及办公室公共场所,给人们的生活、学习、工作、娱乐带来了极大地方便。
由于数字集成电路技术的发展和采用了新进的石英技术,是数字钟具有走时准确、性能稳定、携带方便等优点。
它还用于计时、自动报时等各个领域。
尽管目前市场上已有现成的数字集成电路芯片出售,价格便宜,使用也方便,但鉴于单片机的定时器功能也可以完成数字中电路的设计,因此进行数字钟的设计是必要的。
在这里我将以学过的比较零散的电路知识有机的、系统的结合起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。
文中详细论述了以89S51单片机位核心,应用新型时钟芯片DS12887的数字时钟设计原理以及使用的各种芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及程序代码。
2总体设计
本次设计的题目是单片机控制时钟芯片DS12887的时分秒定时系统设计,可以正常的显示年、月、日、时、分、秒。
程序第一次运行后,初始化时间显示为00:
00:
00,即6位数码管显示为00.00.00。
通过键盘[MON]设定小时为00,通过键盘[LAST]设定分钟为34,通过键盘[NEXT]设定秒为52,为00:
34:
52.两分钟后即在00..52时关掉电源,等待2分钟后再打开电源,这时时间应为00.36.52,
本设计总体大致分为两部分:
硬件部分、软件部分。
硬件部分包括:
89S51单片机、DS12887时钟芯片、1602LCD液晶显示器。
主要由89S51单片机、实时时钟芯片电路、液晶显示输出电路、键盘输入电路组成等几大部分组成。
软件部分包括了主程序模块,DS12C887模块,LCD1602模块,按键控制模块。
本设计是以89S51单片机为核心,结合新型实时时钟芯片DS12887,并利用液晶LCD1602显示的数字时钟。
在液晶上显示、时、分、秒等信息。
因为DS12887本身的特点,本设计还具有掉电后继续计时的功能。
另外,它的计时周期为24小时,采用24小时制的计时方式,显示满刻度为23时59分59秒,这也是DS12887的计时范围。
本设计的数字时钟,可以通过按键来设置时间,也可以通过按键来设置闹钟的时间,不过与设置正常时间相比,仅限于设置时、分、秒。
每按一次按键,蜂鸣器就会发出很短的滴声,当达到设定的时间时,数字时钟会也发出声音,来提醒使用者时间到了。
以上是本设计的大致功能和简介。
总设计如图1所示
图1接线图
3系统硬件组成
3.1芯片的选择
经多种单片机性能的分析及现有实验设备的限制,在本设计中单片机芯片采用了AT89S51单片机芯片。
AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机片内含4Kbytes的可系统编程的Flash只读程序储存器。
器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准80C51指令系统及引脚。
它集Flash程序存储器既可在线编程也可用传统方法进行编程既通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。
3.2AT89S51单片机的硬件组成
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89S51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
如图2所示
(1)8位微处理器(CPU);
(2)数据存储器(128BRAM);
(3)程序存储器(4KBFlashROM);
(4)4个8位可编程并行I/O口;
(5)1个全双工的异步串行口;
(6)2个可编程的16位定时器/计数器;
(7)1个看门狗定时器;
(8)中断系统具有5个中断源、5个中断向量;
(9)特殊功能寄存器(SFR)26个。
图2AT89S51引脚图
AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89S51是一种带K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,AT89S1是它的一种精简版本。
AT89S51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.3电源及时钟引脚
3.3.1电源引脚
(1)VCC(40脚):
+5V电源。
(2)VSS(20脚):
数字地。
3.3.2时钟引脚
(1)XTAL1(19脚):
片内振荡器反相放大器和时钟发生器电路输入端。
用片内振荡器时,该脚接外部石英晶体和微调电容。
外接时钟源时,该脚接外部时钟振荡器的信号。
(2)XTAL2(18脚):
片内振荡器反相放大器的输出端。
当使用片内振荡器,该脚连接外部石英晶体和微调电容。
当使用外部时钟源时,本脚悬空。
3.3.3并行I/O口
(1)P0口:
8位,漏极开路的双向I/O口
当外扩存储器及I/O接口芯片时,P0口作为低8位地址总线及数据总线的分时复用端口。
P0口也可用作通用的I/O口,需加上拉电阻,这时为准双向口。
作为通用I/O输入,应先向端口写入1。
可驱动8个LS型TTL负载。
(2)P1口:
8位,准双向I/O口,具有内部上拉电阻。
准双向I/O口,作为通用I/O输入时,应先向端口锁存器写1。
P1口可驱动4个LS型TTL负载。
P1.5/MOSI、P1.6/MISO和P1.7/SCK
可用于对片内Flash存储器串行编程和校验,它们分别是串行数据输入、输出和移位脉冲引脚。
(3)P2口:
8位,准双向I/O口,具有内部上拉电阻。
当AT89S51扩展外部存储器及I/O口时,P2口作为高8位地址总线用,输出高8位地址。
P2口也可作为普通的I/O口使用。
当作为通用I/O输入时,应先向端口输出锁存器写1。
P2口可驱动4个LS型TTL负载。
(4)P3口:
8位,准双向I/O口,具有内部上拉电阻。
可作为通用的I/O口使用。
作为通用I/O输入,应先向端口输出锁存器写入1。
可驱动4个LS型TTL负载。
P3口还可提供第二功能。
第二功能定义见图3-3,应熟记。
综上所述,P0口可作为总线口,为双向口。
作为通用的I/O口使用时,为准双向口,这时需加上拉电阻。
P1口、P2口、P3口均为准双向口。
P3口如图3,
图3P3口引脚图
3.4时钟芯片DS12887
DS12887是美国DALLAS半导体公司最新推出的8位串行接口并自带RAM的实时日历时钟芯片,内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114bit作掉电保护用的低功耗RAM。
CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制或BCD码初始化芯片的10个时标寄存器,其4个状态寄存器用来控制和指出DS12887的当前工作状态,114bit非易失性静态RAM可在掉电时保存一些重要数据。
DS12887功能强大,应用广泛。
DS12887引脚分布图和存储器分布图:
图4引脚分布图和存储器分布
通过对寄存器A、B、C、D的编程可以控制DS12887的工作方式:
寄存器A
当UIP位为0时指示更新在244μS内不会发生;当DV2DV1DV0其为010时,打开晶振,并允许时钟开始计时;RS3RS2RS1RS0用于选择周期中断或输出方波的频率,当其分别为0111、1000、1001、1011、1100、1101、当其分别为0111、1000、1001、1011、1100、1101、1110、1111时,对应频率为512Hz、256Hz、128Hz、64Hz、32Hz、16Hz、8Hz、4Hz、2Hz。
SET位为0时,每秒计数一次,置1后,更新转换被禁止;当PIE、AIE、UIE位为1时,分别允许周期中断、报警中断和时钟数据更新结束中断,为0时,禁止中断产生;SQWE位为1时,按以寄存器A中由RS3RS2RS1RS0选定的频率从SQW引脚输出方波,为0时,SQW为低电平;当DM为1时选用二进制数据格式,反之为BCD数据格式;12/24位为1时,指定24小时时间格式,否则为12小时时间格式;DSE为1时允许夏时制发生。
寄存器C的内容是周期中断标志位PF、报警中断标志位AF、更新结束中断标志位UF和中断请求标志位IRQF,它们之间的关系为IRQF=PF*PIE+AF*AIE+UF*UIE,只要IRQF为1,/IRQ引脚输出就保持低电平,读寄存器C将清除所有标志器C的内容是周期中断标志位PF、报警中断标志位AF、更新结束中断标志位UF和中断请求标志位IRQF,它们之间的关系为IRQF=PF*PIE+AF*AIE+UF*UIE,只要IRQF为1,/IRQ引脚输出就保持低电平,读寄存器C将清除所有标志。
寄存器D中仅D7有定义,读时应若寄存器D中仅D7有定义,读时应总为1,若为0则说明内部锂电池已耗尽。
为防止锂电池在芯片装入系统前被耗尽,DS12887在出厂时先关掉了其内部的晶振,编程时必须首先给寄存器A的DV2DV1DV0位写入010以打开晶振,然后,读寄存器D以检查内部锂电池是否有效;接着根据需要对寄存器A、B进行设置。
当需要修改日历时钟时,必须先使SET位置1,当需要读日历时钟数据时,必须先查询寄存器A中的UIP位,只有当其为0时,才能进行读取数据。
CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD码初始化芯片的10个时标寄存器。
其114bit非易失性静态RAM可供用户使用,对于没有RAM的单片机应用系统,可在主机掉电时来保存一些重要的数据。
DS12887的4个状态寄存器用来控制和指出DS12887模块的当前工作状态,除数据更新周期外,程序可随时读写这4个寄存器。
3.5液晶LCD1602
1602液晶显示模块,是点阵字符型液晶显示模块,可以用来显示字母,符号,数字以及简单的汉字和图案等信息。
“1602”的含义是这类液晶显示模块每行能够显示16个字符,一共可以显示两行。
该液晶显示模块,分为带背光和不带背光两类,两者在应用过程中功能基本类似,只是带背光的模块更厚一些,通常的背光颜色以黄绿色和蓝色为主。
4软件系统设计
4.1程序流程图
在这个设计中,89S51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理;DS12887主要的功能是控制时、分、秒的显示LCD1602主要的功能是将所要显示的显示出来。
主程序主要实现了从DS12887各时间单元中读出数据并送到LCD1602中显示的功能,同时检测有没有按键按下,如果有键被按下,则执行按键处理子程序。
首先进行DS12887时钟芯片和LCD1602的初始化函数,然后进行按键扫描,不断地检测按键是否按下,读取DS12887时钟芯片的数据,并且送到液晶显示器显示;当数据发生变化时候,重新进行扫描写入。
流程图如图5所示,
图5程序流程图
5调试结果(如图6-1和6-2)
图6-1
程序第一次运行后,初始化时间显示为00:
00:
00,即6位数码管显示为00.00.00。
通过键盘[MON]设定小时为00,通过键盘[LAST]设定分钟为34,通过键盘[NEXT]设定秒为52,为00:
36:
52两分钟后即在00..52时关掉电源,等待2分钟后再打开电源,这时时间应为00.36.52,
图6-2
6小结
通过这次课程设计,我对单片机的应用有了更深的认识。
同时,也初步掌握了通过芯片资料所给出的各种信息,应用该芯片的能力。
我在设计过程中,学会了总线的应用以及标号规则。
这是一个很大收获,可以在以后的应用中简化电路,在以后的实际工作和学习中带来很大的便利。
通过这次设计,我对LCD1602有了进一步的了解和认识,对它的应用更加熟练。
虽然在这次设计中没有用到该功能。
在这次设计中我要感谢我的指导老师牟琳,是在牟琳老师的帮助下我才能顺利的完成该设计。
对此我表示深深的诚挚的谢意和崇高的敬意。
参考文献:
[1]何立民.单片机应用技术选编[M].北京:
北京航空航天大学出版社,1993.
[2]张毅刚.单片机原理及应用[M].北京:
高等教育出版社,2004.
[3]郭天祥.新概念51单片机C语言教程[M]:
入门、提高、开发、拓展全攻略.电子工业出版社,2009.
[4]莫树.培刘夏.基于DS12887的时钟设计[M].科技创新导报,2011.
[5]孙佳玲.基于单片机的多功能数字时钟系统设计[M].吉林工程技术师范学院学报,2009.
[6]李大有.单片机应用与设计[M].电子工业大学出版社,1998年.
[7]钟睿.MCS-51单片机原理及应用开发技术[M].北京:
中国铁道出版社,2006.
[8]王幸之.AT89系列单片机原理与接口技术[M].北京:
北京航空航天大学出版社,2004.
附件
程序代码
;按“NEXT”键,调整秒位;按“LAST”键,调整分位;按"MON"键,调整时位;
OUTBITequ0e101h;位控制口
CLK164equ0e102h;段控制口(接164时钟位)
DAT164equ0e102h;段控制口(接164数据位)
INequ0e103h;键盘读入口
LEDBufequ60h;显示缓冲
ljmpStart
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
db00H
Delay:
;延时子程序
movr7,#00
DelayLoop:
djnzr7,DelayLoop
djnzr6,Delay
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6;共6个八段管
movr2,#00000001b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movB,#8;送164
DLP:
rlca
movr3,a
movacc.0,c
movdptr,#DAT164
anla,#0fdh
movx@dptr,a
movdptr,#CLK164
orla,#02h
movx@dptr,a
anla,#0fdh
movx@dptr,a
mova,r3
djnzB,DLP
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#1
callDelay
mova,r2;显示下一位
rla
movr2,a
incr0
djnzr1,Loop
ret
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;输出线置为0
movdptr,#IN
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
ret
KeyTable:
;数字键码定义
db00h,01h,04h,07h
db0fh,02h,05h,08h
db0eh,03h,06h,09h
db0dh,0ch,0bh,0ah
db10H,11H,12H,13H,14H
db15H,16H,10H,10H,10H
GetKey:
movdptr,#OUTBIT
movP2,dph
movr0,#Low(IN)
movr1,#00100000b
movr2,#6
KLoop:
mova,r1;找出键所在列
cpla
movx@dptr,a
cpla
rra
movr1,a;下一列
movxa,@r0
cpla
anla,#0fh
jnzGoon1;该列有键入
djnzr2,KLoop
movr2,#0ffh;没有键按下,返回0ffh
sjmpExit
Goon1:
movr1,a;键值=列X4+行
mova,r2
deca
rla
rla
movr2,a;r2=(r2-1)*4
mova,r1;r1中为读入的行值
movr1,#4
LoopC:
rrca;移位找出所在行
jcExit
incr2;r2=r2+行值
djnzr1,LoopC
Exit:
mova,r2;取出键码
movdptr,#KeyTable
movca,@a+dptr
movr2,a
WaitRelease:
movdptr,#OUTBIT;等键释放
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
Start:
movr6,#02h
calldelay
mov20h,#00h
mov21h,#00h
mov22h,#00h
movsp,#40h
movdptr,#0e100h
mova,#03h
movx@dptr,a
Start1:
movdptr,#0fe0ah
movxa,@dptr
anla,#70h
cjnea,#20h,start2;判断晶振打开否?
sjmpstart3
start2:
movdptr,#0fe0bh;设置SET=0,芯片正常工作.24/12=1,选24小时制.
mova,#82h
movx@dptr,a
movr0,#06h
movdptr,#0fe00h;;时分秒清零
mova,#00h
retun0:
movx@dptr,a
incdptr
djnzr0,retun0
movdptr,#0fe0ah
mova,#27h
movx@dptr,a;打开晶振,SQW输出512HZ方波。
incdptr
mova,#5ah
movx@dptr,a
start3:
movdptr,#0fe0ah
movxa,@dptr
jnbacc.7,loop12
movr5,#4dh
djnzr5,$
loop12:
movdptr,#0fe0bh
mova,#5ah
movx@dptr,a
loop13:
movdptr,#0fe00h;读秒,分,时
movr1,#60h
movr0,#03h
loop11:
movxa,@dptr
lcallPtreg;读取的值,进行拆字后送显示缓冲器60H-65H
incdptr
incdptr
djnzr0,loop11
movdptr,#0fe0bh
callDisplayLED;调用显示子程序
callTestKey;有键入?
jzloop12;无键入,继续显示
callGetKey;有键入,读入键码
cjnea,#14h,keep0
sjmpkeep1;是NEXT键,调整秒位
keep0:
cjnea,#15h,keep2
sjmpkeep3;是LAST键,调整分位
keep2:
cjnea,#16h,start1
sjmpkeep5;是MON键,调整时位
keep1:
movdptr,#0fe0bh
mova,#0dah
movx@dptr,a
mova,20h
lcallHbcd
cjnea,#60h,loop20;秒位不能超过60秒
mov20h,#00h
sjmploop13
loop20:
movdptr,#0fe00h
movx@dptr,a
inc20h
sjmploop13
keep3:
movdptr,#0fe0bh
mova,#0dah
movx@dptr,a
mova,21h
lcallHbcd
cjnea,#60h,loop21;分位不能超过60分
mov21h,#00h
sjmploo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于AT89S51单片机的扩展时钟系统设计 精品 基于 AT89S51 单片机 扩展 时钟 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)