按键计数器

按键计数器
下面介绍一种通过MSP430F149单片机使用IARMSP430软件编程,使用汇编语言编程,记录K1,K2,K3按键点击次数,并通过LCD1602液晶屏显示出来的程序。开始点击K1键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,K1接在P1.0 K2接在P1.1, K3接在P1.2 , K4接在P1.3,K5接在P1.4 ,K6接在P1.5 , K7接在P1.6, K8接在P1.7.

点击K1键,多少次,点击K5键LCD就会显示K1键按下去的次数,和最后一次按键的时间

开始点击K2键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,

点击K2键,多少次,点击K6键LCD就会显示K1键按下去的次数,和最后一次按键的时间

开始点击K3键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,

点击K3键,多少次,点击K7键LCD就会显示K1键按下去的次数,和最后一次按键的时间

点击K8键LCD显示当前时间

点击 K4键计数器复位

程序如下

; K1=P1.4 K2=P1.5 K3=P1.6 K4=P1.7

;* 1602LCD显示秒表 *

;* K3 — 控制按键 *

;* 第一次按下时,开始计时,第二次按下时,暂停计时。 *

;* 第三次按下时,累计计时,第四次按下时,暂停计时。 *

;* K4 — 清零按键: *

;* 在任何状态下,按一下K4,均可清零。 *

;* *

// 开始点击K1键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,

//点击K1键,多少次,点击K5键LCD就会显示K1键按下去的次数,和最后一次按键的时间

// 开始点击K2键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,

//点击K2键,多少次,点击K6键LCD就会显示K1键按下去的次数,和最后一次按键的时间

// 开始点击K3键10次,直到LCD显示AD COUNT:0,计数器开始记录K1键按下去的次数,

//点击K3键,多少次,点击K7键LCD就会显示K1键按下去的次数,和最后一次按键的时间

//点击K8键LCD显示当前时间

//点击 K4键计数器复位

;---------------------------------------

;晶振 11.0592M

;定时器0,方式1

;计时中断程序每隔10ms中断一次

;---------------------------------------

// $INCLUDE(anjian.ASM)

// EXTRN CODE (ANJIAN)

//PUBLIC ANJIAN

TLOW EQU 0CH ;定时器初值

      THIGH  EQU  0DCH

//   TLOW   EQU  02H     ;定时器初值

      //THIGH  EQU  009H

NIAN1 EQU 26H

NIAN EQU 27H

YUE EQU 28H

      RI1    EQU  29H

HOUR EQU 30H

      MIN    EQU  31H

      SEC    EQU  32H

      SEC0   EQU  33H     ;10ms计数值

      KEY_S  EQU  34H     ;为键当前的端口状况

      KEY_V  EQU  35H     ;为键上次的端口状况

      X      EQU  36H     ;LCD 地址变量

      KEY_C  EQU  37H     ;键计数单元

KEY_SA EQU 38H ;为键当前的端口状况

      KEY_VA  EQU  39H     ;为键上次的端口状况

      KEY_CA  EQU  40H     ;键计数单元

KEY_SB EQU 41H ;为键当前的端口状况

      KEY_VB  EQU  42H     ;为键上次的端口状况

      KEY_CB  EQU  43H     ;键计数单元

KEY_SC EQU 44H ;为键当前的端口状况

      KEY_VC  EQU  45H     ;为键上次的端口状况

      KEY_CC  EQU  46H     ;键计数单元

KEY_SD EQU 47H ;为键当前的端口状况

      KEY_VD  EQU  48H     ;为键上次的端口状况

      KEY_CD  EQU  49H     ;键计数单元

KEY_SE EQU 50H ;为键当前的端口状况

      KEY_VE  EQU  51H     ;为键上次的端口状况

      KEY_CE  EQU  52H     ;键计数单元

KEY_SF EQU 53H ;为键当前的端口状况

      KEY_VF  EQU  54H     ;为键上次的端口状况

      KEY_CF  EQU  55H     ;键计数单元

DATA1 EQU 56H ;为键当前的端口状况

      DATA2  EQU  57H     ;为键上次的端口状况

DATA3 EQU 58H ; ;键计数单元

DATA4 EQU 59H ;为键当前的端口状况

      K1     EQU  P3.0

      K2     EQU  P3.1

      K3     EQU  P3.2

      K4     EQU  P3.3

K5 EQU P3.4

      K6     EQU  P3.5

      K7     EQU  P3.6

      K8     EQU  P3.7

     // BEEP  EQU  P3.7

    //  RS    EQU  P2.0     ;LCD控制端口定义

    //  RW    EQU  P2.1

    //  EN    EQU  P2.2

BEEP EQU P2.3

      RS    EQU  P1.0     ;LCD控制端口定义

      RW    EQU  P1.1

      EN    EQU  P2.5

;----------------------------------------------------

      ORG   0000H

      JMP  START

      ORG  0BH

      JMP  T0_INT

;----------------------------------------------------

START: MOV SP,#60H

      CLR  EN

      CALL  SET_LCD

      CALL  INIT            ;初始化变量

     // MOV  KEY_V,#01H

           MOV  KEY_V,#07H

MOV KEY_VA,#08H

MOV KEY_VB,#09H

// MOV KEY_VC,#02H

CALL INIT_TIMER ;初始化定时器

       SETB  TR0            ;启动中断

// CALL MENU

MAIN: //MOV SP,#60H

     // CLR  EN

      CALL  SET_LCD

     // CALL  INIT            ;初始化变量

     // MOV  KEY_V,#01H

     // MOV  KEY_VC,#02H

// CALL INIT_TIMER ;初始化定时器

       //SETB  TR0            ;启动中断

LOOP: // CALL CONV ;时间计数处理

      CALL LOOP1

      CALL LOOP2

CALL LOOP3

      CALL LOOP4

CALL LOOP5

// CALL LOOP40

CALL SKEY ;判是否有键按下

      JZ  LOOPA              ;无键按下转LOOP

    //  CALL   CONV

      CALL  SKEY

      JZ  LOOP

      MOV  KEY_V,KEY_S      ;交换数据      

CALL P_KEY

      JMP  LOOP

LOOPA: //CALL CONV ;时间计数处理

      CALL LOOP1

      //CALL  SKEY            ;判是否有键按下

      CALL  SKEY1            ;判是否有键按下

// CALL SKEY2 ;判是否有键按下

JZ LOOPB ;无键按下转LOOP

     // CALL   CONV

      //CALL  SKEY

CALL SKEY1

// CALL SKEY2

      JZ  LOOPA

      MOV  KEY_VA,KEY_SA      ;交换数据

      CALL  P_KEYA

      JMP  LOOPA

LOOPB: // CALL CONV ;时间计数处理

      CALL LOOP1

      //CALL  SKEY            ;判是否有键按下

      //CALL  SKEY1            ;判是否有键按下

CALL SKEY2 ;判是否有键按下

JZ LOOP ;无键按下转LOOP

    //  CALL   CONV

      //CALL  SKEY

//CALL SKEY1

CALL SKEY2

      JZ  LOOPB

      MOV  KEY_VB,KEY_SB      ;交换数据

      CALL  P_KEYB

      JMP  LOOPB

;-----------------------------------------------------

LOOP1: JB K4,LOOP6 ;判清零键是否按下

     // CALL  BZ

      //JMP  START

JMP MAIN

// CALL SET_LCD

LOOP2: JB K5,LOOP6 ;判清零键是否按下

    //  MOV  A,KEY_VC

    //  JB  ACC.0,P_KEY3

    //  INC  KEY_CC

      //   CJNE  A,#01H,P_KEY

// MOV DPTR,#MADJ ;显示执行信息

//CALL P_KEY

MOV A,KEY_C ;K3键是否第一次按下?

      CALL   P_KEY

// CJNE A,#01H,P_KEY1

    //CJNE  A,#01H,P_KEY1

CJNE A,#05H,KEY_C

MOV DPTR,#MADJ5 ;显示执行信息

      //CALL   CONV        

// CALL DE

// DELAY:

MOV A,#1 ;

      CALL   LCD_PRINT

    //  JMP  START

LOOP3: JB K6,LOOP6 ;判清零键是否按下

    //  MOV  A,KEY_VC

    //  JB  ACC.0,P_KEY3

    //  INC  KEY_CC

      //   CJNE  A,#01H,P_KEY

// MOV DPTR,#MADJ ;显示执行信息

//CALL P_KEY

//IF (DATA1 =1)

MOV A,KEY_CA ;K3键是否第一次按下?

      CALL   P_KEYA

// CALL DELAY1

// CJNE A,#01H,P_KEY1

//    CJNE  A,#01H,P_KEYA1

//CJNE A,#01H,KEY_C

//CJNE A,#01H, KEY_C

// CJNE A,#01H,KEY_VA

// CJNE A,#01H,KEY_SA

CJNE A,#05H,KEY_CA

MOV DPTR,#MADJA5 ;显示执行信息

// CALL DE

// DELAY:

MOV A,#1 ;

      CALL   LCD_PRINT

// ENDIF

// RET

    //  JMP  START

LOOP4: JB K7,LOOP6 ;判清零键是否按下

    //  MOV  A,KEY_VC

    //  JB  ACC.0,P_KEY3

    //  INC  KEY_CC

      //   CJNE  A,#01H,P_KEY

// MOV DPTR,#MADJ ;显示执行信息

//CALL P_KEY

//IF (DATA2 =1)

MOV A,KEY_CB ;K3键是否第一次按下?

      CALL   P_KEYB

// CJNE A,#01H,P_KEYB

// MOV DATA1,KEY_CB

    //CJNE  A,#01H, DATA1

// CJNE A,#01H,KEY_VB

// CJNE A,#01H,KEY_SB

CJNE A,#05H,KEY_CB

//CALL DELAY1

MOV DPTR,#MADJB5 ;显示执行信息

//CJNE A,#01H,KEY_V

// CJNE A,#02H, DATA1

//CJNE A,#01H,KEY_C

// MOV DPTR,#MADJB ;显示执行信息

// CALL DE

// DELAY:

MOV A,#1 ;

      CALL   LCD_PRINT

// ENDIF

// RET

    //  JMP  START

// LOOP40:

// JB K7,LOOP5 ;判清零键是否按下

    //  MOV  A,KEY_VC

    //  JB  ACC.0,P_KEY3

    //  INC  KEY_CC

      //   CJNE  A,#01H,P_KEY

// MOV DPTR,#MADJ ;显示执行信息

//CALL P_KEY

// MOV A,KEY_CB ;K3键是否第一次按下?

   //   CALL   P_KEYB

// CJNE A,#01H,P_KEYB

// MOV DATA1,KEY_CB

    //CJNE  A,#01H, DATA1

// CJNE A,#02H,KEY_C

// CJNE A,#02H, DATA1

//CJNE A,#01H,KEY_C

// MOV DPTR,#MADJB1 ;显示执行信息

// CALL DE

// DELAY:

// MOV A,#1 ;

    //  CALL   LCD_PRINT

    //  JMP  START

LOOP5: JB K8,LOOP6 ;判清零键是否按下

CALL CONV

LOOP6: RET

;-----------------------------------------------------

P_KEY: ;

      MOV  A,KEY_V

      JB  ACC.0,P_KEY3

      INC  KEY_C

MOV A,KEY_C ;K3键是否第一次按下?

      CJNE  A,#0001H,P_KEY1

      MOV    DPTR,#MADJ0    ;显示执行信息

MOV A,#1 ;

      CALL   LCD_PRINT

CALL CONV

      //SETB  TR0            ;启动中断

      RET

P_KEY1: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0002H,P_KEY2

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY2: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0003H,P_KEY3

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY3: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0004H,P_KEY4

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY4: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0005H,P_KEY5

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY5: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0006H,P_KEY6

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY6: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0007H,P_KEY7

      MOV   DPTR,#MADJ      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY7: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0008H,P_KEY8

      MOV   DPTR,#MADJ0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY8: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0009H,P_KEY9

      MOV   DPTR,#MADJ1      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY9: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#000AH,P_KEY10

      MOV   DPTR,#MADJ2      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY10: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0BH,P_KEY11

      MOV   DPTR,#MADJ3      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY11: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#000CH,P_KEY12

      MOV   DPTR,#MADJ4      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY12: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#000DH,P_KEY13

      MOV   DPTR,#MADJ5     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY13: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#000EH,P_KEY14

      MOV   DPTR,#MADJ6     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY14: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#000FH,P_KEY15

      MOV   DPTR,#MADJ7      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY15: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0010H,P_KEY16

      MOV   DPTR,#MADJ8     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY16: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0011H,P_KEY17

      MOV   DPTR,#MADJ9      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY17: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0012H,P_KEY18

      MOV   DPTR,#MADJ10      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY18: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0013H,P_KEY19

      MOV   DPTR,#MADJ11      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY19: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0014H,P_KEY20

      MOV   DPTR,#MADJ12      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY20: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0015H,P_KEY21

      MOV   DPTR,#MADJ13     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY21: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0016H,P_KEY22

      MOV   DPTR,#MADJ14     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY22: ;K3键是否第二次按下?

      MOV   A,KEY_C

      CJNE  A,#0017H,P_KEY23

      MOV   DPTR,#MADJ15      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEY23: ;K3键是否第三次按下?

      MOV   A,KEY_C

      CJNE  A,#0018H,P_KEY24

      MOV   DPTR,#MADJ16     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEY24: ;K3键是否第四次按下?

      MOV   A,KEY_C

      CJNE  A,#0019H,P_KEY25

      MOV   DPTR,#MADJ17     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEY25: RET

P_KEYA: ;

      MOV  A,KEY_VA

      JB  ACC.0,P_KEYA3

      INC  KEY_CA

MOV A,KEY_CA ;K3键是否第一次按下?

      CJNE  A,#0001H,P_KEYA1

      MOV    DPTR,#MADJA0    ;显示执行信息

MOV A,#1 ;

      CALL   LCD_PRINT

CALL CONV

      //SETB  TR0            ;启动中断

      // MOV DATA1,#1

RET

P_KEYA1: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#0002H,P_KEYA2

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA2: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0003H,P_KEYA3

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA3: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#04H,P_KEYA4

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA4: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#05H,P_KEYA5

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA5: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0006H,P_KEYA6

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA6: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#07H,P_KEYA7

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA7: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#08H,P_KEYA8

      MOV   DPTR,#MADJA      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA8: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0009H,P_KEYA9

      MOV   DPTR,#MADJA0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA9: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#000AH,P_KEYA10

      MOV   DPTR,#MADJA1      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA10: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#000BH,P_KEYA11

      MOV   DPTR,#MADJA2      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA11: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#000CH,P_KEYA12

      MOV   DPTR,#MADJA3      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA12: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#000DH,P_KEYA13

      MOV   DPTR,#MADJA4      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA13: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#000EH,P_KEYA14

      MOV   DPTR,#MADJA5      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA14: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#000FH,P_KEYA15

      MOV   DPTR,#MADJA6      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA15: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#0010H,P_KEYA16

      MOV   DPTR,#MADJA7      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA16: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#0011H,P_KEYA17

      MOV   DPTR,#MADJA8      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA17: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0012H,P_KEYA18

      MOV   DPTR,#MADJA9      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA18: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#0013H,P_KEYA19

      MOV   DPTR,#MADJA10      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA19: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#0014H,P_KEYA20

      MOV   DPTR,#MADJA11      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA20: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0015H,P_KEYA21

      MOV   DPTR,#MADJA12      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA21: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#0016H,P_KEYA22

      MOV   DPTR,#MADJA13      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA22: ;K3键是否第二次按下?

      MOV   A,KEY_CA

      CJNE  A,#0017H,P_KEYA23

      MOV   DPTR,#MADJA14      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYA23: ;K3键是否第三次按下?

      MOV   A,KEY_CA

      CJNE  A,#0018H,P_KEYA24

      MOV   DPTR,#MADJA15      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYA24: ;K3键是否第四次按下?

      MOV   A,KEY_CA

      CJNE  A,#0019H,P_KEYA25

      MOV   DPTR,#MADJA16      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYA25: RET

P_KEYB: ;

      MOV  A,KEY_VB

      JB  ACC.0,P_KEYB3

      INC  KEY_CB

MOV A,KEY_CB ;K3键是否第一次按下?

      CJNE  A,#0001H,P_KEYB1

      MOV    DPTR,#MADJB0    ;显示执行信息

MOV A,#1 ;

      CALL   LCD_PRINT

CALL CONV

      //SETB  TR0            ;启动中断

      // MOV DATA2,#1

RET

P_KEYB1: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#0002H,P_KEYB2

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB2: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#0003H,P_KEYB3

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB3: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0004H,P_KEYB4

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB4: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0005H,P_KEYB5

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB5: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#0006H,P_KEYB6

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB6: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#0007H,P_KEYB7

      MOV   DPTR,#MADJB      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB7: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0008H,P_KEYB8

      MOV   DPTR,#MADJB0      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB8: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0009H,P_KEYB9

      MOV   DPTR,#MADJB1      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB9: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#000AH,P_KEYB10

      MOV   DPTR,#MADJB2     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB10: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#000BH,P_KEYB11

      MOV   DPTR,#MADJB3      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB11: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#000CH,P_KEYB12

      MOV   DPTR,#MADJB4     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB12: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#000DH,P_KEYB13

      MOV   DPTR,#MADJB5      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB13: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#000EH,P_KEYB14

      MOV   DPTR,#MADJB6      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB14: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#000FH,P_KEYB15

      MOV   DPTR,#MADJB7     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB15: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0010H,P_KEYB16

      MOV   DPTR,#MADJB8      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB16: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0011H,P_KEYB17

      MOV   DPTR,#MADJB9     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB17: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#0012H,P_KEYB18

      MOV   DPTR,#MADJB10     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB18: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#0013H,P_KEYB19

      MOV   DPTR,#MADJB11      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB19: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0014H,P_KEYB20

      MOV   DPTR,#MADJB12      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB20: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0015H,P_KEYB21

      MOV   DPTR,#MADJB13      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB21: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#0016H,P_KEYB22

      MOV   DPTR,#MADJB14      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB22: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#0017H,P_KEYB23

      MOV   DPTR,#MADJB15      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB23: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0018H,P_KEYB24

      MOV   DPTR,#MADJB16      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB24: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0019H,P_KEYB25

      MOV   DPTR,#MADJB17      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB25: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#001AH,P_KEYB26

      MOV   DPTR,#MADJB18      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB26: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#001BH,P_KEYB27

      MOV   DPTR,#MADJB19      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB27: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#001CH,P_KEYB28

      MOV   DPTR,#MADJB20      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB28: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#001DH,P_KEYB29

      MOV   DPTR,#MADJB21      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB29: ;K3键是否第二次按下?

      MOV   A,KEY_CB

      CJNE  A,#001EH,P_KEYB30

      MOV   DPTR,#MADJB22      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //CLR   TR0              ;停止中断

      RET

P_KEYB30: ;K3键是否第三次按下?

      MOV   A,KEY_CB

      CJNE  A,#001FH,P_KEYB31

      MOV   DPTR,#MADJB23      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

      //SETB   TR0             ;启动中断

      RET

P_KEYB31: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0020H,P_KEYB32

      MOV   DPTR,#MADJB24      ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB32: ;K3键是否第四次按下?

      MOV   A,KEY_CB

      CJNE  A,#0021H,P_KEYB33

      MOV   DPTR,#MADJB25     ;显示执行信息

      MOV   A,#1

      CALL  LCD_PRINT

CALL CONV

     // CLR   TR0              ;启动中断

P_KEYB33: RET

;-------------------------------------------------------

SKEY:

      CLR  A                ;判是否有键按下子程序

      MOV  KEY_S,A

      MOV  C,K1            

RLC A

      ORL  KEY_S,A

      MOV  A,KEY_S   

      XRL  A,KEY_V          ;有键按下,A 中内容不为零

RET

SKEY1:

      CLR  A                ;判是否有键按下子程序

      MOV  KEY_SA,A

      MOV  C,K2            

RLC A

      ORL  KEY_SA,A

      MOV  A,KEY_SA   

      XRL  A,KEY_VA          ;有键按下,A 中内容不为零

RET

SKEY2:

      CLR  A                ;判是否有键按下子程序

      MOV  KEY_SB,A

      MOV  C,K3            

RLC A

      ORL  KEY_SB,A

      MOV  A,KEY_SB   

      XRL  A,KEY_VB          ;有键按下,A 中内容不为零

RET

;--------------------------------------------------------

LMESS1: DB " ANJIAN JISHUQI ",0 ;LCD 第一行显示消息

LMESS2: DB "TIME ",0 ;LCD 第二行显示消息

;--------------------------------------------------------

INIT: CLR A

    // MOV  KEY_C,A         ;初始化控制变量

     MOV  SEC0,A

   //  MOV  SEC,A

    // MOV  MIN,A

    // MOV  HOUR,A

MOV SEC,#01H //设置初始时间

     MOV  MIN,#10H

     MOV  HOUR, #0BH

MOV RI1,#14H //设置初始时间

     MOV  YUE,#06H

     MOV  NIAN, #14H

     MOV  NIAN1,#14H

MOV KEY_S,A

     MOV  KEY_V,A

     SETB  BEEP

     CLR  TR0

     RET

;------------------------------------------------------------

INIT_TIMER: ;初始化定时器接口

     MOV  TMOD,#01H         ;设置定时器0 工作模式为模式1

     MOV  IE,  #82H         ;启用定时器0 中断产生

     MOV  TL0,#TLOW

     MOV  TH0,#THIGH

     RET

;-------------------------------------------------------------

T0_INT:

     PUSH  ACC           ;定时器0计时中断程序

     MOV  TL0,#TLOW

     MOV  TH0,#THIGH

     INC  SEC0

     MOV  A,SEC0         ;10ms 计数值加1

     //CJNE  A,#100,TT

     CJNE  A,#100,TT

MOV SEC0,#0

INC SEC ;秒加1

     MOV  A,SEC

     CJNE  A,#60,TT

INC MIN ;分加1

     MOV  SEC,#0

     MOV  A,MIN

     CJNE  A,#60,TT

INC HOUR ;时加1

     MOV  MIN,#0

     MOV  A,HOUR

     CJNE  A,#24,TT

INC RI1 ;时加1

     MOV  HOUR,#0

     MOV  A,RI1

     CJNE  A,#31,TT

INC YUE ;时加1

     MOV  RI1,#1

     MOV  A,YUE

     CJNE  A,#13,TT

INC NIAN ;时加1

     MOV  YUE,#1

     MOV  A,NIAN

     CJNE  A,#10,TT

INC NIAN1 ;时加1

     MOV  NIAN,#0

     MOV  A,NIAN1

     CJNE  A,#10,TT

     MOV  SEC0,#0

     MOV  SEC,#0          ;秒、分、时单元清0

     MOV  MIN,#0

     MOV  HOUR,#0

MOV RI1,#0

MOV YUE,#0

MOV NIAN,#0

MOV NIAN1,#0

TT: POP ACC

     RETI

;-------------------------------------------------------

; 在第二行显示数字

;-------------------------------------------------------

SHOW_DIG2: ;在 LCD 的第二行显示数字

      MOV  B,#10         ;设置被除数

      DIV  AB            ;结果A存商数,B存余数

      ADD  A,#30H        ;A为十位数,转换为字符

      PUSH  B            ;B放入堆栈暂存

      MOV  B,X           ;设置 LCD 显示的位置

      CALL  LCDP2        ;由 LCD 显示出来

      POP  B             ;

      MOV  A,B           ;B为个位数

      ADD  A,#30H        ;转换为字符

      INC  X             ;LCD 显示位置加1

      MOV  B,X           ;设置 LCD 显示的位置

      CALL  LCDP2        ;由 LCD 显示出来

      RET

;-------------------------------------------

;转换为 ASCII 码并显示

;-------------------------------------------

CONV:

MOV  A,NIAN1       ;加载小时数据

      MOV  X,#0          ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      //INC  X             ;

     // MOV  A,#'/'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;  

      MOV  A,NIAN       ;加载小时数据

       INC  X           ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      INC  X             ;

      MOV  A,#'/'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;        

MOV A,YUE ;加载小时数据

       INC  X          ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      INC  X             ;

      MOV  A,#'/'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;

MOV A,RI1 ;加载小时数据

      INC  X          ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      INC  X             ;

      MOV  A,#'-'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;

      MOV  A,HOUR        ;加载小时数据

     // MOV  X,#5          ;设置位置

      INC  X             ;设置位置

CALL SHOW_DIG2 ;显示数据

      INC  X             ;

      MOV  A,#':'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;

MOV A,MIN ;加载分钟数据

      INC  X             ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      INC  X             ;

      MOV  A,#':'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;

      MOV  A,SEC         ;加载秒数数据

      INC  X             ;设置位置

      CALL  SHOW_DIG2    ;显示数据

      INC  X             ;

      MOV  A,#':'        ;

      MOV  B,X           ;

      CALL  LCDP2        ;

      MOV  A,SEC0        ;加载秒数数据

      INC  X             ;设置位置

      CALL  SHOW_DIG2

      RET

;---------------------------------------------------------

; LCD CONTROL

;---------------------------------------------------------

SET_LCD: ;对 LCD 做初始化设置及测试

      CLR  EN

      CALL  INIT_LCD     ;初始化 LCD

      MOV  R5,#10

      CALL  DELAY

      MOV  DPTR,#LMESS1  ;指针指到显示消息1

      MOV  A,#1          ;显示在第一行

      CALL  LCD_PRINT

    //  MOV  DPTR,#LMESS2  ;指针指到显示消息2

  //    MOV  A,#2          ;显示在第二行

    //  CALL  LCD_PRINT

      RET

;----------------------------------------------------------

INIT_LCD1: ;LCD 控制指令初始化

      MOV  A,#38H        ;双列显示,字形5*7点阵

      CALL  WCOM         ;

      call  delay1

      MOV  A,#0CH        ;开显示,显示光标,光标不闪烁

      CALL  WCOM         ;

      call  delay1

      MOV  A,#01H        ;清除 LCD 显示屏

      CALL  WCOM         ;

      call  delay1

      RET

;----------------------------------------------------------

ENABLE: ;写指令

      CLR RS              ;RS=L,RW=L,E=高脉冲

      CLR RW              ;D0-D7=指令码

      SETB EN

      ACALL DELAY1          

      CLR EN

      RET

;----------------------------------------------------------

LCD_PRINT: ;在LCD的第一行或第二行显示字符

      CJNE  A,#1,LINE2  ;判断是否为第一行

LINE1: MOV A,#80H ;设置 LCD 的第一行地址

      CALL  WCOM        ;写入命令

      CALL  CLR_LINE    ;清除该行字符数据

      MOV  A,#80H       ;设置 LCD 的第一行地址

      CALL  WCOM        ;写入命令

      JMP  FILL

LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址

      CALL  WCOM        ;写入命令

      CALL  CLR_LINE    ;清除该行字符数据

      MOV  A,#0C0H      ;设置 LCD 的第二行地址

      CALL  WCOM

FILL: CLR A ;填入字符

      MOVC  A,@A+DPTR   ;由消息区取出字符

      CJNE  A,#0,LC1    ;判断是否为结束码

      RET

LC1: CALL WDATA ;写入数据

      INC  DPTR         ;指针加1

      JMP  FILL         ;继续填入字符

      RET

;-------------------------------------------------------

CLR_LINE: ;清除该行 LCD 的字符

      MOV  R0,#24

CL1: MOV A,#’ ’

      CALL  WDATA

      DJNZ  R0,CL1

      RET

;-------------------------------------------------------

DE: MOV R7,#250 ;延时500微秒

      DJNZ  R7,$

      RET

;-------------------------------------------------------

EN1:

      CLR   RW

      SETB  EN         ;短脉冲产生启用信号

      CALL  DE

      CLR  EN

      CALL  DE

      RET

;------------------------------------------------------

INIT_LCD: ;8位I/O控制 LCD 接口初始化

      MOV  P0,#38H     ;双列显示,字形5*7点阵

      call  enable

      call  delay1

      MOV  P0,#38H     ;双列显示,字形5*7点阵

      call  enable

      call  delay1

      MOV  P0,#38H     ;双列显示,字形5*7点阵

      call  enable

      call  delay1

      CALL  INIT_LCD1

      RET

;-----------------------------------------------------

WCOM: ;以8位控制方式将命令写至LCD

      MOV  P0,A       ;写入命令

      call  enable

      RET

;-----------------------------------------------------

WDATA: ;以8位控制方式将数据写至LCD

      MOV  P0,A       ;写入数据

      SETB  RS        ;设置写入数据

      CALL  EN1

      RET

;-----------------------------------------------------

;第二行显示字符

;-----------------------------------------------------

LCDP2: ;在LCD的第二行显示字符

     PUSH  ACC        ;

     MOV  A,B         ;设置显示地址

     ADD  A,#0C0H     ;设置LCD的第二行地址

     CALL  WCOM       ;写入命令

     POP  ACC         ;由堆栈取出A

     CALL  WDATA      ;写入数据

     RET

;----------------------------------------------------

DELAY: ;延时10MS

     MOV  R6,#50

D1: MOV R7,#100

     DJNZ  R7,$

     DJNZ  R6,D1

     DJNZ  R5,DELAY

     RET

;-----------------------------------------------------

DELAY1: ;延时5MS

     MOV  R6,#25

D2: MOV R7,#100

     DJNZ  R7,$

     DJNZ  R6,D2

     RET

;-----------------------------------------------------

BZ: ;蜂鸣器

     MOV  R6,#100

B1: CALL DEX

     CPL  BEEP

     DJNZ  R6,B1

     MOV  R5,#10

     CALL  DELAY

     RET

DEX: MOV R7,#180

DE1: NOP

     DJNZ  R7,DE1

     RET

;-------------------------------------------------

MMENU: DB " AD COUNT: 0 ",0

MADJ: DB " AD COUNT: 0 ",0

MADJ0: DB " AD COUNT: 1 ",0

MADJ1: DB " AD COUNT: 2 ",0

MADJ2: DB " AD COUNT: 3 ",0

MADJ3: DB " AD COUNT: 4 ",0

MADJ4: DB " AD COUNT: 5 ",0

MADJ5: DB " AD COUNT: 6 ",0

MADJ6: DB " AD COUNT: 7 ",0

MADJ7: DB " AD COUNT: 8 ",0

MADJ8: DB " AD COUNT: 9 ",0

MADJ9: DB " AD COUNT: 10 ",0

MADJ10: DB " AD COUNT: 11 ",0

MADJ11: DB " AD COUNT: 12 ",0

MADJ12: DB " AD COUNT: 13 ",0

MADJ13: DB " AD COUNT: 14 ",0

MADJ14: DB " AD COUNT: 15 ",0

MADJ15: DB " AD COUNT: 16 ",0

MADJ16: DB " AD COUNT: 17 ",0

MADJ17: DB " AD COUNT: 18 ",0

MADJ18: DB " AD COUNT: 19 ",0

MADJ19: DB " AD COUNT: 20 ",0

MADJ20: DB " AD COUNT: 21 ",0

MADJ21: DB " AD COUNT: 22 ",0

MADJ22: DB " AD COUNT: 23 ",0

MADJ23: DB " AD COUNT: 24 ",0

MADJ24: DB " AD COUNT: 25 ",0

MADJ25: DB " AD COUNT: 26 ",0

MADJ26: DB " AD COUNT: 27 ",0

MADJ27: DB " AD COUNT: 28 ",0

MADJ28: DB " AD COUNT: 29 ",0

MADJ29: DB " AD COUNT: 30 ",0

MADJA: DB " BD COUNT: 0 ",0

MADJA0: DB " BD COUNT: 1 ",0

MADJA1: DB " BD COUNT: 2 ",0

MADJA2: DB " BD COUNT: 3 ",0

MADJA3: DB " BD COUNT: 4 ",0

MADJA4: DB " BD COUNT: 5 ",0

MADJA5: DB " BD COUNT: 6 ",0

MADJA6: DB " BD COUNT: 7 ",0

MADJA7: DB " BD COUNT: 8 ",0

MADJA8: DB " BD COUNT: 9 ",0

MADJA9: DB " BD COUNT: 10 ",0

MADJA10: DB " BD COUNT: 11 ",0

MADJA11: DB " BD COUNT: 12 ",0

MADJA12: DB " BD COUNT: 13 ",0

MADJA13: DB " BD COUNT: 14 ",0

MADJA14: DB " BD COUNT: 15 ",0

MADJA15: DB " BD COUNT: 16 ",0

MADJA16: DB " BD COUNT: 17 ",0

MADJA17: DB " BD COUNT: 18 ",0

MADJA18: DB " BD COUNT: 19 ",0

MADJA19: DB " BD COUNT: 20 ",0

MADJA20: DB " BD COUNT: 21 ",0

MADJA21: DB " BD COUNT: 22 ",0

MADJA22: DB " BD COUNT: 23 ",0

MADJA23: DB " BD COUNT: 24 ",0

MADJA24: DB " BD COUNT: 25 ",0

MADJA25: DB " BD COUNT: 26 ",0

MADJA26: DB " BD COUNT: 27 ",0

MADJA27: DB " BD COUNT: 28 ",0

MADJA28: DB " BD COUNT: 29 ",0

MADJA29: DB " BD COUNT: 30 ",0

MADJA30: DB " BD COUNT: 31 ",0

MADJA31: DB " BD COUNT: 32 ",0

MADJB: DB " CD COUNT: 0 ",0

MADJB0: DB " CD COUNT: 1 ",0

MADJB1: DB " CD COUNT: 2 ",0

MADJB2: DB " CD COUNT: 3 ",0

MADJB3: DB " CD COUNT: 4 ",0

MADJB4: DB " CD COUNT: 5 ",0

MADJB5: DB " CD COUNT: 6 ",0

MADJB6: DB " CD COUNT: 7 ",0

MADJB7: DB " CD COUNT: 8 ",0

MADJB8: DB " CD COUNT: 9 ",0

MADJB9: DB " CD COUNT: 10 ",0

MADJB10: DB " CD COUNT: 11 ",0

MADJB11: DB " CD COUNT: 12 ",0

MADJB12: DB " CD COUNT: 13 ",0

MADJB13: DB " CD COUNT: 14 ",0

MADJB14: DB " CD COUNT: 15 ",0

MADJB15: DB " CD COUNT: 16 ",0

MADJB16: DB " CD COUNT: 17 ",0

MADJB17: DB " CD COUNT: 18 ",0

MADJB18: DB " CD COUNT: 19 ",0

MADJB19: DB " CD COUNT: 20 ",0

MADJB20: DB " CD COUNT: 21 ",0

MADJB21: DB " CD COUNT: 22 ",0

MADJB22: DB " CD COUNT: 23 ",0

MADJB23: DB " CD COUNT: 24 ",0

MADJB24: DB " CD COUNT: 25 ",0

MADJB25: DB " CD COUNT: 26 ",0

MADJB26: DB " CD COUNT: 27 ",0

MADJB27: DB " CD COUNT: 28 ",0

MADJB28: DB " CD COUNT: 29 ",0

MADJB29: DB " CD COUNT: 30 ",0

MADJB30: DB " CD COUNT: 31 ",0

MADJB31: DB " CD COUNT: 32 ",0

MADJB32: DB " CD COUNT: 33 ",0

MADJB33: DB " CD COUNT: 34 ",0

MADJB34: DB " CD COUNT: 35 ",0

MADJB35: DB " CD COUNT: 36 ",0

MADJB36: DB " CD COUNT: 37 ",0

MADJB37: DB " CD COUNT: 38 ",0

MADJB38: DB " CD COUNT: 39 ",0

;-------------------------------------------------

MENU: ;LCD 显示工作菜单消息

     MOV  DPTR,#MMENU

     MOV  A,#1

     CALL  LCD_PRINT

     RET

;-------------------------------------------------

     END

电路图如下
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值