機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
EM78系列單片機--HD7279讀出當(dāng)前的按鍵代碼
EM78系列單片機--HD7279讀出當(dāng)前的按鍵代碼
 更新時間:2008-7-26 20:10:04  點擊數(shù):2
【字體: 字體顏色
讀鍵盤數(shù)據(jù)指令
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
1
0
1
0
1
 
d7
d6
d5
d4
d3
d2
d1
d0
該指令從HD7279讀出當(dāng)前的按鍵代碼。與其它指令不同,此命令的前一個字節(jié)00010101B為微控制器傳送到HD7279的指令,而后一個字節(jié)d0- d7則為HD7279返回的按鍵代碼,其范圍是0-3FH(無鍵按下時為0xFF),各鍵鍵盤代碼的定義,請參閱圖2。
此指令的前半段,HD7279的DATA引腳處于高阻輸入狀態(tài),以接受來自微處理器的指令;在指令的后半段,DATA引腳從輸入狀態(tài)轉(zhuǎn)為輸出狀態(tài),輸出鍵盤代碼的值。故微處理器連接到DATA引腳的I/O口應(yīng)有一從輸出態(tài)到輸入態(tài)的轉(zhuǎn)換過程,詳情請參閱本文‘串行接口’一節(jié)的內(nèi)容。
當(dāng)HD7279檢測到有效的按鍵時,KEY引腳從高電平變?yōu)榈碗娖剑⒁恢北3值桨存I結(jié)束。在此期間,如果HD7279接收到‘讀鍵盤數(shù)據(jù)指令’,則輸出當(dāng)前按鍵的鍵盤代碼;如果在收到‘讀鍵盤指令’時沒有有效按鍵,HD7279將輸出FFH (11111111B)。
串行接口
HD7279采用串行方式與微處理器通訊, 串行數(shù)據(jù)從DATA引腳送入芯片,并由CLK端同步。當(dāng)片選信號變?yōu)榈碗娖胶,DATA引腳上的數(shù)據(jù)在CLK引腳的上升沿被寫入HD7279的緩沖寄存器。
HD7279的指令結(jié)構(gòu)有三種類型:1、不帶數(shù)據(jù)的純指令,指令的寬度為8個BIT,即微處理器需發(fā)送8個CLK脈沖。2、帶有數(shù)據(jù)的指令,寬度為16個BIT,即微處理器需發(fā)送16個CLK脈沖。3、讀取鍵盤數(shù)據(jù)指令,寬度為16個BIT,前8個為微處理器發(fā)送到HD7279的指令,后8個BIT為HD7279返回的鍵盤代碼。執(zhí)行此指令時,HD7279的DATA端在第9個CLK脈沖的上升沿變?yōu)檩敵鰻顟B(tài),并與第16個脈沖的下降沿恢復(fù)為輸入狀態(tài),等待接收下一個指令。
串行接口的時序如下圖:
1、純指令
2、帶數(shù)據(jù)指令
                8位指令(高位在前)                 8位數(shù)據(jù)(高位在前)
 
3、讀鍵盤指令
                     讀鍵盤指令(8位,高位在前)     HD7279輸出的鍵盤代碼(8位,高位在前)
 
2、EM78P156 接口程序
    硬件連接如圖,EM78P156所用時鐘頻率4MHz, 選4個時鐘周期為一個指令周期,
;轉(zhuǎn)移指令用2個指令周期。程序使用ASM456編譯程序編譯通過。程序中延時時間
;以HD7279A外接R=1.5K, C=15pF為準(zhǔn),如使用不同的CPU時鐘頻率或R/C參數(shù),
;請注意調(diào)整延時時間。
圖 5.14 EM78P156與HD7279A 的硬件連接
 

;**********************************
; 寄存器定義
;**********************************
STATUS        ==   0X03
P5       ==   5
C        ==   0
 
BIT_COUNT ==   0X10
DATA_OUT ==   0X11
DATA_IN       ==   0X12
TEN      ==   0X13
TIMER         ==   0X14
TIMER1        ==   0X15
 
;**********************************
; I/O口定義
;**********************************
CS       ==   0    ;CS連接于EM78P156的P50
CLK      ==   1    ;CLK連接于EM78P156的P51
DAT      ==   2    ;DAT連接于EM78P156的P52
KEY      ==   3    ;KEY連接于EM78P156的P53

 
        ORG 0x00
        JMP START
       
        ORG 0X10
;*******************************************
; 延時子程序
;*******************************************
LONG_DELAY: MOV A,@16       ;設(shè)定延時時間為約50uS
        MOV TIMER,A
DELAY_LOOP: DJZ TIMER
        JMP DELAY_LOOP
        RET
SHORT_DELAY:    MOV A,@3        ;設(shè)定延時時間為約9uS
        MOV TIMER,A
SHORT_LP:   DJZ TIMER
        JMP SHORT_LP
        RET
;*******************************************
; 發(fā)送1個字節(jié)到HD7279,高位在前
;*******************************************
SEND:       MOV DATA_OUT,A  ;待發(fā)送數(shù)據(jù)存入DATA_OUT
        MOV A,@8
        MOV BIT_COUNT,A ;設(shè)定位記數(shù)器=8
        BC  P5,CS       ;設(shè)CS為低電平
        CALL    LONG_DELAY  ;長延時
SEND_LOOP:  BC  STATUS,C
        RLC DATA_OUT    ;輸出1位
        BC  P5,DAT
        JBC STATUS,C
        BS  P5,DAT
        BS  P5,CLK      ;設(shè)CLK為高電平
        CALL    SHORT_DELAY ;短延時
        BC  P5,CLK      ;設(shè)CLK為低電平
        CALL    SHORT_DELAY
        DJZ BIT_COUNT   ;檢查是否8位均發(fā)送完畢
        JMP SEND_LOOP   ;未發(fā)送完,發(fā)送下一位
        BC  P5,DAT
        RET         ;發(fā)送完畢,返回
;*******************************************
; 從HD7279接收一個字節(jié),高位在前
;*******************************************
RECEIVE:    MOV A,@8
        MOV BIT_COUNT,A ;設(shè)定位記數(shù)器=8
        MOV A,@0B11111100   ;設(shè)P5.2(DATA)口為輸入狀態(tài)
        IOW P5
        CALL    LONG_DELAY  ;長延時
RECEIVE_LOOP:   BS  P5,CLK      ;置CLK為高電平
        CALL    SHORT_DELAY ;短延時
        BS  STATUS,C
        JBS P5,DAT
        BC  STATUS,C
        RLC DATA_IN     ;讀取一位數(shù)據(jù)
        BC  P5,CLK      ;置CLK為低電平
        CALL    SHORT_DELAY
        DJZ BIT_COUNT   ;是否已接收8位數(shù)據(jù)
        JMP RECEIVE_LOOP
        MOV A,@0B11111000   ;重新設(shè)P52(DATA)口為輸出態(tài)
        IOW P5
        RET
;*******************************************       
; 初始化
;*******************************************
START:      MOV A,@0B11111000   ;I/O口初始化
        IOW P5
        MOV A,@0B11111001
        MOV P5,A
        MOV A,@0X19     ;延時約25MS
        MOV TIMER,A
START_DELAY:    MOV A,@0XFF
        MOV TIMER1,A
START_DELAY1:   DJZ TIMER1
        JMP START_DELAY1
        DJZ TIMER
        JMP START_DELAY
        MOV A,@0B10100100   ;發(fā)復(fù)位(清除)指令
        CALL    SEND
        BS  P5,CS       ;恢復(fù)CS為高電平
;*******************************************
; 主程序
;*******************************************
MAIN:       JBC P5,KEY      ;檢測是否有鍵按下
        JMP MAIN
        MOV A,@0B00010101   ;有鍵按下,發(fā)送讀鍵盤指令
        CALL    SEND        ;發(fā)送讀鍵盤指令
        CALL    RECEIVE     ;從HD7279A讀鍵盤代碼
        BS  P5,CS       ;設(shè)CS為高電平
;*******************************************
; 16進(jìn)制——BCD碼轉(zhuǎn)換
;*******************************************
        CLR TEN
GET_DEC     MOV A,@10
        SUB A,DATA_IN
        JBS STATUS,C
        JMP OVER
        MOV DATA_IN,A
        INC TEN
        JMP GET_DEC
;*******************************************
;發(fā)送按鍵的BCD碼到HD7279A
;*******************************************
;發(fā)2次左移指令,使當(dāng)前顯示內(nèi)容左移,留出空
;位供顯示新數(shù)據(jù)
OVER        MOV A,@0B10100001   ;左移指令
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,@0B10100001   ;左移指令
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,@0B10000001   ;下載數(shù)據(jù)且譯碼指令(第2位)
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,TEN
        CALL    SEND                ;發(fā)送十位數(shù)字到HD7279A
        MOV A,@0B10000000   ;下載數(shù)據(jù)且譯碼指令(第1位)
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,DATA_IN
        CALL    SEND                ;發(fā)送個位數(shù)字到HD7279A
        BS  P5,CS
WAIT        JBS P5,KEY          ;等待按鍵放開
        JMP WAIT
        JMP MAIN
 
;EOP
  • 上一篇: EM78系列單片機--HD7279串行接口8位LED數(shù)碼管及64鍵鍵盤智能控制芯片設(shè)計
  • 下一篇: EM78系列單片機--無符號的BCD加法
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1