基于单片机实现的电子时钟设计Word下载.docx
《基于单片机实现的电子时钟设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的电子时钟设计Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
![基于单片机实现的电子时钟设计Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/27/44d75eee-d604-42ab-81d2-9d959cbd9434/44d75eee-d604-42ab-81d2-9d959cbd94341.gif)
一个键K2做位移选择键(选中要修改的位,选中的位用闪烁指示),一个键K3做加键(对选中的位进行加1修改)。
设置确认键K3,按下K3键变成默认显示状态(显示时间)。
要求校正内容闪烁,秒点一直闪烁,日期秒点不闪烁。
13单片机的基本结构
STC89C-52单片机内部结构
STC89C-52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)
STC89C-52内部有256个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有256个,可存放读写的数据,运算的中间结果或用户定义的字型表。
并行输入输出(I/O)口:
STC89C-52共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
全双工串行口:
STC89C-52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
STC89C-52具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
STC89C-52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C-52单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-52系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
复位电路
单片机的复位方式可以是自动复位,也可以是手动复位,见下图。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
上电自动和手动复位电路图
内部和外部时钟方式图
二、硬件原理电路图
三、设计思路
3.1.总体设计原理:
简易电子钟是秒和分的运转,秒到分势必会进位,从而显示出一个分秒数据。
而分到时的时候势必也会进位,从而显示出一个分秒数据。
但始终走时和不走时状态各个键的功能以及显示的效果有所差异,所以要分配好每一步的走势。
3.2.资源分配和状态标志的单元设置:
1、K1、K2、K3、K4分别对应P1口的P1.4、P1.5、P1.6、P1.7
2、秒、分、时、日、月单元分别为30H、31H、32H、33H、34H。
3、校正/非校正标志20H.1:
为0时处于非校正状态,为1时处于校正状态。
4、校正指针21H:
地两位为00、01、10、11时分别对应校正月、日、时、分。
通过判断21H.0来判断校正时间还是日期,通过21H.1来判断校正时内容的闪烁。
5、时间/日期显示标志20H.0:
为1时显示时间,为0时显示日期。
6、非校正状态的按键信息存放地址50H。
7、1/16s单元2FH:
通过判断2FH.3来控制秒点半秒亮半秒灭。
8、显示缓冲单元3AH用来存放后面(日或分)面两个数码管的内容,单元3BH用来存放前面(月或小时)两个数码管的内容。
9、显示缓冲单元43H、42H、41H、40H分别用来存放时(月)的BCD码的高位、时(月)的BCD码的低位、分(天)的BCD码的高位、分(天)的BCD码的低位。
3.程序功能模块划分
(1)51单片机端口
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可做输入口。
做输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL逻辑门电路。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。
P3口:
P3是一组带有内部上拉电阻的8位双向I/O,P3口输出缓冲级可驱动4个TTL逻辑门电路,对P3口写入“1”时,他们被内部上拉电阻拉亮并可作为输入端口,做输入端时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能。
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INTO—(外部中断0)
P3.3
INTI(外部中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
(2)LED显示电路
显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:
发光二极管LED显示器、液晶LCD显示器、CRT显示器等。
LED显示器是现在最常用的显示器之一,如下图所示。
LED显示器的符号图
发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。
分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。
外加正向电压时二极管导通,发出清晰的光。
只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。
LED数码管有共阳、共阴之分。
图是共阳式、共阴式LED数码管的原理图和符号.
图为数码显示电路
显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管。
采用动态显示方式显示时间,硬件连接如上图所示,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第三个和四五个数码管,秒的十位和个位分别显示在第五个和第六个数码管。
数码管使用条件:
1、段及小数点上加限流电阻。
2、使用电压:
段:
根据发光颜色决定;
小数点:
根据发光颜色决定。
3、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA峰值电流100mA。
三软件设计
3.1键输入程序
键输入程序用于调整时间。
以秒为例,按下按键S-SET,判断S-SET是否真的被按下,若没有键按下,转到A1程序段,再次键入按键,重新判断。
若按键按下了,则调用延时程序,消除抖动现象秒值加1,当秒值大于60时,秒清零,进行下一次计时,同时分加一,并转到J0显示。
此过程循环执行,其程序流程图如图4-2所示:
图3-2键输入程序流程图
A1:
LCALLDISPLAY;
调用延时程序
JNBS_SET,S1;
判断按键是否按下
JNBM_SET,S2
JNBH_SET,S3
LJMPA1
S1:
LCALLDELAY;
去抖动
JBS_SET,A1
INCSECOND;
秒值加1
MOVA,SECOND
CJNEA,#60,J0;
判断是否加到60秒
MOVSECOND,#0;
秒清0
LJMPJ0
J0:
LCALLDISPLAY;
调用显示
SJMPJ0
3.2、定时中断流程图
采用定时器计数器0,工作在方式1下,每50毫秒中断一次,若计时中断每到20次则跳出中断继续计时,若到20次则秒存储单元加1,若秒不满60则跳出中断,满60则清零,分单元加1,分满60则清零,时单元加1,不满24退出中断,满则时单元清零,日单元加1,如此方式累次下去就完成时分秒,年月日的走时。
图3-4中断程序流程图
DISPLAY:
MOVA,SECOND;
显示秒
MOVB,#10
DIVAB
CLRP3.6
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY;
调用延时
SETBP3.6;
显示秒的十位
MOVA,B
CLRP3.7
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY
SETBP3.7;
显示秒的个位
CLRP3.5
MOVP0,#40H;
显示分隔符
SETBP3.5
MOVA,MINUTE;
显示分钟
CLRP3.3
MOVP0,A
SETBP3.3;
显示分的十位
CLRP3.4
SETBP3.4;
显示分个位
CLRP3.2
LCALLDELAY
SETBP3.2
MOVA,HOUR;
显示小时
CLRP3.0
SETBP3.0;
显示时的十位
CLRP3.1
SETBP3.1;
显示时的个位
RET
闪烁的程序流程图:
四、程序编写调试过程回顾
在程序编写的过程中,首先考虑的就是数码管显示的走时和不走时状态,如果在走时状态下只有启动|停止键有效;
如果在不走时状态下,启动|停止键,切换键,加1键,清零键均有效。
然后考虑主程序和各个子程序的流向和编写,特别是在编写中断程序的时候考虑TMOD的方式,还要根据晶振求出初值等问题。
还要考虑分秒值的改变是为了秒加1加到59进位到分的作用。
当然也要重视分秒值的分离为了数码管清晰名了的显示而用。
实践时在主程序中设定四个数码管初值(初值为本人班级学号1239)和不走时状态,与此同时观察四个数码管的显示,当前显示为13.39(因为在主程序中设置了指向分单元,所以小数点位于