全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1145
推到 Plurk!
推到 Facebook!

EM78447的程式編輯問題~可麻煩前輩可幫幫小弟指點迷津

尚未結案
p76g89power
一般會員


發表:2
回覆:0
積分:0
註冊:2008-07-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-29 16:54:41 IP:140.111.xxx.xxx 訂閱
前輩大大你們好:
小弟最近剛接觸EM78447的單晶片,在設計程式上有個地方不知該如何放入達成以下的動作,可請前輩大大給小弟一點指點~
使用環境 : 小弟使用EM78447晶片的PORT7接4x4鍵盤,PORT5接一科74LS244晶片再接到兩組共8顆共陰七段顯示器的A~G角,
而PORT6是接到兩組共8顆共陰七段顯示器的各COM角
迷津問題: 1.小弟想按下按鍵1,8顆七段顯示器可以依序出現0~F

以下是小弟程式碼,請大大替小弟指點迷津~~謝謝!!
;----------------------------------------------------------------------------
STATUS == 0X03 ;
PORT5 == 0X05 ;
PORT6 == 0X06 ;
PORT7 == 0X07 ;
PTR == 0X0A ;
COUNT == 0X0B ;
TEST == 0X0C ;
BUF == 0X1C ;
;----------------------------------------------------------------------------
ORG 0x0
START:
MOV A,@0x11 ;┐
IOW 0xE ;┘禁能 WDT
MOV A,@0X0 ;┐
IOW PORT5 ;├設定 PORT5 與 PORT6 為輸出模式
IOW PORT6 ;┘
MOV A,@0XF0 ;┐
IOW PORT7 ;┘設定 PORT7.0~3 為輸出模式 PORT7.4~7 為輸入
MOV A,@0X40 ;┐
MOV PORT5,A ;┘經由 PORT5 送出可點亮 'g' 節段的控制碼 40H
AGAIN:
MOV A,@0 ;┐
MOV PTR,A ;┘令位址指標 PTR = 0
MOV A,@0XFE ;┐
MOV TEST,A ;┘設定測試信號 TEST = FEH
CALL SHOW_KEY ;呼叫可將按鍵碼轉成七段顯示碼的副程式
MOV A,@4 ;┐
MOV PTR,A ;┘令位址指標 PTR = 4
MOV A,@0XFD ;┐
MOV TEST,A ;┘設定測試信號 TEST = FDH
CALL SHOW_KEY1 ;呼叫可將按鍵碼轉成七段顯示碼的副程式
MOV A,@8 ;┐
MOV PTR,A ;┘令位址指標 PTR = 8
MOV A,@0XFB ;┐
MOV TEST,A ;┘設定測試信號 TEST = FBH
CALL SHOW_KEY2 ;呼叫可將按鍵碼轉成七段顯示碼的副程式
MOV A,@12 ;┐
MOV PTR,A ;┘令位址指標 PTR = 12
MOV A,@0XF7 ;┐
MOV TEST,A ;┘設定測試信號 TEST = F7H
CALL SHOW_KEY3 ;呼叫可將按鍵碼轉成七段顯示碼的副程式
JMP AGAIN
;------------------------------------------------------------------------------------------------------------------
SHOW_KEY:
MOV A,TEST ;┐
MOV PORT7,A ;┘經由 PORT7 送出測試信號 TEST
MOV A,PORT7 ;經由 PORT7 讀取按鍵碼
MOV BUF,A ;將按鍵碼暫存於 BUF 中
MOV A,PTR ;┐
CALL KEY_TBL ;┘從 KEY_TBL 中抓取按鍵碼並存放於 A 中
SUB BUF,A ;然後與 BUF 中的按鍵碼做一比較
JBS STATUS,2 ;┐若狀態暫存器中的 Z=1,則跳至下一行指令
RET ;┘反之,則跳至 NEXT 執行

;------------------------------------------------------------------------------------------------------------------
SHOW_KEY1:
MOV A,TEST ;┐
MOV PORT7,A ;┘經由 PORT7 送出測試信號 TEST
MOV A,PORT7 ;經由 PORT7 讀取按鍵碼
MOV BUF,A ;將按鍵碼暫存於 BUF 中
MOV A,PTR ;┐
CALL KEY_TBL ;┘從 KEY_TBL 中抓取按鍵碼並存放於 A 中
SUB BUF,A ;然後與 BUF 中的按鍵碼做一比較
JBS STATUS,2 ;┐若狀態暫存器中的 Z=1,則跳至下一行指令
RET ;┘反之,則跳至 NEXT 執行

;------------------------------------------------------------------------------------------------------------------
SHOW_KEY2:
MOV A,TEST ;┐
MOV PORT7,A ;┘經由 PORT7 送出測試信號 TEST
MOV A,PORT7 ;經由 PORT7 讀取按鍵碼
MOV BUF,A ;將按鍵碼暫存於 BUF 中
MOV A,PTR ;┐
CALL KEY_TBL ;┘從 KEY_TBL 中抓取按鍵碼並存放於 A 中
SUB BUF,A ;然後與 BUF 中的按鍵碼做一比較
JBS STATUS,2 ;┐若狀態暫存器中的 Z=1,則跳至下一行指令
RET ;┘反之,則跳至 NEXT 執行

;-----------------------------------------------------------------------------------------------------------------
SHOW_KEY3:
MOV A,TEST ;┐
MOV PORT7,A ;┘經由 PORT7 送出測試信號 TEST
MOV A,PORT7 ;經由 PORT7 讀取按鍵碼
MOV BUF,A ;將按鍵碼暫存於 BUF 中
MOV A,PTR ;┐
CALL KEY_TBL ;┘從 KEY_TBL 中抓取按鍵碼並存放於 A 中
SUB BUF,A ;然後與 BUF 中的按鍵碼做一比較
JBS STATUS,2 ;┐若狀態暫存器中的 Z=1,則跳至下一行指令
RET ;┘反之,則跳至 NEXT 執行
;----------------------------------------------------------------------------
KEY_TBL:
TBL
RETL 0XEE ;按鍵 0 的按鍵碼
RETL 0XDE ;按鍵 1 的按鍵碼
RETL 0XBE ;按鍵 2 的按鍵碼
RETL 0X7E ;按鍵 3 的按鍵碼
RETL 0XED ;按鍵 4 的按鍵碼
RETL 0XDD ;按鍵 5 的按鍵碼
RETL 0XBD ;按鍵 6 的按鍵碼
RETL 0X7D ;按鍵 7 的按鍵碼
RETL 0XEB ;按鍵 8 的按鍵碼
RETL 0XDB ;按鍵 9 的按鍵碼
RETL 0XBB ;按鍵 A 的按鍵碼
RETL 0X7B ;按鍵 B 的按鍵碼
RETL 0XE7 ;按鍵 C 的按鍵碼
RETL 0XD7 ;按鍵 D 的按鍵碼
RETL 0XB7 ;按鍵 E 的按鍵碼
RETL 0X77 ;按鍵 F 的按鍵碼
;----------------------------------------------------------------------------
SEG7_TBL:
TBL
RETL 0X3F ;字型 0 的七段顯示碼
RETL 0X66 ;字型 1
RETL 0X7F ;字型 2
RETL 0X39 ;字型 3
RETL 0X06 ;字型 4
RETL 0X6D ;字型 5
RETL 0X6F ;字型 6
RETL 0X5E ;字型 7
RETL 0X5B ;字型 8
RETL 0X7D ;字型 9
RETL 0X77 ;字型 A
RETL 0X79 ;字型 b
RETL 0X4F ;字型 C
RETL 0X07 ;字型 d
RETL 0X7C ;字型 E
RETL 0X71 ;字型 F
;----------------------------------------------------------------------------
ORG 0X0FFF ;ICE447 RESET 之後的起始位址
JMP START ;跳至 START 之處執行指令


編輯記錄
taishyang 重新編輯於 2008-12-29 17:23:38, 註解 歸類成[問題]‧
系統時間:2024-04-28 19:19:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!