求数电电子时钟设计 proteus图 要有时和分的加减

5、汇编语言程序

ORG  0000H

LJMP  START

ORG  000BH

LJMP  INIT0

       START: MOV  R0,#70H ;主程序开始

MOV  R7,#0CH

         INIT: MOV  @R0,#00H

INC  R0

DJN Z  R7,INIT

MOV  72H,#10 ;对连字符进行装值

MOV  75H,#10

MOV  TMOD,#01H ;选择定时器/计数器T0的方式1

MOV  TL0,#0B0H ;对低位赋初值

MOV  TH0,#03CH ;高位赋初值

SETB  EA

SETB  ET0

SETB  TR0

     START1: LCALL  SCAN

LCALL  KEYSCAN

SJMP  START1

      DL1MS: MOV  R6,#14H ;延时1子程序

         DL1: MOV  R7,#19H

         DL2: DJNZ  R7,DL2

DJNZ  R6,DL1

RET

     DL20MS: ACALL  SCAN ;延时20ms子程序

ACALL  SCAN

ACALL  SCAN

RET          ;数码管显示程序开始

       SCAN: MOV  A,78H

MOV  B,#0AH

DIV  AB   ;时间秒的十位送给A,时间秒的个位送B

MOV  71H,A ;时间秒要显示的十位

MOV  70H,B ;时间秒要显示的个位

MOV  A,79H

MOV  B,#0AH

DIV  AB ;时间分的十位送给A,时间分的个位送B

MOV  74H,A ;时间分要显示的十位送地址

MOV  73H,B ;时间分要显示的个位送地址

MOV  A,7AH

MOV  B,#0AH

DIV  AB ;时间时的十位送给A,时间时的个位送B

MOV  77H,A ;时间时显示的十位送地址

MOV  76H,B ;时间时要显示的个位送地址

MOV  R1,#70H

MOV  R5,#01H

MOV  R3,#09H

      SCAN1: MOV  A,R5 ;数码管的显示程序

MOV  P2,A

MOV  A,@R1

MOV  DPTR,#TAB

MOVC  A,@A+DPTR ;对字段表取值显示

MOV  P0,A

LCALL  DL1MS

INC R1

MOV  A,R5

RL  A

MOV  R5,A

DJNZ  R3,SCAN1

MOV  P2,#0FFH

MOV  P0,#0FFH

RET  ;"0~9"和"-"的字段表

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

      ;定时/计数器T0中断程序

      INIT0: PUSH  ACC

PUSH  PSW

CLR  ET0

CLR  TR0

MOV  TL0,#0B0H

MOV  TH0,#03CH

SETB  TR0

INC  7BH

MOV  A,7BH

CJNE  A,#14H,OUTT0 ;50ms是否到20次,没有到就继续执行50ms的延时

MOV 7BH,#00

INC  78H

MOV  A,78H

CJNE  A,#3CH,OUTT0 ;一秒的延时是否计到60次,没有就继续执行 

MOV  78H,#00

INC  79H

MOV A,79H

CJNE  A,#3CH,OUTT0

MOV  79H,#00

INC  7AH

MOV  A,7AH

CJNE A,#18H,OUTT0 ;60分钟的延时是否计到24次,没有就 

                         继续执行程序

MOV  7AH,#00

         OUTT0:SETB ET0 ;启动定时器T0

POP  PSW

POP  ACC

RETI

;按键处理程序

     KEYSCAN:CLR  EA

JNB  P1.0,KEYSCAN0 ;P1.0有按键按下则跳转到子程序

JNB  P1.1,KEYSCAN1 ;P1.1有按键按下则跳转到子程序

JNB  P1.2,KEYSCAN2 ;P1.2有按键按下则跳转到子程序

      KEYOUT: SETB  EA

RET

     KEYSCAN0:LCALL  DL20MS ;20ms的延时消抖

JB  P1.0,KEYOUT

       WAIT0: JNB  P1.0,WAIT0 ;判断按键是否松手, 松手就往下执行程序

INC  7CH

MOV  A,7CH

CLR  ET0

CLR  TR0

CJNE  A,#03H,KEYOUT ;按下第一次和第二次对时、分选定

MOV  7CH,#00 ;按下第三次时就启动计时

SETB  ET0

SETB  TR0

SJMP  KEYOUT

      KEYSCAN1:LCALL  DL20MS ;按键加一的程序

JB  P1.1,KEYOUT

       WAIT1: JNB  P1.1,WAIT1

MOV  A,7CH

CJNE  A,#02H,KSCAN11 ;如果功能键按下则对时加一调整

INC  79H

CJNE  A,#3CH,KEYOUT ;如果加到60则清零

MOV  79H,#00

SJMP  KEYOUT

        KSCAN11:INC  7AH ;如果功能键是按下第

                    二次则对分进行加一调整

MOV  A,7AH

CJNE  A,#18H,KEYOUT

MOV  7AH,#00

SJMP  KEYOUT

      KEYSCAN2:LCALL  DL20MS ;延时消抖程序

JB  P1.2,KEYOUT

       WAIT2: JNB  P1.2,WAIT2 ;判断是否放开按键

MOV  A,7CH

CJNE  A,#02H,KSCAN21 ;如果功能键是按下第一次对时进行减一

DEC  79H

MOV  A,79H

CJNE  A,#0FFH,KEYOUT

MOV  79H,#3BH

SJMP  KEYOUT

       KSCAN21:DEC  7AH ;如果功能键是按下第二次则对分进行减一

CJNE  A,#0FFH,KEYOUT

MOV  7AH,#17H

SJMP  KEYOUT

END

追问

是用数电的 不是用单片机控制

温馨提示:答案为网友推荐,仅供参考
相似回答