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

📄 ktwd.asm

📁 单片机课题空调温度控制单片机课题空调温度控制
💻 ASM
字号:
CS0809 EQU  0a000h              ;0809地址
SMBUF  EQU 36H
SDBUF  EQU 30H
LEDBUF EQU 40H                  ;显示缓冲
OUTBIT EQU 09002h
OUTSEG EQU 09004h              ;段控制口
IN EQU    09001h                ;键盘输入
OUT EQU   09002h
KZZ EQU   08003h               ;8255控制字地址
PA EQU    08000h               ;8255PA口地址
ORG 0000H
LJMP START
ORG 0013H
LJMP DAS
ORG 0100H
DELAY:
      MOV R7,#0
DLOOP:DJNZ R7,DLOOP
      DJNZ R6,DLOOP
      RET
SETDA:MOV IE,#84H         ;设中断
      SETB IT1
      MOV DPTR,#CS0809
      MOVX @DPTR,A
      MOV R6,#2
      CALL DELAY
 DAS:MOV DPTR,#CS0809     ;启动0809
     MOVx A,@DPTR
     MOV SMBUF,A

      mov r5,#0
      mov b,#24
      mov a,smbuf
      mul ab
      push b
      mov r3,b
      mov r4,a
loopb:add a,#01h
      jc sb1
      ajmp b1
  sb1:inc r5
   b1:djnz r3,loopb
      mov 49h,r5
      mov r4,a
      mov a,r5
      jz b2
loopd:inc r4
      djnz r5,loopd
   b2:mov a,r4
      mov b,#255
      div ab
      pop b
      add a,b
      add a,49h
      mov smbuf,a

     CLR EX1
     RET
 DIVAB:MOV B,#100         ;二进制转换为十进制
       DIV AB
       MOV @R0,A
       MOV A,B
       INC R0
       MOV B,#10
       DIV AB
       MOV @R0,A
       MOV A,B
       INC R0
       MOV @R0,A
       RET

  LEDMAP:DB 3FH,06H,5BH,4FH,66H
         DB 6DH,7DH,07H,7FH,6FH
  DISPLAYLED:MOV R1,#LEDBUF
             MOV R0,#LEDBUF
             MOV R3,#6
             MOV DPTR,#LEDMAP
         SS1:MOV A,@R0
             MOVC A,@A+DPTR
             MOV @R1,A
             INC R0
             INC R1
             DJNZ R3,SS1
             MOV R0,#LEDBUF          ;存放要显示的数
             MOV R3,#6
             MOV R2,#00100000B
             MOV DPTR,#OUTBIT
             MOV A,#0
             MOVX @DPTR,A
        LOOP:MOV A,@R0
             MOV DPTR,#OUTSEG
             MOVX @DPTR,A
             MOV DPTR,#OUTBIT
             MOV A,R2
             MOVX @DPTR,A
             MOV R6,#1
             CALL DELAY
             MOV A,R2
             RR A
             MOV R2,A
             INC R0
             DJNZ R3,LOOP
             RET
;**************************键盘扫描子程序 **************************
     TESTKEY:MOV DPTR,#OUT
             MOV A,#0
             MOVX @DPTR,A
             MOV DPTR,#IN
             MOVX A,@DPTR
             CPL A
             ANL A,#0FH
             RET
    KEYTABLE:DB 05H,05H,01H,01H          ;键码定义
             DB 02H,02H,01H,01H
             DB 04H,04H,01H,01H
             DB 00H,08H,01H,01H
             DB 00H,08H,01H,01H
             DB 00H,08H,01H,01H
    GETKEY:
           MOV R1,#00100000B
           MOV R2,#6
     KLOOP:MOV A,R1                       ;找出键所在列
           mov dptr,#out
           CPL A
           MOVX @DPTR,A
           CPL A
           RR A
           MOV R1,A                        ;下一行
           MOV DPTR,#IN
           MOVX A,@DPTR
           CPL A
           ANL A,#0FH
           JNZ GOON1                       ;该列有键入
           DJNZ R2,KLOOP
     GOON1:MOV R1,A                        ;求键值
           MOV A,R2
           DEC A
           RL A
           RL A
           MOV R2,A
           MOV A,R1
           MOV R1,#4
     LOOPC:RRC A
           JC EXIT
           INC R2
           DJNZ R1,LOOPC
      EXIT:MOV A,R2                    ;取键码
           MOV DPTR,#KEYTABLE
           MOVC A,@A+DPTR
           MOV R2,A
WAITELEASE:MOV DPTR,#OUT               ;等键释放
           CLR A
           MOVX @DPTR,A
           MOV R6,#10
           CALL DELAY
           CALL TESTKEY
           JNZ WAITELEASE
           MOV A,R2
           RET
;**************************主程序****************************************
     START:MOV SP,#60H                  ;堆栈地址设定
           MOV DPTR,#KZZ
           MOV A,#80H                    ;初始化8255
           MOVX @DPTR,A
           MOV SMBUF,#0
           MOV SDBUF,#0
     LOOPA:MOV A,SDBUF
           MOV R0,#LEDBUF
           CALL DIVAB                     ;设定值转换
           MOV R0,#LEDBUF+3
           MOV A,SMBUF
           CALL DIVAB                      ;扫描转换
           CALL DISPLAYLED                 ;显示
           CALL SETDA
           MOV A,SMBUF
           MOV R3,SDBUF
           ADD A,#02H
           SUBB A,R3
           JC A2
           MOV A,SDBUF
           MOV R3,SMBUF
           ADD A,#02H
           SUBB A,R3
           JC A1
           AJMP A6
        A1:MOV DPTR,#PA           ;红灯亮
           MOV A,#02H
           MOVX @DPTR,A
           AJMP A3
        A2:MOV DPTR,#PA            ;绿灯亮
           MOV A,#01H
           MOVX @DPTR,A
           AJMP A3
        A6:MOV DPTR,#PA
           MOV A,#00H
           MOVX @DPTR,A
        A3:
           CALL TESTKEY
           JZ LOOPA               ;没有,转到LOOPA
           CALL GETKEY            ;有按键,得键码
           MOV R1,#SDBUF
           CJNE A,#01H,A4
           INC @R1
           AJMP A5
        A4:DEC @R1
        A5:mov a,@r1
           subb a,#24
           JNC  A9
           AJMP A7
        A9:mov @r1,#24
        A7:LJMP LOOPA
           END

⌨️ 快捷键说明

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