最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > led显示/灯光 >

改进版8位数码管汇编数字钟 附视频

时间:2012-12-29 17:46来源:未知 作者:admin 点击:
几天前帮同学课程设计写的那个数字钟( 51单片机简洁版汇编数字钟 ),由于时间紧,随便搞了两下。那个程序不怎么好,用两个按钮分别调时调分,而且只能增加,不小心按到按钮便调动了时间,不能用于实际产品。恰巧我自己的单片机课程设计题目是自动打铃器,也
几天前帮同学课程设计写的那个数字钟(51单片机简洁版汇编数字钟),由于时间紧,随便搞了两下。那个程序不怎么好,用两个按钮分别调时调分,而且只能增加,不小心按到按钮便调动了时间,不能用于实际产品。恰巧我自己的单片机课程设计题目是“自动打铃器”,也是建立在电子钟的基础上的,同样要求用汇编写,于是我对那个数字钟程序作了大的改进。

        显示格式依然是23-59-59(同样是小时十位如果为0则不显示),调整时间增加了一只按钮,通过调整选择键SET_KEY选择调整位,选中位开始闪烁,此时再按增加键ADD_KEY或减少键DEC_KEY调整选中位,如果长按ADD_KEY或DEC_KEY,系统识别后则进行调时快进,此时停止闪烁,方便人眼观察。同时还增加了调秒功能:如果选中位是秒,则按增加键或减少键都是将秒清零。

        演示视频:
 

 

        硬件电路如图(点击放大):

改进版8位数码管汇编数字钟 附视频

汇编程序设计:

/**************************************************************
程序名称:51单片机8位数码管数字钟汇编程序
简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒
    显示格式:23-59-59(小时十位如果为0则不显示)
    通过3只按键来调整时间
    调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁
    增加键ADD_KEY:P1.1;按一次使选中位加1
    减少键DEC_KEY;P1.2;按一次使选中位减1
    如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁
    如果选中位是秒,则按增加键或减少键都是将秒清零
    P0口输出数码管段选信号,P2口输出数码管位选信号。晶振12M
编    写:JiangX.net
最后更新:08/12/31晚
**************************************************************/
  ORG 0000H   ;程序入口地址
  LJMP START
  ORG 000BH   ;定时器0中断入口地址
  LJMP TIMER_0

  ORG 0300H

/*****程序开始,初始化*****/  
START:
  SETB 48H   ;使用一个bit位用于调时闪烁标志
  SETB 47H   ;使用一个bit位用于产生脉冲用于调时快进时基
  MOV R1,#0   ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒

  MOV 20H,#00H  ;用于控制秒基准时钟源的产生
  MOV 21H,#00H  ;清零秒寄存器
  MOV 22H,#00H  ;清零分寄存器
  MOV 23H,#00H  ;清零时寄存器
  MOV 24H,#00H  ;用于控制调时闪烁的基准时钟的产生
 
  MOV IP,#02H   ;IP,IE初始化
  MOV IE,#82H
  MOV TMOD,#01H  ;设定定时器0工作方式1
  MOV TH0,#3CH
  MOV TL0,#0B0H  ;赋定时初值,定时50ms   
  SETB TR0   ;启动定时器0
  MOV SP,#40H   ;重设堆栈指针

/*****主程序*****/  
MAIN:
  LCALL DISPLAY   ;调用显示子程序
  LCALL KEY_SCAN   ;调用按键检测子程序
  JZ MAIN    ;无键按下则返回重新循环
  LCALL SET_KEY   ;调用选择键处理子程序
  JB 46H,MAIN   ;如果已进行长按调整(调时快进),则不再执行下面的单步调整    
  LCALL ADD_KEY  ;调用增加键处理子程序,加一
  LCALL DEC_KEY  ;调用减少键处理子程序,减一
  LJMP MAIN    ;重新循环
 
/*****定时器中断服务程序*****/
TIMER_0:
  PUSH ACC    
  PUSH PSW    ;保护现场
  MOV TH0,#3CH
  MOV TL0,#0B0H   ;重新赋定时初值
  CPL 47H    ;产生脉冲用于调时快进时基
  INC 24H
  MOV A,24H        
  CJNE A,#10,ADD_TIME ;产生0.5秒基准时钟,用于调时闪烁
  CPL 48H    ;取反调时闪烁标志位
  MOV 24H,#00H

ADD_TIME:     ;走时
  INC 20H    
  MOV A,20H
  CJNE A,#20,RETI1 ;产生1秒基准时钟
  MOV 20H,#00H   ;一秒钟时间到,清零20H
  MOV A,21H
  ADD A,#01H
  DA A     ;作十进制调整
  MOV 21H,A
  CJNE A,#60H,RETI1
  MOV 21H,#00H   ;一分钟到
  MOV A,22H
  ADD A,#01H
  DA A
  MOV 22H,A
  CJNE A,#60H,RETI1
  MOV 22H,#00H   ;一小时到
  MOV A,23H
  ADD A,#01H
  DA A
  MOV 23H,A
  CJNE A,#24H,RETI1
  MOV 23H,#00H   ;到24点,清零小时
 
RETI1:
  POP PSW    
  POP ACC    ;恢复现场
  RETI     ;中断返回

/*****显示处理*****/
DISPLAY:
  MOV A,21H    ;秒
  ANL A,#0FH
  MOV 2FH,A   ;转换出秒个位,存入2FH
  MOV A,21H
  ANL A,#0F0H (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容