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

📄 qvtetkyc.asm

📁 一个键盘扫描程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                    org  0000h
                    ljmp gavc
                    org  0100h
                   ADCS1 BIT P3.4        ;TLC0838片选
                   ADCS2 BIT P3.5        ;TLC0832片选
                   ADDI BIT P3.6         ;DI,DO共用一个端口,CLK定义端口P3.7
                   ADDO BIT P3.3
                   ADCLK BIT P3.7
                   CHANNEL0 EQU 70H
                   CHANNEL1 EQU 71H
                   CHANNEL2 EQU 72H
                   CHANNEL3 EQU 73H
                   CHANNEL4 EQU 74H
                   CHANNEL5 EQU 75H
                   CHANNEL6 EQU 76H
                   CHANNEL7 EQU 77H
                   OVERALL  EQU 78H
                   CHANNEL01 EQU 60H
                   CHANNEL11 EQU 61H
                   CHANNEL21 EQU 62H
                   CHANNEL31 EQU 63H
                   CHANNEL41 EQU 64H
                   CHANNEL51 EQU 65H
                   CHANNEL61 EQU 66H
                   CHANNEL71 EQU 67H
                   OVERALL1  EQU 68H  
gavc:     mov  p0,#00h      ;开始
          mov  p2,#00h
          clr  p1.0
          clr  p1.1
          clr  p1.2
          setb p1.3
          setb p1.4
          mov r0,#7fh
igezfwyc: mov  @r0,#00h
          djnz r0,igezfwyc  ;清零          
          clr p1.5

                   MOV 79H,#00H          ;初始化    ;变化标志位装入初值   
                   MOV TMOD,#22H ;设定时器工作方式
                   MOV SCON,#40H
                   MOV TH1,#0e7H ;速度9600
                   MOV PCON,#80H
                   SETB TR1
                   SETB REN ;允许接收
                   
                   CLR ADCS2
                   MOV A,#03H
                   MOV R7,#3
                   ACALL ADC
                   SETB ADCS2
                   MOV OVERALL,A
                   
                   CLR ADCS1
                   MOV A,#03H
                   ACALL SUBPLUS
                   MOV CHANNEL0,A
                   
                   CLR ADCS1
                   MOV A,#07H
                   ACALL SUBPLUS
                   MOV CHANNEL1,A
                   
                   CLR ADCS1
                   MOV A,#13H
                   ACALL SUBPLUS
                   MOV CHANNEL2,A
                   
                   CLR ADCS1
                   MOV A,#17H
                   ACALL SUBPLUS
                   MOV CHANNEL3,A
                   
                   CLR ADCS1
                   MOV A,#0BH
                   ACALL SUBPLUS
                   MOV CHANNEL4,A
                   
                   CLR ADCS1
                   MOV A,#0FH
                   ACALL SUBPLUS
                   MOV CHANNEL5,A
                   
                   CLR ADCS1
                   MOV A,#1BH
                   ACALL SUBPLUS
                   MOV CHANNEL6,A
                   
                   CLR ADCS1
                   MOV A,#1FH
                   ACALL SUBPLUS
                   MOV CHANNEL7,A
                   ACALL CHANGE
ygsvtkyc: lcall qvtetkyc   ;主要程序    
          lcall fuuwtkyc
          jmp   ygsvtkyc
           
qvtetkyc: mov  p0,#0ffh    ;键盘程序
          nop
          nop
          nop
          mov  p2,#00h
          clr p1.0
          clr p1.1
          clr p1.2
          
          mov  a,p0
          xrl a,#0ffh
          
          jz   rvraxfgk
          
          lcall qvwu 
          mov  a,30h
          swap a
          orl  a,31h
          mov  32h,a
          mov  r0,#099h
          lcall thpzjfz1
         
          lcall qvwu
          mov  a,30h
          swap a 
          orl  a,31h
          xrl  a,32h
          jnz rvraxfgk
          lcall qvfpdcge
          jmp lcallps2
rvraxfgk: mov a ,3ch      ;扫描结束
          jz  lcallps2
          mov 34h,#00h
          mov 3ch,#00h
lcallps2: lcall ps2
          ret
qvwu:     mov  p2,#00h    ;键位
          clr p1.0
          clr p1.1
          clr p1.2
          mov  p0,#0ffh
          
          setb  p1.0
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht2tfz
          mov  30h,#01h
          ljmp gqjzrvra
txht2tfz: setb p1.1        ;第二行
          clr  p1.0
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht3tfz
          mov  30h,#02h
          ljmp gqjzrvra
txht3tfz: setb p1.2        ;第三行
          clr  p1.1
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht4tfz
          mov  30h,#03h
          ljmp gqjzrvra
txht4tfz: setb p2.7
          clr  p1.2
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht5tfz
          mov  30h,#04h
          ljmp gqjzrvra          
txht5tfz: setb p2.6
          clr  p2.7
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht6tfz
          mov  30h,#05h
          ljmp gqjzrvra
txht6tfz: setb p2.5
          clr  p2.6
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht7tfz
          mov  30h,#06h
          ljmp gqjzrvra          
txht7tfz: setb p2.4
          clr  p2.5
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht8tfz
          mov  30h,#07h
          ljmp gqjzrvra          
txht8tfz: setb p2.3
          clr  p2.4
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht9tfz
          mov  30h,#08h
          ljmp gqjzrvra          
txht9tfz: setb p2.2
          clr  p2.3
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht10tfz
          mov  30h,#09h
          ljmp gqjzrvra          
txht10tfz:setb p2.1
          clr  p2.2
          mov  a,p0
          xrl  a,#0ffh
          jnz  txht11tfz
          mov  30h,#0ah
          ljmp gqjzrvra          
txht11tfz:setb p2.0
          clr  p2.1
          mov  a,p0
          xrl  a,#0ffh
          jnz  gqjzrvra
          mov  30h,#0bh
gqjzrvra: mov p2,#00h     ;列扫描
          clr p1.0
          clr p1.1
          clr p1.2
          mov  p0,#0ffh
          mov  a,p0
          clr c 
          rrc  a
          jc   txhz2gqjz
          mov 31h,#01h
          ret
txhz2gqjz:rrc a
          jc   txhz3gqjz
          mov 31h,#02h
          ret          
txhz3gqjz:rrc a
          jc   txhz4gqjz
          mov 31h,#03h
          ret         
txhz4gqjz:rrc a
          jc   txhz5gqjz
          mov 31h,#04h
          ret                   
txhz5gqjz:rrc a
          jc   txhz6gqjz
          mov 31h,#05h
          ret                   
txhz6gqjz:rrc a
          jc   txhz7gqjz
          mov 31h,#06h
          ret                   
txhz7gqjz:rrc a
          jc   txhz8gqjz
          mov 31h,#07h
          ret                   
txhz8gqjz:rrc a
          jc   txhz9gqjz
          mov 31h,#08h
txhz9gqjz: ret     
qvfpdcge: mov dptr,#pbxggez;键码表
          mov a,31h
          mov b,#0bh
          dec a
          mul ab
          add a,30h
          mov b,#02h
          mul ab 
          dec a
          dec a


          mov 35h,a
          movc a,@a+dptr
          mov 33h,a
          mov a,35h
          inc a
          movc a,@a+dptr
          mov 34h,a
          mov 30h,#00h
          mov 31h,#00h
          mov 3ch,#0ffh
          ret
ps2:      mov a,3bh
          
          jz  vzcepzdcgz
          
          mov a,34h
          jz  vzonrzdcgz
          ljmp vzudpzxfgk
vzcepzdcgz:mov a,33h        ;发通码 
           jz vzghzgzwhz
           mov 3ah,a
           lcall vzudpztkyc
vzghzgzwhz:mov a ,34h       ;发下一个
           jz vzudpzxfgk
           mov  3bh,a
           lcall vzudpztkyc
           LCALL AAAAA
           
vzudpzxfgk:ret              ;发送结束       
vzonrzdcgz:mov 3ah,#00h     ;发断码
           mov 3bh,#00h
           ret 
           mov a,3ah
           jz vzghzgzwh
           mov 3ah,#00h
           lcall vzudpztkyc
vzghzgzwh: mov a,#0f0h      ;发下一个
           lcall vzudpztkyc
           mov a,3bh
           mov 3bh,#00h
           lcall vzudpztkyc
           jmp vzudpzxfgk

vzudpztkyc:jz  aaaa          ;发送程序
           jmp bbbb
aaaa:      ljmp ujpbabzxfgk  ;单字节发送结束
bbbb:      mov 36h,a
           clr c
           mov r3,#08h
           mov 37h,#0ffh
sucwwuz:   djnz r3,tqwu      ;校验位
           ljmp   sucwxfgk
tqwu:      rrc a
           jnc gizbczrcz
           mov 38h,a
           mov a,37h
           cpl a
           mov 37h,a
           mov a,38h
gizbczrcz: ljmp sucwwuz      ;不取反
sucwxfgk:  mov a,p1          ;校验结束
           anl a,#00001000b
           jz  sucwxfgk
           mov r0,#05h
           lcall thpzjfz
           mov a,p1
           anl a,#00001000b
           jz  sucwxfgk
           mov a,p1
           anl a,#00010000b
           jz  sucwxfgk
           mov r0,#02h
           lcall thpzjfz
           clr  p1.4

⌨️ 快捷键说明

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