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

📄 digitalclock.asm

📁 这个是基于单片机的数字种,主要是有时,分,秒的显示.并且可以手动修改
💻 ASM
字号:
DATA_IN  DATA   0020H
DATA_OUT DATA   0021H
SHUDATA  DATA   0022H
KEY      BIT P3.3    ;7279的KEY按键输出
DAT      BIT P1.1    ;7279的DATA串行数据引脚
CLK      BIT P1.0    ;7279的CLK同步时钟引脚
CS       BIT P2.6    ;7279的CS片选输入端
;*************************************
;************主程序*****
;*************************************
         ORG  0000H
         LJMP START
         ORG 0013H
         LJMP INT1
         ORG 001BH
         LJMP INT
         ORG  0300H

START:   MOV SP,#2FH
         SETB CS
         SETB KEY
         CLR CLK
         CLR DAT    ;初始化I/O口
         CALL DELAY25  ;延时25mS
         MOV R3,#20
         SETB EA
         SETB ET1
         SETB EX1
         SETB PX1
         MOV TMOD,#10H
         MOV TH1,#03CH
         MOV TL1,#0B0H
         SETB TR1     ;中断初始化
         MOV  DATA_OUT,#0A4H
         CALL SEND   ;发复位(清除)指令
         SETB CS
         MOV R4,#00H  ;存放秒数字
         MOV R5,#00H  ;存放分数字
         MOV R6,#00H  ;存放时数字
         MOV SHUDATA,#87H
;----------------------------------------
;   第三个和第六个数码管位一横并闪烁
;----------------------------------------
   CFSM: MOV  DATA_OUT,#95H
         CALL SEND
         MOV  DATA_OUT,#01H
         CALL SEND
         MOV  DATA_OUT,#88H
         CALL SEND
         MOV  DATA_OUT,#11011011B
         CALL SEND
;--------------------------------
         MOV  DATA_OUT,#92H
         CALL SEND
         MOV  DATA_OUT,#01H
         CALL SEND
;--------------------------------
         MOV A,R6        ;显示时
         MOV B,#10
         DIV AB
         MOV DATA_OUT,#86H
         CALL SEND
         MOV DATA_OUT,B
         CALL SEND
         MOV DATA_OUT,#87H
         CALL SEND
         MOV DATA_OUT,A
         CALL SEND
;--------------------------------
         MOV A,R5        ;显示分
         MOV B,#10
         DIV AB
         MOV DATA_OUT,#83H
         CALL SEND
         MOV DATA_OUT,B
         CALL SEND
         MOV DATA_OUT,#84H
         CALL SEND
         MOV DATA_OUT,A
         CALL SEND
;--------------------------------
         MOV A,R4       ;显示秒
         MOV B,#10
         DIV AB
         MOV DATA_OUT,#80H
         CALL SEND
         MOV DATA_OUT,B
         CALL SEND
         MOV DATA_OUT,#81H
         CALL SEND
         MOV DATA_OUT,A
         CALL SEND
         SJMP CFSM
;*****************************
;       中断服务程序
;*****************************
  INT:   DJNZ R3,OUT
         MOV R3,#20
         INC R4            ;秒+1
         CJNE R4,#60,OUT   ;如果还没到60秒,返回
         MOV R4,#00H
         INC R5            ;到60秒。秒就清零,分+1
         CJNE R5,#60,OUT   ;如果还没到60分,返回
         MOV R5,#00H
         INC R6            ;到60分。分就清零,时+1
         CJNE R6,#24,OUT   ;如果还没到24时,返回
         MOV R6,#00H       ;到24时。时就清零
     OUT:MOV TH1,#03CH
         MOV TL1,#0B0H
         RETI

;*******************************************************

;从HD7279接受一个字节,高位在前
;*******************************************************


  RECEIVE: MOV R7,#8
           SETB DAT  ;P1口为输入状态,要至1
           CLR CS
       D2: CALL DELAY100
           SETB CLK
           CALL DELAY100
           MOV A,DATA_IN
           RL A
           MOV DATA_IN,A
           MOV C,DAT
           MOV DATA_IN.0,C


           CLR CLK
           DJNZ R7,D2
           CLR DAT        ;接收完毕
           CALL DELAY100
           RET

;*******************************
;发送1个字节到HD7279,高位在前
;*******************************
   SEND: PUSH A
         MOV R7,#8;设定位计数器
         CLR CS
         CALL DELAY100
      D1:MOV C,DATA_OUT.7
         MOV DAT,C
         SETB CLK
         MOV A,DATA_OUT
         RL A
         MOV DATA_OUT,A
         CALL DELAY100
         CLR CLK
         DJNZ R7,D1
         CLR DAT        ;发送完毕
         POP A
         RET
;***************************
;       延时子程序
;***************************
DELAY25:MOV R1,#250
     D0:MOV R2,#100
        DJNZ R2,$
        DJNZ R1,D0
        RET
;---------------------
DELAY100:MOV R0,#50
         DJNZ R0,$
         RET

⌨️ 快捷键说明

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