⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.a51

📁 4位时钟程序
💻 A51
字号:
;程序名:  MCS51实验板配套程序-时钟,使用T0中断方式
;电路介绍:显示由一片74164驱动4位共阴数码管
;          DsDat-p1.4;DsClk-p1.5;Gw-p1.0;Sw-p1.1;Bw-p1.2;Qw-p1.3
;www.01mcu.net www.01mcu.com 2003/4/19编写
;********************************************************************
XSDAT BIT P1.4    ;定义部分,意思是:程序中管脚名用前面字符替代
XSCLK BIT P1.5
GW    BIT P1.0
SW    BIT P1.1
BW    BIT P1.2
QW    BIT P1.3

bz    bit 00h        ;秒闪动标志

SJGW  EQU 30H        ;秒存储器
SJSW  EQU 31H
SJBW  EQU 32H        ;分存储器
SJQW  EQU 33H
TIME  EQU 21H         ;定时器
SEC   EQU 22H         ;秒计数器
MIN   EQU 23H         ;分钟计数器
;--中断入口-----------------------
          ORG 0000H
          AJMP INIT              ;到初始
          ORG 000BH
          AJMP TIME0             ;50MS中断  
;***初始化********************************************************
INIT:     MOV SP,#40H
          MOV P1,#0FH            ;关闭显示
          MOV P0,#0ffH           ;发光管灭
          MOV SEC,#0
          MOV MIN,#0             ;清时间为0
          MOV TMOD,#1H           ;初始化T0为定时器方式,模式1
          MOV TL0,#0B0H
          MOV TH0,#3CH           ;50MS定时初值(12M时)
          SETB ET0               ;允许T0中断
          SETB TR0               ;启动定时器T0
          SETB EA
MAIN :    
          MOV A,SEC              ;提取秒数据
          MOV B,#10
          DIV AB                 ;10进制转换
          MOV SJSW,A             ;得到十秒值
          MOV SJGW,B             ;得到秒值
          MOV A,MIN              
          MOV B,#10
          DIV AB                 ;转换分
          MOV SJQW,A             ;得到十分值
          MOV SJBW,B             ;得到分值
     
          LCALL DISPLAY          ;显示
          LJMP MAIN
;T0 50MS中断==对应12MHZ=====================================
TIME0:   PUSH ACC
         INC TIME
         MOV A,TIME
         CJNE A,#20,T0EXIT   ;20个50MS=1S
           cpl bz            ;反转闪动标志
         MOV TIME,#0
         INC SEC             ;+1秒
         MOV A,SEC
         CJNE A,#60,T0EXIT   ;60S=1MIN
         MOV SEC,#0
         INC MIN             ;分+1
         MOV A,MIN
         CJNE A,#60,T0EXIT
         MOV MIN,#0
           dec p0            ;hex小时记录

T0EXIT:  MOV TL0,#0B0H
         MOV TH0,#3CH        ;重装50MS定时
         POP ACC
         RETI
;************************************************************************
;74164显示程序,使用RS1=1,RS0=0的1区 2003/4/19
;---------------------------------------------------------
DISPLAY:  PUSH ACC             ;保存ACC
          PUSH PSW
          CLR RS1
          SETB RS0             ;使用第一区工作寄存器 
          MOV DPTR,#XSTAB    
          MOV A,SJGW           ;取得数据
          MOVC A,@A+DPTR       ;提取字模
          ACALL DSOUT          ;调用送出子程序
         CLR GW
          ACALL DS1MS          ;调用显示1MS延时程序
         SETB GW
          MOV A,SJSW
          MOVC A,@A+DPTR        ;提取字模
          ACALL DSOUT          ;送出
         CLR SW
          ACALL DS1MS          ;显示1MS  
         SETB SW        
          MOV A,SJBW
          MOVC A,@A+DPTR        ;提取字模
          ACALL DSOUT          ;送出
         CLR BW
          ACALL DS1MS          ;显示1MS 
         SETB BW 
         ;---------
                 jb bz,bzover        ;若标志=1,不显示小数点
                 mov a,#80h          ;显示小数点
                 acall dsout
                 clr bw
                 acall ds1ms
                 setb bw            
          bzover:
         ;---------
          MOV A,SJQW
          MOVC A,@A+DPTR        ;提取字模
          ACALL DSOUT          ;送出
         CLR QW
          ACALL DS1MS          ;显示1MS
         SETB QW
          POP PSW
          POP ACC              ;出栈
          RET                  ;返回调用
  ;---送出循环----------
DSOUT:    
          MOV R0,#8            ;传送一个字节8位
DSLOOP:   RLC A                ;左移
          MOV XSDAT,C          ;送数据到数据口
          SETB XSCLK           ;送一时钟
          CLR XSCLK
          DJNZ R0,DSLOOP
          RET         
   ;---显示延时---------- 
DS1MS:    MOV R1,#10
DS1LO:    MOV R2,#100
          DJNZ R2,$
          DJNZ R1,DS1LO
          RET                  ;延时返回
;---------------------------------------------------------
;显示字表(共阴)
XSTAB:    DB  3FH,06H,5BH,4FH    ;"0","1","2","3"
          DB  66H,6DH,7DH,07H    ;"4","5","6","7"
          DB  7FH,6FH,77H,7CH    ;"8","9","A","B" 
          DB  39H,5EH,79H,71H    ;"C","D","E","F"
;************************************************************************
END 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -