×
单片机 > 单片机程序设计 > 详情

FS2410开发板的测试键盘的ADS汇编代码

发布时间:2020-06-20 发布时间:
|
;汇编指令实验
;键盘扫描
;    4X4 矩阵键盘
;四个输入引脚:    EINT0 -----( GPF0  )----INPUT
;                EINT2 -----( GPF2  )----INPUT
;                EINT11-----( GPG3  )----INPUT
;                EINT19-----( GPG11 )----INPUT
;                
;四个输出引脚:    KEYSCAN0---( GPE11 )----OUTPUT
;                KEYSCAN1---( GPG6  )----OUTPUT
;                KEYSCAN2---( GPE13 )----OUTPUT
;                KEYSCAN3---( GPG2  )----OUTPUT

;GPG2,6 GPE11,13 行控制线
;GPG11,3 GPF2,0  列控制线
;GPF4,5,6,7 控制led以二进制码显示键盘值


rGPECON equ   0x56000040    ;Port E control
rGPEDAT equ   0x56000044    ;Port E data
rGPEUP  equ   0x56000048    ;Pull-up control E
           
rGPFCON equ   0x56000050    ;Port F control
rGPFDAT equ   0x56000054    ;Port F data
rGPFUP  equ   0x56000058    ;Pull-up control F
           
rGPGCON equ   0x56000060    ;Port G control
rGPGDAT equ   0x56000064    ;Port G data
rGPGUP  equ   0x56000068    ;Pull-up control G


    area    keydat,data,readonly
;第4行键值转换数据
keytrans dcb 13,0,0,14,0,0,15,0,0,16,0,0
;键值对应LED显示的二进制数据
keyledcode    dcb 0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0,0xb0,0xc0,0xd0,0xe0,0xf0,0,0,0,0,0,0,0

    area    kayasm,code,readonly
    code32
    entry

start
    mov sp,#0x0c700000
    
    ;以下代码初始化GPIO
    ldr r1,=0x5500    ;GPF4,5,6,7控制LED,设置为输出口,其他设置为输入
    ldr r0,=rGPFCON
    str r1,[r0]
    
    ;禁止内部上拉电阻
    ldr r1,=0xff
    ldr r0,=rGPFUP
    str r1,[r0]    
    
    ;输出1,使LED全灭
    mov r1,#0xffffffff
    ldr r0,=rGPFDAT
    str r1,[r0]
    
    ;GPG6,2输出
    ldr r0,=rGPGCON
    ldr r1,[r0]
    ldr r3,=0x2020
    bic r1,r1,r3
    ldr r3,=0x1010
    orr r1,r1,r3
    str r1,[r0]
    ;GPG6,2输出0
    ldr r0,=rGPGDAT
    mov r1,#0
    str r1,[r0]
    
    ;GPE11,13输出
    ldr r0,=rGPECON
    ldr r1,[r0]
    bic r1,r1,#0x08800000
    orr r1,r1,#0x04400000
    str r1,[r0]
    ldr r0,=rGPEDAT
    mov r1,#0
    str r1,[r0]
    
            
    ;GPG3,11输入
    ldr r0,=rGPGCON
    ldr r1,[r0]
    ldr r3,=0x00c000c0
    bic r1,r1,r3
    str r1,[r0]

    ;GPF2,0输入
    ldr r0,=rGPFCON
    ldr r1,[r0]
    bic r1,r1,#0x33
    str r1,[r0]
    
    
    ;以下代码扫描键盘
    ;逐行输出0,GPG6,2   GPE11,13
    ;读取列值GPF2,0    GPG3,11
keyscan
    ;第1行,GPG2=1,GPG6=1,GPE11=0,GPE13=1
    ldr r0,=rGPGDAT
    ldr r1,[r0]
    orr r1,r1,#0x44    ;GPG2=GPG6=1
    str r1,[r0]
    
    ldr r0,=rGPEDAT
    ldr r1,[r0]
    orr r1,r1,#0x2000    ;GPE13=1
    bic r1,r1,#0x800    ;GPE11=0
    str r1,[r0]
    
    mov r0,#1
    bl genkey
    cmp r0,#0
    bne havekey

    ;第2行,GPG2=1,GPG6=0,GPE11=GPE13=1
    ldr r0,=rGPGDAT
    ldr r1,[r0]
    bic r1,r1,#0x40    ;GPG6=0
    orr r1,r1,#4    ;GPG2=1
    str r1,[r0]
    
    ldr r0,=rGPEDAT
    ldr r1,[r0]
    orr r1,r1,#0x2800    ;GPE11,13=1
    str r1,[r0]

    mov r0,#2
    bl genkey
    cmp r0,#0
    bne havekey
    
    ;第3行,GPG2=1,GPG6=1,GPE11=1,GPE13=0
    ldr r0,=rGPGDAT
    ldr r1,[r0]
    orr r1,r1,#0x44    ;GPG2=GPG6=1
    str r1,[r0]
    
    ldr r0,=rGPEDAT
    ldr r1,[r0]
    orr r1,r1,#0x800    ;GPE11=1
    bic r1,r1,#0x2000    ;GPE13=0
    str r1,[r0]
    
    mov r0,#3
    bl genkey
    cmp r0,#0
    bne havekey
    
    ;第4行,GPG2=0,GPG6=1,GPE11=GPE13=1
    ldr r0,=rGPGDAT
    ldr r1,[r0]
    orr r1,r1,#0x40    ;GPG6=1
    bic r1,r1,#4    ;GPG2=0
    str r1,[r0]
    
    ldr r0,=rGPEDAT
    ldr r1,[r0]
    orr r1,r1,#0x2800    ;GPE11,13=1
    str r1,[r0]
    
    mov r0,#4
    bl genkey
    cmp r0,#0
    bne havekey
    b keyscan

havekey
    ldr r1,=rGPFDAT
    mov r4,#0xff
    str r4,[r1]
    ldr r2,=keyledcode
    ldrb r3,[r2,r0]
    mvn r2,r3
    str r2,[r1]
    
    b keyscan
    
    export genkey
    ;通过读取列值获取键值子程序
    ;入口参数: r0, 第几行1~4
    ;出口参数: r0, 所得到的键号(1~16), 0表示没有键按下
    ;读取列值,读取GPG11,GPG3 GPF2,GPF0
    ;内部使用r4-r7
genkey
    ;暂存行值
    mov r7,r0
    ;读取列值
    ldr r4,=rGPGDAT
    ldr r5,[r4]
    mov r6,r5
    ands r6,r6,#0x800    ;GPG11
    moveq r0,#0
    beq keycac
    mov r6,r5
    ands r6,r6,#8        ;GPG3
    moveq r0,#3
    beq keycac
    ldr r4,=rGPFDAT
    ldr r5,[r4]
    mov r6,r5
    ands r6,r6,#4        ;GPF2
    moveq r0,#6
    beq keycac
    mov r6,r5
    ands r6,r6,#1        ;GPF0
    moveq r0,#9
    beq keycac
    mov r0,#0
    b keyret
keycac
    cmp r7,#4
    blo simplecac
    ldr r4,=keytrans
    ldrb r0,[r4,r0]
    b keyret
simplecac    
    add r0,r0,r7
keyret
    mov pc,lr

    end
关键字:FS2410  测试键盘  ADS汇编代码 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430F5529 上手小例程2