利用AT89C2051制作的6位电子钟

发布者:Alisallll最新更新时间:2011-12-06 关键字:AT89C2051  6位电子钟 手机看文章 扫描二维码
随时随地手机看文章

采用AT89C2051的6位电子钟原理如下图所示,只要硬件连接无误,保证成功。另外图中的SET按纽用于校准时间。按住2秒以上进入校准时间状态及换档和退出,快速点触用于调节时间数值。三极管采用9015即可。数码管最好采用红色的共阳型LED数码管,亮度高些,因为是扫描的显示方式,所以各个数码管的abcdefg各脚采用了总线并联,改动510欧姆的电阻可以改变显示亮度。

  
 

 

 
电子钟源程序

MCS51单片机汇编程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AT89C2051时钟程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用, ; P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中断入口程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  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:  MOV R0,#70H   ;清70H-7AH共11个内存单元 MOV R7,#0BHCLEARDISP:MOV @R0,#00HINC R0DJNZ R7,CLEARDISPMOV 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       ;总中断开放

[page]

SETB ET0 ;允许T0中断
 

SETB TR0 ;开启T0定时器
 

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

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

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

SJMP START1 ;P3.7口为1时跳回START1
 

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

 

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

;; 1秒计时程序 ;;
 

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

;T0中断服务程序
 

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

PUSH PSW ;状态字入栈保护
 

CLR ET0 ;关T0中断允许
 

CLR TR0 ;关闭定时器T0
 

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

[page]

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

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

MOV A,R3 ;时数据放入A
 

CLR C ;清进位标志
 

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 ;中断返回
 

 

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

;; 闪动调时 程 序 ;;
 

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

;T1中断服务程序,用作时间调整时调整单元闪烁指示
 

INTT1: PUSH ACC ;中断现场保护
 

PUSH PSW

MOV TL1, #0B0H;装定时器T1定时初值
 

MOV TH1, #3CH

DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
 

MOV R2,#06H ;重装0.3秒定时用初值
 

CPL 02H ;0.3秒定时到对闪烁标志取反
 

JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
 

MOV 72H,76H ;02H位为0时正常显示
 

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

INTT1OUT:

POP PSW ;恢复现场
 

POP ACC

RETI ;中断退出
 

FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
 

MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
 

MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
 

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT ;转中断退出
 

FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
 

MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
 

MOV 74H,7AH

MOV 75H,7AH

AJMP INTT1OUT ;转中断退出
 

 

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

;; 加1子 程 序 ;;
 

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

[page]

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 ;子程序返回
 

 

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

;; 清零程序 ;;
 

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

;对计时单元复零用
 

CLR0: CLR A ;清累加器
 

MOV @R0,A ;清当前地址单元
 

DEC R0 ;指向前一地址
 

MOV @R0,A ;前一地址单元清0
 

RET ;子程序返回
 

 

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

;; 时钟调整程序 ;;
 

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

;当调时按键按下时进入此程序
 

SETMM: CLR ET0 ;关定时器T0中断
 

CLR TR0 ;关闭定时器T0
 

LCALL DL1S ;调用1秒延时程序
 

JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)
 

MOV R2,#06H ;进入调时状态,赋闪烁定时初值
 

SETB ET1 ;允许T1中断
 

SETB TR1 ;开启定时器T1
 

SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待
 

SETB 00H ;键释放,分调整闪烁标志置1
 

SET4: JB P3.7,SET3 ;等待键按下
 

LCALL DL05S ;有键按下,延时0.5秒
 

JNB P3.7,SETHH

[page]

;按下时间大于0.5秒转调小时状态
 

MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
 

LCALL ADD1 ;调用加1子程序
 

MOV A,R3 ;取调整单元数据
 

CLR C ;清进位标志
 

CJNE A,#60H,HHH ;调整单元数据与60比较
 

HHH: JC SET4 ;调整单元数据小于60转SET4循环
 

LCALL CLR0 ;调整单元数据大于或等于60时清0
 

CLR C ;清进位标志
 

AJMP SET4 ;跳转到SET4循环
 

CLOSEDIS:

SETB ET0 ;省电(LED不显示)状态。开T0中断
 

SETB TR0 ;开启T0定时器(开时钟)
 

CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
 

LCALL DISPLAY ;有键按下,调显示子程序延时削抖
 

JB P3.7,CLOSE ;是干扰返回CLOSE等待
 

WAITH: JNB P3.7,WAITH;等待键释放
 

LJMP START1 ;返回主程序(LED数据显示亮)
 

SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
 

SETHH1: JNB P3.7,SET5 ;等待键释放
 

SETB 01H ;小时调整标志置1
 

SET6: JB P3.7,SET7 ;等待按键按下
 

LCALL DL05S ;有键按下延时0.5秒
 

JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
 

MOV R0,#79H ;按下时间小于0.5秒加1小时操作
 

LCALL ADD1 ;调加1子程序
 

MOV A,R3

CLR C

CJNE A,#24H,HOUU ;计时单元数据与24比较
 

HOUU: JC SET6 ;小于24转SET6循环
 

LCALL CLR0 ;大于或等于24时清0操作
 

AJMP SET6 ;跳转到SET6循环
 

SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键释放
 

LCALL DISPLAY ;延时削抖
 

JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
 

CLR 01H ;清调小时标志
 

CLR 00H ;清调分标志

[page]

CLR 02H ;清闪烁标志
 

CLR TR1 ;关闭定时器T1
 

CLR ET1 ;关定时器T1中断
 

SETB TR0 ;开启定时器T0
 

SETB ET0 ;开定时器T0中断(计时开始)
 

LJMP START1 ;跳回主程序
 

SET1: LCALL DISPLAY ;键释放等待时调用显示程序(调分)
 

AJMP SET2 ;防止键按下时无时钟显示
 

SET3: LCALL DISPLAY ;等待调分按键时时钟显示用
 

AJMP SET4

SET5: LCALL DISPLAY ;键释放等待时调用显示程序(调小时)
 

AJMP SETHH1 ;防止键按下时无时钟显示
 

SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用
 

AJMP SET6

SETOUT1:LCALL DISPLAY ;退出时钟调整时键释放等待
 

AJMP SETOUT ;防止键按下时无时钟显示
 

 

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

;; 显示程序 ;;
 

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

; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P1口输出段码数据,P3口作
 

; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
 

DISPLAY:MOV R1,#70H ;指向显示数据首址
 

MOV R5,#0FEH ;扫描控制字初值
 

PLAY: MOV A,R5 ;扫描字放入A
 

MOV P3,A ;从P3口输出
 

MOV A,@R1 ;取显示数据到A
 

MOV DPTR,#TAB ;取段码表地址
 

MOVC A,@A+DPTR;查显示数据对应段码
 

MOV P1,A ;段码放入P1口
 

LCALL DL1MS ;显示1MS
 

INC R1 ;指向下一地址
 

MOV A,R5 ;扫描控制字放入A
 

JNB ACC.5,ENDOUT ;ACC.5=0时一次显示结束
 

RL A ;A中数据循环左移
 

MOV R5,A ;放回R5内
 

AJMP PLAY ;跳回PLAY循环
 

ENDOUT: SETB P3.5 ;一次显示结束,P3口复位
 

MOV

[page]

P1,#0FFH ;P1口复位
 

RET ;子程序返回
 

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

;共阳段码表 "0""1""2" "3""4""5""6""7" "8""9""不亮"
 

 

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

;; 延时程序 ;;
 

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

 

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

DL1MS: MOV R6,#14H

DL1: MOV R7,#19H

DL2: DJNZ R7,DL2

DJNZ R6,DL1

RET

;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象
 

DS20MS: ACALL DISPLAY

ACALL DISPLAY

ACALL DISPLAY

RET

;延时程序,用作按键时间的长短判断
 

DL1S: LCALL DL05S

LCALL DL05S

RET

DL05S: MOV R3,#20H ;8毫秒*32=0.196秒
 

DL05S1: LCALL DISPLAY

DJNZ R3,DL05S1

RET

 

END

关键字:AT89C2051  6位电子钟 引用地址:利用AT89C2051制作的6位电子钟

上一篇:基于89C51单片机的环境噪声测量仪
下一篇:浅析基于单片机设计康复仪方法与应用

推荐阅读最新更新时间:2024-03-16 12:48

AT89C2051控制LMX2332的频率合成器
摘要:LMX2332是美国国家半导体公司生产的集成数字锁相环(PLL)电路。文章介绍了利用单片机AT89C2051控制数字锁相环LMX2332及压控振荡器JTOS-150实现低噪声频率源的方法,该方法可通过改变AT89C2051的程序得到不同频率的信号。 关键词:AT89C2051;单片机;锁相环;LMX2332;频率合成器 1 引言 数字式频率合成器能提供长期频率稳定度与短期频率稳定度都比较高且杂波少的信号输出,而且,波道数目多、体积小、易于数字化和集成化。数字锁相环构成的数字式频率合成器是目前通信、仪表、雷达等电子技术中广泛应用的一种频率合成技术,它的基本组成如图1所示。 该环路的输入端有一个数字参考分频器%26;#
[单片机]
基于单片机AT89C2051电子钟设计方案
 电路见图1.     一片20引脚的单片机AT89C2051为电子钟主体,其显示数据从P1口分时输出,P3.0~3.3则输出对应的位选通信号。由于LED数码管点亮时耗电较大,故使用了四只PNP型晶体管VT1~VT4进行放大。本来笔者还有一种更简的设计方案(见图2),可省去VT1~VT4及R1~R4八个元件,但这种设计由于单片机输出口的灌入电流有限(约20mA),数码管亮度较暗而不向读者介绍,除非你采用了高亮度的发光数码管。   P3.4、P3.5、3.7外接了三个轻触式按键,这里我们分别命名为:模式设定键set(P3.4)、时调整键hour(P3.5)、分调整键min(P3.7)。C1、R13组成上电复位电路。VT5
[电源管理]
基于单片机<font color='red'>AT89C2051</font>的<font color='red'>电子钟</font>设计方案
基于AT89C2051单片机的VCN-MIO智能节点模板电路设计
  0.引言   基于具有三个CPU且固化了LonTalk通信协议的神经元(Neuron)芯片的智能节点模板,由于Neuron芯片是八位处理器,而且只提供了11个通用I/O口,并采用了基于事件巡检的软件调度机制,故其控制功能相对较弱,使它无法完成实时性高的多进程、多任务的并行处理,不能满足采集量和控制量要求较多的多现场设备管控的高要求,且性价比较低。要满足这种高要求,就要减少Neuron芯片在外部事件上的开销,让其充分发挥它在通讯组网上的优越性,能使现场设备之间快速地交换信息,满足系统实时监控的要求;而对于提高网络节点的测控能力,必须另择门路。嵌入控制功能强、物美价廉的单片机,专门完成多节点的智能测控,构成一种基于AT89C2051
[单片机]
基于<font color='red'>AT89C2051</font>单片机的VCN-MIO智能节点模板电路设计
基于AT89C2051单片机的智能化快速充电系统设计
1.前 言   自1859年法国物理学家普兰特(Plante)发明了铅酸蓄电池至今已有140年的历史。铅酸蓄电池有着成本低,适用性宽,可逆性好,大电流放电性能良好,单体电池电压高,并可制成密封免维护结构等优点,而被广泛地应用于车辆启动、邮电、电力、铁路、矿山、采掘、计算机UPS等各个领域中。蓄电池也是国民经济以及国防建设的重要能源,在许多行业的发展中,也迫切需要容量大、循环寿命长、充电时间短、价格低的蓄电池。而快速充电技术也成为了其中的关键技术,它对电池的使用有着非常重要的影响。目前,国内外都在不断地研究这一技术,而在快速充电技术中引入计算机控制,是非常有效的,且有着非常明显的经济效益。而单片机又以其低廉的成本,灵活的控制方式
[单片机]
基于<font color='red'>AT89C2051</font>单片机的智能化快速充电系统设计
AT89C2051利用中断产生PWM
原理图 #include REG2051.H #include intrins.h #define uint unsigned int #define uchar unsigned char const TH_600=0xfd; const TL_600=0xd4; const TH_1200=0xfb; const TL_1200=0x7c; const TH_2400=0xf6; const TL_2400=0xa0; sbit PWM=P3^7; bit ld=0; //上一次发送的数据 uchar _pool ; //数据头 uchar _length; //当前数组长度 uchar _in
[单片机]
AT89C2051在点钞机外接显示屏中的应用
  大家知道,LED数码管是由发光二极管作为显示字段的数码型显示器件。在数码管显示器中,一般情况下都采用动态扫描式显示方式。所谓扫描式,就是当有多个七段(带小数点的为八段)显示器要显示时,将其各个对应引脚接在一起,也就是说,所有的a段接在一起,b段也接在一起,依此类推。而利用各七段显示器的共阳(或共阴)极来确定哪一个七段显示器要显示。这样做的目的有二:(1)省电;(2)节省输出端口。   本电路利用89C2051的端口与数码的笔段接法为: P1.1-- C; P1.2-- D; P1.3-- E; P1.4-- B; P1.5-- A; P1.6-- F; P1.7-- G ,且三只数码管的笔段a~g又是并联在一起的。数码管的公共端
[单片机]
<font color='red'>AT89C2051</font>在点钞机外接显示屏中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved