基于51单片机制作电子时钟实训报告.docx
- 文档编号:10021783
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:24
- 大小:336.97KB
基于51单片机制作电子时钟实训报告.docx
《基于51单片机制作电子时钟实训报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机制作电子时钟实训报告.docx(24页珍藏版)》请在冰豆网上搜索。
基于51单片机制作电子时钟实训报告
基于51单片机制作电子时钟实训报告
任务要求.........................................
设计方案.........................................
硬件设计及元器件技术说明电子元器件技术说明……….
程序编程.........................................
流程图...........................................
测试调试...........................................
显示器或数码管代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好[3]。
任务说明
随着人类科技文明的发展,人们对于时钟的要求在不断地提高。
时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。
高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。
在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向[9]。
本文正是基于这种设计方向,以单片机为控制核心,设计制作一个符合指标要求的多功能数字时钟。
本设计基于单片机技术原理,以单片机芯片AT89S51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个电子时钟系统。
该时钟系统主要由时钟电路模块、复位电路模块、LED数码管显示模块、以及键盘控制模块组成。
系统具有简单清晰的操作界面,能在4V~7V直流电源下正常工作。
能够准确显示时间(显示格式为时时:
00.00.00,刚上电时为12.00.00,当显示到23.59.59,即有重新从00.00.00开始显示),可随时进行时间调整。
设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性
控制系统的硬件设计
芯片的选择
经过多种单片机性能的分析及现有实验设备的限制,在本设计中单片机芯片采用了AT89S51单片机芯片。
AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程既通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域[5]。
AT89S51元件简介
本次使用的元件是单片机系统的一个常用元件:
AT89S51。
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51引脚功能说明(附引脚图)
Vcc:
电源电压
GND:
接地
P0口:
P0口是一组8位漏极开路型双向I/O口,即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
[5]
图2-1AT89S51引脚图
P1口:
P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
Flash编程和程序校验期间,P1接收低8地址[5]。
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(例如执行MOVX@Ri指令)时,P2口线上的内容(即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程和程序校验期间,P2亦接收高位地址和其他控制信号[5]。
P3口:
P3口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能[5]。
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
表2-1P3口第二功能
端口引脚
第二功能
信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
/INT0
外部中断0请求
P3.3
/INT1
外部中断1请求
P3.4
T0
定时/计数器0的外部输入
P3.5
T1
定时/计数器1的外部输入
P3.6
/WR
外部RAM写选通
P3.7
/RD
外部RAM读选通
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DIRT0位缺省为RESET输出高电平打开状态[5]。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此可对外输出时钟或用以定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于出入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,单片机执行外部程序时,应设置ALE无效[5]。
/PSEN:
程序储存允许(/PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)使,每个机器周期两次/PSEN有效,即输出两个脉冲。
当访问外部数据存储器。
没有两次有效的/PSEN信号[5]。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程电压VPP[5]。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
LED数码管显示电路
数码管是一种把多个LED显示段集成在一起的显示设备。
有两种类型,一种是共阳极,一种是共阴极。
共阳极就是把多个LED显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED显示段的阴极连接在一起,即为公共商。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。
数码管的显示方法可分为静态显示和动态显示,在本设计中采用的是动态显示,其原理:
各个数码管的相同端连接在一起,共同占用8位段引管线:
每位数码管的阳极连接在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来[6]。
本设计由两个LED四位一体阴极数码管、8个9012(PNP)三极管、8个510欧上拉电阻等组成,由于LED数码管的位电流较大,故采用三极管来驱动。
8个电阻一端接到单片机的P1口,另一端分别接到三极管的基极,发射极接地,集电极与所述数码管芯片的位控制端相连。
此驱动电路采用主芯片的通用IO口并配合三极管来实现四位数码管的动态扫描和显示驱动,具有电路结构简单、占用电路板空间小、驱动能力强、成本低等优点,其缺点是共阴极的数码管采用PNP三极管驱动,这样三极管的损耗比较大。
位码由P1口输出,段码由P3口输出,P1口线与LED之间5.1K的限流电阻和PNP三极管,显示的方式为动态显示方式。
表2-2字型与字段关系
显示字符
g
f
e
d
c
b
a
字型码
共阴极
共阳极
0
0
1
1
1
1
1
1
3FH
C0H
1
0
0
0
0
1
1
0
06H
F9H
2
1
0
1
1
0
1
1
5BH
A4H
3
1
0
0
1
1
1
1
4FH
B0H
4
1
1
0
0
1
1
0
66H
99H
5
1
1
0
1
1
0
1
6DH
92H
6
1
1
1
1
1
0
1
7DH
82H
7
0
0
0
0
1
1
1
07H
F8H
8
1
1
1
1
1
1
1
7FH
80H
9
1
1
0
1
1
1
1
6FH
90H
A
1
1
1
0
1
1
1
77H
88H
B
1
1
1
1
1
0
0
7CH
83H
C
0
1
1
1
0
0
1
39H
C6H
D
1
0
1
1
1
1
0
5EH
A1H
E
1
1
1
1
0
0
1
79H
86H
F
1
1
1
0
0
0
1
71H
8EH
数码管驱动的意义:
第一:
假如不驱动的话,单片机的高低电平仍然可以控制数码管的亮度,形在动态显示,但这时细心的你会发现这时的数码的亮度会比较暗,并且扫描频率很高,仍然有微小的闪动现象,因为单片机的输出的电流本身就很弱;
第二:
三极管的作用是:
1、起到开关的作用,即某一时刻打开或关闭数码管,形成动态显示;2、驱动数码管,静态显示可以不明显,动态显示的时候,效果就出来了。
硬件设计及元器件技术说明电子元器件技术说明
AT89S51单片机基板电子元件清单:
元件
型号或规格
数量
单片机
AT89S51
1
LED
Φ3
9
电阻
510Ω
1
10KΩ
5
排阻
A102J
1
单片机芯片插槽
1
瓷片电容
30pF
2
数据线插槽
1
电解电容
10μF
1
晶振
12MHz
1
单排座
20位
2
万用板
7cm*9cm
1
免驱动数据线
1
按钮
5
电源开关
1
LED数码管显示电路模块所需电子元件清单:
元件
型号或规格
数量
LED数码管
SR*30361(BS)
6
三极管
9012
6
单排针
15位
电阻
4.7kΩ
6
1000Ω
8
万用板
5cm*7cm
1
硬件电路图
实验板原理图
控制系统的软件设计
软件系统主要分为以下几个部分:
主程序、显示子程序及中断服务子程序。
以动态显示作为主程序,主要是初始化部分和不断调用动态显示子程序。
动态显示子程序,它被主程序不断调用,以保证稳定可靠的显示;按键查询采用中断方式;秒定时采用定时器T0中断方式进行,定时时间为50MS,每50MS溢出一次,中断两次达100MS。
然后通过显示子程序将单元里面的十六进制数拆开为BCD码,送到显示缓冲区。
流程图
程序编写
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断程序入口
LJMPINTT0;跳至INTTO执行
ORG0013H;外中断1中断程序入口
RETI;外中断1中断返回
ORG001BH;定时器T1中断程序入口
LJMPINTT1;跳至INTT1执行
ORG0023H;串行中断程序入口地址
RETI;串行中断程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;主程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
START:
MOVR0,#70H;清70H-7AH共11个内存单元
MOVR7,#0BH
;clrP3.3
CLEARDISP:
MOV@R0,#00H;
INCR0;
DJNZR7,CLEARDISP;
MOV20H,#00H;清20H(标志用)
MOV7AH,#0AH;放入"熄灭符"数据
MOVTMOD,#11H;设T0、T1为16位定时器
MOVTL0,#0B0H;50MS定时初值(T0计时用)
MOVTH0,#3CH;50MS定时初值
MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;50MS定时初值
SETBEA;总中断开放
SETBET0;允许T0中断
SETBTR0;开启T0定时器
MOVR4,#14H;1秒定时用初值(50MS×20)
START1:
LCALLDISPLAY;调用显示子程序
JNBP3.3,SETMM1;P3.7口为0时转时间调整程序
SJMPSTART1;P3.7口为1时跳回START1
SETMM1:
LJMPSETMM;转到时间调整程序SETMM
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;1秒计时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET0;关T0中断允许
CLRTR0;关闭定时器T0
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0;
MOVTH0,A;重装初值(高8位修正值)
SETBTR0;开启定时器T0
DJNZR4,OUTT0;20次中断未到中断退出
ADDSS:
MOVR4,#14H;20次中断到(1秒)重赋初值
MOVR0,#71H;指向秒计时单元(71H-72H)
ACALLADD1;调用加1程序(加1秒操作)
MOVA,R3;秒数据放入A(R3为2位十进制数组合)
CLRC;清进位标志
CJNEA,#60H,ADDMM;
ADDMM:
JCOUTT0;小于60秒时中断退出
ACALLCLR0;大于或等于60秒时对秒计时单元清0
MOVR0,#77H;指向分计时单元(76H-77H)
ACALLADD1;分计时单元加1分钟
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH;
ADDHH:
JCOUTT0;小于60分时中断退出
ACALLCLR0;大于或等于60分时分计时单元清0
MOVR0,#79H;指向小时计时单(78H-79H)
ACALLADD1;小时计时单元加1小时
MOVA,R3;时数据放入A
CLRC;清进位标志
CJNEA,#24H,HOUR;
HOUR:
JCOUTT0;小于24小时中断退出
ACALLCLR0;大于或等于24小时小时计时单元清0
OUTT0:
MOV72H,76H;中断退出时将分、时计时单元数据移
MOV73H,77H;入对应显示单元
MOV74H,78H;
MOV75H,79H;
POPPSW;恢复状态字(出栈)
POPACC;恢复累加器
SETBET0;开放T0中断
RETI;中断返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;闪动调时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:
PUSHACC;中断现场保护
PUSHPSW;
MOVTL1,#0B0H;装定时器T1定时初值
MOVTH1,#3CH;
DJNZR2,INTT1OUT;0.3秒未到退出中断(50MS中断6次)
MOVR2,#06H;重装0.3秒定时用初值
CPL02H;0.3秒定时到对闪烁标志取反
JB02H,FLASH1;02H位为1时显示单元"熄灭"
MOV72H,76H;02H位为0时正常显示
MOV73H,77H;
MOV74H,78H;
MOV75H,79H;
INTT1OUT:
POPPSW;恢复现场
POPACC;
RETI;中断退出
FLASH1:
JB01H,FLASH2;01H位为1时,转小时熄灭控制
MOV72H,7AH;01H位为0时,"熄灭符"数据放入分
MOV73H,7AH;显示单元(72H-73H),将不显示分数据
MOV74H,78H;
MOV75H,79H;
AJMPINTT1OUT;转中断退出
FLASH2:
MOV72H,76H;01H位为1时,"熄灭符"数据放入小时
MOV73H,77H;显示单元(74H-75H),小时数据将不显示
MOV74H,7AH;
MOV75H,7AH;
AJMPINTT1OUT;转中断退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;加1子程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ADD1:
MOVA,@R0;取当前计时单元数据到A
DECR0;指向前一地址
SWAPA;A中数据高四位与低四位交换
ORLA,@R0;前一地址中数据放入A中低四位
ADDA,#01H;A加1操作
DAA;十进制调整
MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位变0
MOV@R0,A;放回前一地址单元
MOVA,R3;取回R3中暂存数据
INCR0;指向当前地址单元
SWAPA;A中数据高四位与低四位交换
ANLA,#0FH;高四位变0
MOV@R0,A;数据放入当削地址单元中
RET;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;清零程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;对计时单元复零用
CLR0:
CLRA;清累加器
MOV@R0,A;清当前地址单元
DECR0;指向前一地址
MOV@R0,A;前一地址单元清0
RET;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;时钟调整程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;当调时按键按下时进入此程序
SETMM:
cLRET0;关定时器T0中断
CLRTR0;关闭定时器T0
LCALLDL1S;调用1秒延时程序
JBP3.3,CLOSEDIS;键按下时间小于1秒,关闭显示(省电)
MOVR2,#06H;进入调时状态,赋闪烁定时初值
SETBET1;允许T1中断
SETBTR1;开启定时器T1
SET2:
JNBP3.3,SET1;P3.7口为0(键未释放),等待
SETB00H;键释放,分调整闪烁标志置1
SET4:
JBP3.3,SET3;等待键按下
LCALLDL05S;有键按下,延时0.5秒
JNBP3.3,SETHH;按下时间大于0.5秒转调小时状态
MOVR0,#77H;按下时间小于0.5秒加1分钟操作
LCALLADD1;调用加1子程序
MOVA,R3;取调整单元数据
CLRC;清进位标志
CJNEA,#60H,HHH;调整单元数据与60比较
HHH:
JCSET4;调整单元数据小于60转SET4循环
LCALLCLR0;调整单元数据大于或等于60时清0
CLRC;清进位标志
AJMPSET4;跳转到SET4循环
CLOSEDIS:
SETBET0;省电(LED不显示)状态。
开T0中断
SETBTR0;开启T0定时器(开时钟)
CLOSE:
JBP3.3,CLOSE;无按键按下,等待。
LCALLDISPLAY;有键按下,调显示子程序延时削抖
JBP3.3,CLOSE;是干扰返回CLOSE等待
WAITH:
JNBP3.3,WAITH;等待键释放
LJMPSTART1;返回主程序(LED数据显示亮)
SETHH:
CLR00H;分闪烁标志清除(进入调小时状态)
SETHH1:
JNBP3.3,SET5;等待键释放
SETB01H;小时调整标志置1
SET6:
JBP3.3,SET7;等待按键按下
LCALLDL05S;有键按下延时0.5秒
JNBP3.3,SETOUT;按下时间大于0.5秒退出时间调整
MOVR0,#79H;按下时间小于0.5秒加1小时操作
LCALLADD1;调加1子程序
MOVA,R3;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 制作 电子 时钟 报告