線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:951
推到 Plurk!
推到 Facebook!

8051 address程式問題

答題得分者是:src
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-11 17:23:39 IP:202.75.xxx.xxx 未訂閱
這是keypad連續進來的4個數值放在4個byte    KEY_DETECT:
        MOVC    A,@A DPTR
              MOV        @R0,A
              INC        R0    但是多之後多出來的數值會放在第4個byte以後
第一個按的是1...第2個是2..第3個是3..第4個是4
結果:
20H -> 1
21H -> 2
22H -> 3
23H -> 4    假如之後按第5個是5..第6個是6
結果:
20H -> 1
21H -> 2
22H -> 3
23H -> 4
24H -> 5
25H -> 6    如何把之後多出來的數值移前一個位
假如之後按第5個是5..第6個是6
結果:
20H -> 3
21H -> 4
22H -> 5
23H -> 6    THX~
這是小弟的程式,但不能做到我想要的    LOOP:
         MOV    KEY_ADDRESS.#4    KEY_DETECT:
        MOVC    A,@A DPTR
              MOV        @R0,A
              INC        R0
              DJNZ        KEY_ADDRESS,LOOP                  ACALL        SHIFT_KEY_ADDRESS        SHIFT_KEY_ADDRESS:
              MOV        KEY_BUFFER1,KEY_BUFFER2
              MOV        KEY_BUFFER2,KEY_BUFFER3
        MOV        KEY_BUFFER3,KEY_BUFFER4
        RET
P.S: po程式碼請做好縮排. 下次將直接砍. 發表人 - ㊣ 於 2005/11/11 21:58:07
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-11 20:25:57 IP:220.139.xxx.xxx 未訂閱
;============================
KEY_N0                EQU         30h
KEY_BUFFER1        EQU         31h
KEY_BUFFER2        EQU         32h
KEY_BUFFER3        EQU         33h
KEY_BUFFER4        EQU         34h
KEY_BUFFER5        EQU         35h
;============================
        ORG        0H
        JMP        START
        ORG        30H
START:
        MOV        SP,#60H
        MOV         KEY_N0,#4
        MOV         R0,#KEY_BUFFER1
        MOV         DPTR,#KEY_DATA
;============================
;KEY_DETECT_LOOP1: 
;先讀取4組按鍵值分別存放在
;KEY_BUFFER1
;KEY_BUFFER2
;KEY_BUFFER3
;KEY_BUFFER4
;============================
KEY_DETECT_LOOP1:
        MOV        A,#0
        MOVC         A,@A DPTR
        MOV         @R0,A
        INC         R0
        INC         DPTR
        DJNZ         KEY_N0,KEY_DETECT_LOOP1
;============================
;KEY_DETECT_LOOP2: 
;接著讀取下一組按鍵值存放在
;KEY_BUFFER5
;============================
KEY_DETECT_LOOP2:
        MOV        A,#0
        MOVC         A,@A DPTR
        MOV         KEY_BUFFER5,A
        INC         DPTR
        CALL         SHIFT_KEY_ADDRESS
        JMP        KEY_DETECT_LOOP2
;============================
;SHIFT_KEY_ADDRESS:
;KEY_BUFFER1=KEY_BUFFER2
;KEY_BUFFER2=KEY_BUFFER3
;KEY_BUFFER3=KEY_BUFFER4
;KEY_BUFFER4=KEY_BUFFER5
;============================
SHIFT_KEY_ADDRESS:
        MOV         KEY_N0,#4
        MOV        R1,#KEY_BUFFER1
        MOV        R0,#KEY_BUFFER2
SHIFT_LOOP:
        MOV         A,@R0
        MOV         @R1,A
        INC        R1
        INC        R0
        DJNZ         KEY_N0,SHIFT_LOOP
        RET
;============================
;KEY_DATA 模擬按鍵讀取的內容
;============================
KEY_DATA:
        DB        1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
;============================
        END 
系統時間:2024-06-29 19:00:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!