小弟最近在做一個課程設計,我想用CH451(DIP28)來掃描4*4的鍵盤,但是用自己寫的代碼CH451始終無法動作
硬件上,我使用的引腳如下: D0至D3,S0至S3,9、10連接在一起后接地,VCC直接接電源(電源已配去耦電容,100+0.1)DOUT至INT0,LOAD至P2.4,DIN至P2.5,DCLK至P2.6
我使用的是匯編語言,代碼如下: 初始化函數(shù): ;1.INIT_CH451:初始化CH451鍵盤掃描模塊 INIT_CH451: PUSH PSW PUSH A ;Step 1:在DIN引腳上產(chǎn)生負脈沖,使能4線串行接口 CLR DIN SETB DCLK SETB LOAD SETB DOUT SETB DIN
;Step 2:設定系統(tǒng)參數(shù):使能鍵盤掃描 ; 低八位操作碼: 0000 0010 B CLR LOAD
MOV CH451_BUFF1,#08H MOV A,#03H
SEND_LOW: RRC A CLR DCLK MOV DIN,C NOP NOP SETB DCLK DJNZ CH451_BUFF1,SEND_LOW
; 高八位操作碼: 0000 0100 B MOV CH451_BUFF1,#04H MOV A,#00000100B
SEND_HIGH: RRC A CLR DCLK MOV DIN,C NOP NOP SETB DCLK DJNZ CH451_BUFF1,SEND_HIGH
; 發(fā)送執(zhí)行指令 SETB LOAD NOP NOP
;使能中斷,并設置為低電平觸發(fā): CLR IT0 CLR IE0 MOV IE,#10000001B
POP A POP PSW RET
2.讀取鍵值的函數(shù): ;2.RD_KEY:中斷產(chǎn)生后,讀取按鍵的值 RD_KEY: ;Step 1:發(fā)送讀按鍵指令 ; 八位指令: 0000 0111 B CLR LOAD
MOV CH451_BUFF1,#4 MOV A,#00000111B
SEND_RECEIVE: CLR DCLK RRC A MOV DIN,C NOP NOP SETB DCLK DJNZ CH451_BUFF1,SEND_RECEIVE
; 發(fā)送執(zhí)行指令 SETB LOAD NOP NOP
;Step 2:接收按鍵代碼: MOV CH451_BUFF1,#6 CLR A
RECEIVE: CLR DCLK MOV C,DOUT RLC A SETB DCLK DJNZ CH451_BUFF1,RECEIVE RET
按鍵處理采用中斷的方式,我中斷的部分為了測試,代碼如下: KEYIN: PUSH PSW PUSH A CLR EX0 ; CALL RD_KEY ;此功能暫不啟用 JMP $
我個人的想法如下:此時如按下鍵值,INTO引腳應能探測到低電平,可是卻一直是高電平
執(zhí)行程序后,引腳電平如下: S0至S3均為低電平,D0至D3均為高電平,DOUT恒為高電平
跪求達人幫忙!小弟昨天試了一晚上,始終無法讓它動作,感激不盡!??! [Emot]20[/Emot]