.
  • 作者:127.0.0.*
  • 2025/3/25 16:14:59
  • 中国面包师贴吧-楼主(阅:286/回:0)按键计数器

    按键计数器

    下面介绍一种通过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

    电路图如下



    发帖须知:

    1,发帖请遵守《计算机信息网络国际联网安全保护管理办法》、《互联网信息服务管理办法》、 《互联网电子公告服务管理规定》、《维护互联网安全的决定》等法律法规。

    2,请对您的言论负责,我们将保留您的上网记录和发帖信息。

    3,在此发帖表示认同我们的条款,我们有权利对您的言论进行审核、删除或者采取其他在法律、地方法规等条款规定之内的管理操作。
    内容:
    验证: 验证码,看不清楚?请点击刷新验证码 * 匿名发表需要进行验证!
     
           
    中国面包师贴吧-中国烘焙师贴吧- 弹性深蓝色可爱版右侧悬浮qq在线客服代码
    在线咨询 x
    有什么可以帮到您
    点击咨询
    -粤ICP备13040473号-2