AT89S51单片机对6位LED数码管实现显示时计方式的设计

发布者:心满意足最新更新时间:2024-03-18 来源: elecfans关键字:AT89S51单片机  数码管 手机看文章 扫描二维码
随时随地手机看文章

这是我们设计的单片机电子钟/计时器学习板,它采用6位LED数码管显示时、分、秒,以24小时计时方式。可以通过按键实现时分调整、秒表/时钟功能转换、省电(关闭显示)等功能。我们能提供的完整的汇编语言源程序清单及电路原理设计图有助于学习者进行分析和进行实验验证。


硬件参数板上资源:MCU STC89C52、6位Led显示、3位按键。电源部分为5V直流电压,需要稳压、滤波电路,不能接反!

51单片机做的电子钟在很多地方都有介绍, 对于单片机学习者来说这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分、计算部分、时钟调整部分构成,本产品硬件上完全支持倒计时器,客户只要自己修改程序就能实现倒计时功能。

为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些。考虑时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定采用动态扫描法实现LED的显示。单片机采用易购的AT89S51系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能,硬件系统的总体构成如下图所示:视频演示

AT89S51单片机对6位LED数码管实现显示时计方式的设计

http://xie-gang.com/SZDZZ.htm视频演示

该板采用AT89S51单片机,最小化应用设计,采用共阳七段LED显示器,P0口输出段码数据,P2.0~P2.5做列扫描输出,P1.0,P1.2,P1.3,接三个按键开关,用以调时及功能设置。为了提高共阳数码管的驱动电压,用9012做电源驱动输出。采用12M晶振,有利于提高秒计时的精度。

本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。其主程序执行流程图见下左图:

AT89S51单片机对6位LED数码管实现显示时计方式的设计

AT89S51单片机对6位LED数码管实现显示时计方式的设计

数码管显示的数据存放在内存单元70H~75H中。其中70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出70H~~75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。

定时器T0用于时间计时。定时溢出中断周期可分别设为50mst和10ms。中断进入后,先判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)和78H~79H(时),最大计时值为23时59分59秒。而秒表计数单元地址也在70H~~71H(0.01毫秒)、76H~~77H(秒)和78H~~79H(分),最大计时值为99分59.99秒。7AH单元内存放“熄灭符”数据(#0AH)。在计数单元中采用十进制BCD码计数,满60(秒表功能时有100)进位,T0中断服务程序执行流程见上图右

T1中断服务程序用于指示调整单元数字的亮闪。在时间调整状态下,每过0.3S将对应单元的显示数据换成“熄灭符”数据(#0AH)。这样在调整时间时,对应调整单元的显示数据会间隔闪亮。

调时功能程序的设计方法是:按下P1.0口按键,若按下时间短于1 s则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。当再按下按钮时,若按下时间短于0.5s,则时间加1分;若按下时间长于0.5s,则进入[小]时调整状态。在[小]时调整状态下,当按键按下的时间长于0.5s时,退出调整状态,时钟继续走动。P1.1口按键在调时状态下可实现减1功能。

AT89S51单片机对6位LED数码管实现显示时计方式的设计

使用方法:按下K1按键,如果按下时间小于1秒,就会进入省电模式,这时数码管熄灭但是时钟仍然运行。如果按下K1按键时间大于1秒,就会进入调分状态,此时计时器停止走动等待操作,这时中间的两位00会闪烁,这时当按下K1按键时间小于0.5秒时,时间信息就会加1(单位分钟);若时间大于0.5秒,这时左边的两位00会闪烁,进入小时调整,在小时调整状态下按下S6按键时间小于0.5秒时,时间信息就会加1(单位小时),如果按下按键时间大于0.5S时,就会退出调整状态,时钟继续走动。

配件:采用PL2303芯片的USB转TTL串口模块 每个15元 含一根4芯杜邦连接线


你还可以另外购买我们的PL2303模块,就能实现STC芯片的在线程序下载。只要连接3根线:一根串口入R连接单片机的P3.1TXD、一根串口出D连接单片机的P3.0 RXD、一根地线-连接单片机的电源地即可。

然后将PL2303的USB转串口模块插入电脑的USB口(已经安装好2303的驱动),然后在STC编程软件界面中选择单片机型号STC89C52RC,选择COM6(具体按电脑实际虚拟出的串口号)波特率选择9600,点击“OPEN FILE”选择你的烧写文件,点击“下载”按钮,然后接通超声波测距成品学习板的电源,3秒左右就能完成程序下载并运行。

以下是部分汇编源程序,购买我们产品后我们可以通过电子邮件将完整的单片机汇编源程序和烧写文件发送给客户。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; AT89S51时钟程序 ;;(该程序不全,不要直接使用。购买产品后提供全部程序和图纸)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

; 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用,

; P1.0、P1.1、P1.2为调整按钮,P0口 为字符输出口,采用共阳显示管。

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 中断入口程序 ;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

ORG 0000H ;程序执行开始地址

LJMP START ;跳到标号START执行

ORG 0003H ;外中断0中断程序入口

RETI ;外中断0中断返回

ORG 000BH ;定时器T0中断程序入口

LJMP INTT0 ;跳至INTTO执行

ORG 0013H ;外中断1中断程序入口

RETI ;外中断1中断返回

ORG 001BH ;定时器T1中断程序入口

LJMP INTT1 ;跳至INTT1执行

ORG 0023H ;串行中断程序入口地址

RETI ;串行中断程序返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 主 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

START: LCALL ST ;上电显示年月日及班级学号

MOV R0,#70H ;清70H-7AH共11个内存单元

MOV R7,#0BH ;

CLEARDISP: MOV @R0,#00H ;

INC R0 ;

DJNZ R7,CLEARDISP ;

MOV 20H,#00H ;清20H(标志用)

MOV 7AH,#0AH ;放入“熄灭符”数据

MOV TMOD,#11H ;设T0、T1为16位定时器

MOV TL0,#0B0H ;50MS定时初值(T0计时用)

MOV TH0,#3CH ;50MS定时初值

MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)

MOV TH1,#3CH ;50MS定时初值

SETB EA ;总中断开放

SETB ET0 ;允许T0中断

SETB TR0 ;开启T0定时器

MOV R4,#14H ;1秒定时用初值(50MS×20)

START1: LCALL DISPLAY ;调用显示子程序

JNB P1.0,SETMM1 ;P1.0口为0时转时间调整程序

JNB P1.1,FUNSS ; 秒表功能,P1.1按键调时时作减1加能

JNB P1.2,FUNPT ;STOP,PUSE,CLR

SJMP START1 ;P1.0口为1时跳回START1

SETMM1: LJMP SETMM ;转到时间调整程序SETMM

FUNSS: LCALL DS20MS

JB P1.1,START1

WAIT11: JNB P1.1,WAIT11

CPL 03H

MOV 70H,#00H

MOV 71H,#00H

MOV 76H,#00H

MOV 77H,#00H

MOV 78H,#00H

MOV 79H,#00H

AJMP START1

FUNPT: LCALL DS20MS

JB P1.2,START1

WAIT22: JNB P1.2,WAIT21

CLR ET0

CLR TR0

WAIT33: JB P1.2,WAIT31

LCALL DS20MS

JB P1.2,WAIT33

WAIT66: JNB P1.2,WAIT61

MOV R0,#70H ;清70H-79H共10个内存单元

MOV R7,#0AH ;

CLEARP: MOV @R0,#00H ;

INC R0 ;

DJNZ R7,CLEARP ;

WAIT44: JB P1.2,WAIT41

LCALL DS20MS

JB P1.2,WAIT44

WAIT55: JNB P1.2,WAIT51

SETB ET0

SETB TR0

AJMP START1

WAIT21: LCALL DISPLAY

AJMP WAIT22

WAIT31: LCALL DISPLAY

AJMP WAIT33

WAIT41: LCALL DISPLAY

AJMP WAIT44

WAIT51: LCALL DISPLAY

AJMP WAIT55

WAIT61: LCALL DISPLAY

AJMP WAIT66

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 1秒计时程序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中断服务程序

INTT0: PUSH ACC ;累加器入栈保护

PUSH PSW ;状态字入栈保护

CLR ET0 ;关T0中断允许

CLR TR0 ;关闭定时器T0

JB 03H,FSS

MOV A,#0B7H ;中断响应时间同步修正

ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重装初值(低8位修正值)

MOV A,#3CH ;高8位初值修正

ADDC A,TH0 ;

MOV TH0,A ;重装初值(高8位修正值)

SETB TR0 ;开启定时器T0

DJNZ R4, OUTT0 ;20次中断未到中断退出

ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值

MOV R0,#71H ;指向秒计时单元(71H-72H)

ACALL ADD1 ;调用加1程序(加1秒操作)

MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)

CLR C ;清进位标志

CJNE A,#60H,ADDMM ;

ADDMM: JC OUTT0 ;小于60秒时中断退出

ACALL CLR0 ;大于或等于60秒时对秒计时单元清0

MOV R0,#77H ;指向分计时单元(76H-77H)

ACALL ADD1 ;分计时单元加1分钟

MOV A,R3 ;分数据放入A

CLR C ;清进位标志

CJNE A,#60H,ADDHH ;

ADDHH: JC OUTT0 ;小于60分时中断退出

ACALL CLR0 ;大于或等于60分时分计时单元清0

MOV R0,#79H ;指向小时计时单元(78H-79H)

ACALL ADD1 ;小时计时单元加1小时

MOV A,R3 ;时数据放入A

CLR C ;清进位标志

JB 03H,OUTT0 ;秒表时最大数为99

CJNE A,#24H,HOUR ;

HOUR: JC OUTT0 ;小于24小时中断退出

ACALL CLR0 ;大于或等于24小时小时计时单元清0

OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移

MOV 73H,77H ;入对应显示单元

MOV 74H,78H ;

MOV 75H,79H ;

POP PSW ;恢复状态字(出栈)

POP ACC ;恢复累加器

SETB ET0 ;开放T0中断

RETI ;中断返回

;秒表计时程序(10MS加1),低2位为0.1、0.01秒,中间2位为秒,最高位为分。

;最大计数值为99

FSS: MOV A,#0F7H ;中断响应时间同步修正,重装初值(10ms)

ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重装初值(低8位修正值)

MOV A,#0D8H ;高8位初值修正

ADDC A,TH0 ;

MOV TH0,A ;重装初值(高8位修正值)

SETB TR0 ;开启定时器T0

MOV R0,#71H ;指向秒计时单元(71H-72H)

ACALL ADD1 ;调用加1程序(加1秒操作)

CLR C ;

MOV A,R3 ;

JZ FSS1 ;加1后为00,C=0

SETB C ;加1后不为00,C=1

FSS1: AJMP ADDMM ;

》》》》》》》》》》》省略》》》》》

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 加1子 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

ADD1: MOV A,@R0 ;取当前计时单元数据到A

DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换

ORL A,@R0 ;前一地址中数据放入A中低四位

ADD A,#01H ;A加1操作

DA A ;十进制调整

MOV R3,A ;移入R3寄存器

ANL A,#0FH ;高四位变0

MOV @R0,A ;放回前一地址单元

MOV A,R3 ;取回R3中暂存数据

INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换

ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中

RET ;子程序返回

》》》》》》》》》》》省略》》》》》

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 延时程序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

;1MS延时程序,LED显示程序用

DL1MS: MOV R6,#14H


关键字:AT89S51单片机  数码管 引用地址:AT89S51单片机对6位LED数码管实现显示时计方式的设计

上一篇:基于51单片机的蓝牙台灯设计
下一篇:基于STC89C51单片机的温控风扇设计方案

推荐阅读最新更新时间:2026-03-25 11:54

单片机中的定时计数器的四种工作方式解析
单片机中的定时/计数器都能有多种用途,要通过定时/计数器的方式控制字来设置,需要的用途。 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。 TMOD被分成两部份,每部份4位。分别用于控制T1和T0。TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(TF1、0在这)。TR0(1)称之为运行控制位,为1,开关才能合上,计数脉冲才能过来,可用指令SETB和CLR来置位以启动/关闭计数器/定时器。 定时/计数器
[单片机]
<font color='red'>单片机</font>中的定<font color='red'>时计</font>数器的四种工作<font color='red'>方式</font>解析
具有6LED、4个按键的显示板电路图
按键和显示是单片机系统的基本输入输出部件,下面介绍一个由74LS164驱动的6位数码管和4个按键组成的通用仪表面板。 原理图如下图所示 script src="/gg/article-main.js" /script script type=text/javascript /script script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript /script script src="http://pagead2.googlesyndication.com/pagead/js/r20140211
[单片机]
具有<font color='red'>6</font><font color='red'>位</font><font color='red'>LED</font>、4个按键的显示板电路图
用于LED照明的配备6通道PWM端口的8MCU
LAPIS Semiconductor公司于2013年9月17日宣布,开发出了用于 LED 照明控制的8bit微控制器(MCU)“ML610Q111/ML610Q112”。据介绍,新产品配备6通道的PWM(脉冲宽度调制)端口,由此可以实现多种色调和亮度,可获得与生活场景和内饰巧妙搭配的丰富的照明效果。   新产品配备的PWM的分辨率均为16bit(可在16.384MHz下工作),PWM控制用时钟由新开发的时钟振荡电路生成,振荡频率为8.192MHz±1%(25℃时。-10~85℃时为±2%,-40~85℃时为±2.5%)。据介绍,将该振荡电路与内置的逻辑电源用稳压器组合使用后,可以削减逻辑电源用电容器等外部部件的数量,而且,通过采
[电源管理]
AT89S51和AT89S52这两种类型的单片机有什么区别?
AT89S51 AT89S51是一个低功耗、高性能的CMOS 8位单片机,片内含4KB的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。 性能 4KB Flash片内程序存储器 128bytes的随机存取数据存储器(RAM) 32个外部双向输入/输出(I/O)口 2个中断优先级、2层中断嵌套中断 5个中断源 2个16位可编程定时器/计数器 1个全双工串行通信口 看门狗(WDT)电路 片内振荡器和时钟电路 与MC
[单片机]
AT89S51单片机按键识别的过程和方法
1.实验任务 每按下一次开关SP1,计数值加1,通过AT89S51单片机的P1端口的P1.0到P1.3显示出其的二进制计数值。 2.电路原理图 图4.8.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上; (2).把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。 4.程序设计方法 (1).其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一
[单片机]
<font color='red'>AT89S51</font><font color='red'>单片机</font>按键识别的过程和方法
AT89S51单片机报警器的设计
1.实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。 2.电路原理图 图4.6.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2).在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭; (3).把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域中的K1端口上; 4.程序设计内容 (1).信号产生的方法 500
[单片机]
<font color='red'>AT89S51</font><font color='red'>单片机</font>报警器的设计
AT89S51单片机对十字路口交通信号灯的控制设计
一、技术要求 某十字路口,如下图所示,设计一个交通灯信号控制器,指挥交通车的通行。要求如下: 1)东西通道和南北通道交替通行,东西通道每次放行时间大于南北通道每次放行时间。 2)绿灯亮表示可以通行,红灯亮表示禁止通行。 3)每次绿灯变红灯时,绿灯先闪转变黄灯(此时另一干道上的红灯不变)。 4)要有数字显示,作为时间提示,以便人们更直观地把握时间。具体要求东西通道、南北通道通行时间及黄灯亮的时间均以秒为单位作减计数。 二、硬件电路说明 2.1电路设计原理图 本设计是以89S51为主控芯片 ,利用P1口控制74LS240(八反相缓冲器,线驱动器)驱动发光二极管模拟交通灯。倒计时显示部分采用串口实现。串口工作在方式0时通过外接
[单片机]
<font color='red'>AT89S51</font><font color='red'>单片机</font>对十字路口交通信号灯的控制设计
AT89S51单片机时计数器的使用技巧详细说明
1. 实验任务 用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。0.2秒的闪烁速率也由定时/计数器T0来完成,也就是一个闪烁灯。 2. 电路原理图 图4.16.1 3. 系统板硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4上 4. 程序设计内容 (1. 由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中
[单片机]
<font color='red'>AT89S51</font><font color='red'>单片机</font>定<font color='red'>时计</font>数器的使用技巧详细说明
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved