发新帖我要提问
12
返回列表
打印

学习51:求一个4x4键盘LED显示键值的汇编程序

[复制链接]
楼主: kuernikewa
手机看帖
扫描二维码
随时随地手机跟帖
21
kuernikewa|  楼主 | 2008-9-5 20:54 | 只看该作者 回帖奖励 |倒序浏览

RE

使用特权

评论回复
22
kuernikewa|  楼主 | 2008-9-5 21:31 | 只看该作者

re

谢谢emailli,您的话很有道理,思路我已经有了好几种,但是就是在执行中出问题:
下面是我用中断扫描处理的思路,麻烦您帮我指点。

使用特权

评论回复
23
krstc| | 2008-9-5 22:11 | 只看该作者

支持楼上的看法。。。

代码一般很少会有人帮你看的。应为实在多和烦。。。。
所以一般坛子上的高手都是给你个思路。具体的要自己好好研究的说。。。

使用特权

评论回复
24
ttlasong| | 2008-9-5 22:53 | 只看该作者

终于看完了

使用特权

评论回复
25
kuernikewa|  楼主 | 2008-9-5 22:56 | 只看该作者

re

谢谢emailli ,您的话很有道理,我找到问题所在了

使用特权

评论回复
26
kuernikewa|  楼主 | 2008-9-6 18:08 | 只看该作者

re

使用特权

评论回复
27
kiki988| | 2008-9-7 18:52 | 只看该作者

发一个程序以供参考

    KEYOUT    EQU    0F000H
    KEYIN    EQU    0E000H
    BUFF0    EQU    7EH
    BUFF1    EQU    7FH
    P0RTW1    EQU    0A000H
    PORTW2    EQU    0B000H
    PORTD    EQU    9000H
    ORG    0000H
    AJMP    START
    ORG    0100H
START:    MOV    SP,    #60H
    MOV    DPTR,    #0C000H
    MOV    A,    #0
    MOVX    @DPTR,    A
    MOV    BUFF0,    #11H
    MOV    BUFF1,    #12H
L0:    LCALL    KEY1
    MOV    BUFF0,    A
    MOV    BUFF1,    A
    LCALL    DIR
    AJMP    L0
;/*.................................*/
KS1:    MOV    DPTR,    #KEYOUT
    MOV    A,    #00H
    MOVX    @DPTR,    A
    MOV    DPTR,    #KEYIN
    MOVX    A,    @DPTR
    CPL    A
    ANL    A,    #0FH
    RET
;/*.........................*/
KEY1:    ACALL    KS1
    JNZ    LK2
    ACALL    DIR
    AJMP    KEY1

LK2:    MOV    R2,    #0FEH
    MOV    R4,    #0
LK4:    MOV    DPTR,    #KEYOUT
    MOV    A,    R2
    MOVX    @DPTR,    A
    MOV    DPTR,    #KEYIN
    MOVX    A,    @DPTR
    JB    ACC.0,    LONE
    MOV    A,    #0
    AJMP    LKP
LONE:    JB    ACC.1,    LTWO
    MOV    A,    #1
    AJMP    LKP
LTWO:    JB    ACC.2,    LTHREE
    MOV    A,    #2
    AJMP    LKP
LTHREE:    JB    ACC.3,    NEXT
    MOV    A,    #3
LKP:    ADD    A,    R4
    PUSH    ACC
LK3:    ACALL    DIR
    ACALL    KS1
    JNZ    LK3
    POP    ACC
    RET
    
NEXT:    INC    R4
    INC    R4
    INC    R4
    INC    R4
    MOV    A,    R2
    JNB    ACC.3,    KEND
    RL    A
    MOV    R2 ,    A
    AJMP    LK4
KEND:    AJMP    KEY1    
;/*...........数码管显示程序.....................*/
DIR:    MOV    R0,    #BUFF0
    MOV    A,    @R0
    MOV    DPTR,    #DAT
    MOVC    A,    @A+DPTR
    MOV    DPTR,    #PORTD
    MOVX    @DPTR,    A
    MOV    A,    #0
    MOV    DPTR,    #P0RTW1
    MOVX    @DPTR,    A
    ACALL    DL2MS
    MOV    A,    #1
    MOV    DPTR,    #P0RTW1
    MOVX    @DPTR,    A
    MOV    R1,    #BUFF1
    MOV    A,    @R1
    MOV    DPTR,    #DAT
    MOVC    A,    @A+DPTR

    MOV    DPTR,    #PORTD
    MOVX    @DPTR,    A

    MOV    A,    #0
    MOV    DPTR,    #PORTW2
    MOVX    @DPTR,    A
    ACALL    DL2MS
    MOV    A,    #1
    MOV    DPTR,    #PORTW2
    MOVX    @DPTR,    A
    RET

    
DL1MS:    MOV    R6,    #230
DL:    NOP
    NOP
    DJNZ    R6,    DL
    DJNZ    R5,    DL1MS
    RET

DL2MS:    MOV    R5,    #30    
    ACALL   DL1MS
    RET
    


    

DAT:    DB 0C0H, 0F9H ,0A4H ,0B0H ,99H ,92H ,82H ,0F8H ,80H ,90H
    DB 88H, 83H ,0C6H ,0A1H ,86H,8EH  
    DB 7EH,89H ,0CH                           //数码管显示取数
    
    END    

此程序中的接口和楼主的不同,思路可供参考!

使用特权

评论回复
28
hotpower| | 2008-9-7 19:05 | 只看该作者

这种电路用双向双次键盘扫描技术最方便

使用特权

评论回复
29
hotpower| | 2008-9-8 00:26 | 只看该作者

51汇编

使用特权

评论回复
30
kuernikewa|  楼主 | 2008-9-10 09:35 | 只看该作者

re

学习了,谢谢各位

使用特权

评论回复
31
a200612504| | 2008-9-10 13:07 | 只看该作者

仿真一下啊

   你仿真看一下问题出在那里啊,你这个程序好像开头就没写好,
MOV P1,#0FH      //置行为0,列为1 
MOV A,P1      //读P1口 
CJNE A,#0FH,KEY1
AJMP KEY
先判断是否有按键按下才能继续下一步
MOV A,P1
在这里加上一句
JZ   KEY
看一下行不

使用特权

评论回复
32
kuernikewa|  楼主 | 2008-9-10 20:08 | 只看该作者

re

程序已经调好了,谢谢

使用特权

评论回复
33
1248| | 2008-9-10 22:58 | 只看该作者

用C写

我不擅长汇编,用C就比较容易。

使用特权

评论回复
34
csl84| | 2008-9-13 12:38 | 只看该作者

数码管的1和2脚是片选脚不是VDD,GND

数码管的1和2脚是片选脚不是VDD,GND

使用特权

评论回复
35
huangqi412| | 2008-9-13 15:10 | 只看该作者

这个东西别用仿真的,比如实际中的抖动,仿真做不到

使用特权

评论回复
36
michael_23| | 2008-9-13 16:41 | 只看该作者

你在其他程序有试过数码管么

你在其他程序有试过数码管么?先确保你的数码关能显示

使用特权

评论回复
37
michael_23| | 2008-9-13 16:50 | 只看该作者

给你个程序参考

led0            equ             30h
led1            equ             32h
led2            equ             33h

sda             bit             p0.2
scl             bit             p0.3

org             0000h
ajmp            main
org             0100h

main:
                mov led1,#00h
                mov led0,#-1
                mov led2,#-1
                mov 34h,#17


                mov p2,#0f0h
                mov a,p2
                anl a,#0f0h
                cjne a,#0f0h,zei
                ajmp main

zei:            mov p2,#0f0h
                mov a,p2
                mov p2,#0fh
                mov r0,p2
                orl a,r0
                acall delay
                acall delay
                acall delay
                mov p3,a
                mov 31h,a



                mov dptr,#tab1
zei1:           inc led0
                inc led1
                inc led2
                mov a,led2
                subb a,34h
                jnc  zei2
                mov a,led0
                movc a,@a+dptr
                cjne a,31h,zei1
                acall display
                ajmp main
zei2:           mov led1,#00h
                ajmp main
                ret


display:
                mov dptr,#tab
                mov a,#0ffh
                acall shift

                mov a,led1
                movc a,@a+dptr
                acall shift

                mov a,#0ffh

                acall shift

                acall shift

                acall shift

                acall shift

                acall shift

                acall shift
                ret

shift:          push a
                mov r2,#8
                clr c
                clr scl
loop1:          rlc a
                mov sda,c
                setb scl
                clr scl
                djnz r2,loop1
                pop a
                ret
delay:          mov r7,#0ffh
loop2:          mov r6,#0ffh
                djnz r6,$
                djnz r7,loop2
                ret
tab:            DB    11h,11H,0D7H,32H,92H,0D4H,98H,18H,0D3H
                DB    10H,90H,50H,1CH,39H,16H,38H,78H,0FFH
tab1:           db    0e7h,0d7h,0b7h,77h
                db    0ebh,0dbh,0bbh,7bh
                db    0edh,0ddh,0bdh,7dh
                db    0eeh,0deh,0beh,7eh
                end



这是人家的程序 你自己看看看思路吧  

使用特权

评论回复
38
michael_23| | 2008-9-13 17:28 | 只看该作者

人家的程序 你参考

led0            equ             30h
led1            equ             32h
led2            equ             33h

sda             bit             p0.2
scl             bit             p0.3

org             0000h
ajmp            main
org             0100h

main:
                mov led1,#00h
                mov led0,#-1
                mov led2,#-1
                mov 34h,#17


                mov p2,#0f0h
                mov a,p2
                anl a,#0f0h
                cjne a,#0f0h,zei
                ajmp main

zei:            mov p2,#0f0h
                mov a,p2
                mov p2,#0fh
                mov r0,p2
                orl a,r0
                acall delay
                acall delay
                acall delay
                mov p3,a
                mov 31h,a



                mov dptr,#tab1
zei1:           inc led0
                inc led1
                inc led2
                mov a,led2
                subb a,34h
                jnc  zei2
                mov a,led0
                movc a,@a+dptr
                cjne a,31h,zei1
                acall display
                ajmp main
zei2:           mov led1,#00h
                ajmp main
                ret


display:
                mov dptr,#tab
                mov a,#0ffh
                acall shift

                mov a,led1
                movc a,@a+dptr
                acall shift

                mov a,#0ffh

                acall shift

                acall shift

                acall shift

                acall shift

                acall shift

                acall shift
                ret

shift:          push a
                mov r2,#8
                clr c
                clr scl
loop1:          rlc a
                mov sda,c
                setb scl
                clr scl
                djnz r2,loop1
                pop a
                ret
delay:          mov r7,#0ffh
loop2:          mov r6,#0ffh
                djnz r6,$
                djnz r7,loop2
                ret
tab:            DB    11h,11H,0D7H,32H,92H,0D4H,98H,18H,0D3H
                DB    10H,90H,50H,1CH,39H,16H,38H,78H,0FFH
tab1:           db    0e7h,0d7h,0b7h,77h
                db    0ebh,0dbh,0bbh,7bh
                db    0edh,0ddh,0bdh,7dh
                db    0eeh,0deh,0beh,7eh
                end


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则