单片机课程设计 - 基于AT89C51的数字钟的设计

更新时间:2023-09-21 12:27:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程:姓名:班级:课程设计报告

单片机原理与接口技术 10通信1班

河北联合大学信息工程学院

一、设计名称

基于AT89C51的数字钟的设计 二、设计目的及要求

1,了解AT89C51芯片的功能,性能,及使用方法。 2,了解时钟日历芯片DS12887的性能及使用方法。

3,利用所学汇编语言编(中断、计数等)写代码实现钟表计时定时等功能。 三、设计原理说明

利用AT89C51芯片、时钟日历芯片DS12887,三极管等器件连接硬件电路,在用kell软件编写时钟程序,调试程序,最后烧入到硬件设备中进行结果检验及更改。

3.1、基于AT89C51数字钟设计的原理

数字钟的基本功能是显示时间,可以通过计数器的级联实现。以4位数码管的数字钟为例,设定前两位为小时,后两位为分钟,数码管的小数点闪烁可以表示秒。首先产生一个1Hz的方波信号,在它的触发下驱动小数点闪烁。在这个1Hz的基础上,可以产生1/60Hz的信号(对1Hz信号计数,每计数30次就将输出反相,得到1/60Hz信号),它就是分钟信号需要的时钟。在这个时钟的触发下分钟位数码管依次加1,直到60时变为0,再重新开始计数。清零的时候要产生一个进位,加到小时上面。其他时间小时位保持不变。 3.2、数字钟主要元件介绍 3.2.1、AT89C51单片机

AT89C51是一种低功耗,高性能的片内含有4KB快闪可编程/擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的8位COMS微控制器,使用高密度,非易失存储技术制造,并且与80C51引脚和指令系统完全兼容。芯片上的FPEROM允许在线编程或采用通用的非易失存储编程器对存储器重复编程。单片机的主要特性如下:

1.与MCS-51 兼容

2.4K字节可编程闪烁存储器 3.全静态工作:0Hz-24MHz 4.三级程序存储器锁定 5.4KB的片内程序存储器ROM

6.128B内部数据存储器RAM和128B特殊功能寄存器SFR 7.4个8位可编程并行I/O接口

8.两个16位定时/计数器 9.5个中断源的控制控制系统 10.一个全双工串行接口 11.低功耗的闲置和掉电模式 12.片内振荡器和时钟电路。

各引脚功能说明如下:

Vcc(40脚):接+5V电源正端。

Vss(20脚):接+5V电源负端。

XTAL1(19脚):晶体振荡器接入的一个引脚(采用外部振荡器时,此引脚接地)

XTAL2(18脚):晶体振荡器接入的另一个引脚(采用外部振荡器时,此引脚作为外部振荡信号的输入端)

P0口(39~32脚):P0.0~P0.7统称为P0口。一般I/O口引脚或数据/低位地址总线复用引脚;

P1口(1~8脚):P1.0~P1.7统称为P1口,可作为准双向I/O口使用。一般I/O口引脚;

P2口(21~28脚):P2.0~P2.7统称为P2口,一般I/O口引脚或高位地址总线引脚;

P3口(10~17脚):P3.0~P3.7统称为P3口。除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可以独立定义为第一功能的输入输出或第二功能。

ALE/PROG(30脚):地址锁存允许信号输入或输出引脚。

对于片内含有EPROM的机型,在编程期间,该引脚用作编程脉冲PROG的输入端。

PSEN(29脚):外部程序存储器选通信号输出端,低电平有效。 RST/VPD引脚(9脚):复位信号输入引脚/备用电源输入引脚。 常见的复位电路有:上电复位电路和上电及按钮复位电路,如图3.3-5所示。 EA/Vpp(31脚):内外存储器选择引脚/片内EOROM编程电压输入。 3.2.2、数码管

LED数码管以发光二极管作为发光单元,颜色有单红,黄,蓝,绿,白,七彩效果,它属于一种照明装饰、亮化灯具。分类如下:

1、从控制方式上分:分为内控方式(内部有单片机,通电自动变色)和外控方式(需要外接控制器才能变色)。

2、从变化方式上分:分为固定色彩的和七彩、全彩的;固定色彩的是用来勾轮廓的,全彩的可以勾轮廓,也可以组成管屏显示文字、视频等;

3、从尺寸上分:有D50的、D30的,这是直径;长度基本上1米的(可以定制)。

4、从内部可控性上分:有1米6段的,有1米8段的和1米12段、1米16段、1米32段的。也就是1米的管子内有几段可以独立受控; 1米段数越多,做视频的效果越好。如果密度低,或者做些追逐效果,做1米6段也就可以了。

5、从led数量上,有1米96颗灯的,有1米144颗灯的;灯越多效果越好。一般做全彩的都是用1米144颗灯的。

6、从供电上分,分为高压供电(直接220V供电)和低压供电(12v供电,220v电源需要加开关电源转换);一般选择低压供电的,比较可靠稳定,高压供电的容易烧毁。

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

3.2.3、74LS164

74LS164是我们常用的led显示驱动芯片,如下图所示。

三极管:因为数据在传送过程中,对164输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,在数据传送过程中,关闭三极管使数码管没电不显示,数据传送完后立刻使三极管导通,这样就实现锁存功能。

3.2.4、 时钟日历芯片 DS12887

1.芯片内部含有锂电池,断电情况下运行10年以上不丢失数据。 2.可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿。

3.用二进制码或BCD码代表日历和闹钟信息。

4.有12和24小时两种制式,12小时制时有AM和PM提示。

5.内建128字节RAM。14个字节为时钟和控制寄存器,114个字节通用寄存器。

6、可编程方波输出。

7、有可编程的中断信号(IRQ)输出。

KEYUP: MOV R6,2CH ;键值处理,判断键值暂存单元是否为0

CJNE R6, #0,HH ;不为0则转至HH处理 LJMP MM ;为0则返回

HH: MOV 2CH,#0 ;不为0,存有键值,则进行键值处理,处理后清0

MOV A,R6 ORL A,#80H CPL A

JZ MM ;判断是否有键按下,没有则返回 MOV A,R6

JNB ACC.0, LL0 ;有键按下,是否是P1.0位,如P1.0位为0,则其按下,转去LL0调整被校位数

JNB ACC.1,XDYJIA1 ;如P1.0没按下,判断P1.1是否按下,是,则转去XDYJIA1使被校位加1

LJMP MM ;P1.0和P1.1没按下则返回 LL0: MOV A,WEISHU ;被校位数调整 INC A

MOV WEISHU,A

CLR C ;判断被校位数是否小于等于4 SUBB A,#5

JC MM ;是,则返回

CLR 23H.0 ;被校位数达到5,则退出校时 CLR ET0 ;关闭T0中断 CLR TR0 ;关闭T0

SETB EX1 ;开INT1,恢复1秒1次的中断 LCALL HF1 ;调用HF1,将校后的时间存回DS12C887

LJMP END1 ;中断返回

MM: MOV A,20H ;以下判断T0中断是否到5次 INC A MOV 20H,A

CJNE A,#5,END1 ;不等于5,则返回 MOV A,#0 ;等于5,中断次数清0, mov 20h,a

LCALL DISP1 ;调被校位闪耀显示子程序 END1: CLR RS0 ;恢复现场 POP PSW POP ACC SETB EA

RETI ;中断返回

XDYJIA1: SETB RS1 ;被校位加1处理 SETB RS0 ;选择3寄存器区 MOV A,WEISHU ;被校位数送A ADD A,#2FH ;得到被校位地址 MOV R0,A ;被校位地址存入R0 MOV A,WEISHU ;被校位数送A

ADD A,#3FH ;得到被校位的最大数存放地址 MOV R1,A ;被校位的最大允许数存放地址存入R1

MOV A,@R0 ;取出被校位数据送A CLR C ;判断其是否达到其最大允许数 SUBB A,@R1

JNC BACK ;达到,则转至BACK,回0 MOV A,@R0 ;没达到,则加1 INC A MOV @R0,A LJMP PP1

BACK: MOV @R0,#0 ;被校位回0

PP1: MOV A,HOUR1 ;小时位不能大于等于24,因此如下判断:判断小时的高位是否为2

CJNE A,#2,PP ;不为2,则转至PP送显示后中断返回 CLR C ;为2,则判断小时低位是否小于等于3 MOV A,HOUR2 SUBB A,#4

JC PP ;小于等于3则转至PP送显示后中断返回 MOV HOUR1,#0 ;否则小时的高低位都回0 MOV HOUR2,#0

PP: CLR RS1 ;选择0寄存器区 CLR RS0

LCALL DISP ;显示加1后结果 LJMP END1 ;中断返回

DISP1: CPL 22H.0 ;被校位闪耀显示子程序:闪耀标志取反 JB 22H.0,MM2 ;闪耀标志为1,转至MM2送亮,闪耀标志为0,送黑

MOV A,WEISHU ;被校位数送A ADD A,#2FH ;得到被校位地址 MOV R0,A ;被校位地址存入R0 MOV 25H,@R0 ;被校位数据暂存入25H MOV @R0,#0AH ;使被校位数据变为0AH,通过查TAB表,

LCALL DISP ;送显示,调用显示子程序时,通过查TAB表得到0AH的字形码为FFH,使被校位黑

MOV @R0,25H ;被校位显示黑后,从25H取回原来数据

SJMP OVER1 ;返回

MM2: LCALL DISP ;闪耀标志为1,显示亮 OVER1: RET ;返回

HF1: PUSH ACC ;将CPU中30H到33H的数据送入DS12887子程序

PUSH PSW PUSH DPL

MOV DPTR,#0004H MOV R1,#30H LCALL SRSZ1 DEC DPL DEC DPL INC R1 LCALL SRSZ1

POP DPL POP PSW POP ACC

RET SRSZ1: PUSH ACC DS12C887子程序

PUSH PSW MOV A,@R1 SWAP A INC R1 ADD A,@R1 MOVX @DPTR,A POP PSW POP ACC

;DS12C887中小时存放单元 ;CPU中小时高位存放单元 ;恢复现场 ;返回

;从CPU中输出一个字节到 RET ;返回

DEL10mS: MOV R5,#0AH ;10mS延时子程序 LL: MOV R6,#0ffH LL1: NOP NOP

DJNZ R6,LL1 DJNZ R5,LL RET

END ;程序结束 六、设计收获

通过这次实验,使我对AT89C51芯片、时钟日历芯片DS12887的功能有了深刻的了解。在实践过程中,充分锻炼了我的自学能力,分析问题能力以及解决问题的能力,更使我对专业基础知识有了更深的理解。总之,此次课程设计使我受益匪浅。

本文来源:https://www.bwwdw.com/article/6q3h.html

Top