小可現(xiàn)在用的是AT89C51/CH452L,驅(qū)動(dòng)鍵盤,不帶顯示.問(wèn)題是我程序下到片子里后,發(fā)現(xiàn)DIG0口沒(méi)有掃描.不知道問(wèn)題出在哪.請(qǐng)能人指點(diǎn)一下:謝謝! sbit DCLK=P1^5; sbit DIN=P1^4; sbit LOAD=P1^6; sbit DOUT=P3^2; void AT89C51_Init() { DOUT=1; TCON|=0x01;//中斷0下降沿觸發(fā); //TCON&=0xfe;//中斷0低電平觸發(fā); //IP|=0x01; CH452_KEY_INT0_ON;//中斷0允許; EA=1;//全局中斷允許; } /******************************************* ******名稱:CH452_Init() ******變量: ******功能:CH452初始化(設(shè)定系統(tǒng)參數(shù)) ******01000[GPOE][INTM][SSPD][DPLR]0[KEYB][DISP] ****** 0 1 0 0 0 1 0 ******DISP(顯示驅(qū)動(dòng)功能的使能):0:關(guān)閉顯示驅(qū)動(dòng) 1:允許顯示驅(qū)動(dòng) ******KEYB(鍵盤掃描功能的使能):0:關(guān)閉鍵盤掃描 1:啟用鍵盤掃描 ******DPLR(字驅(qū)動(dòng)DIG 輸出極性):0:低電平有效 1:高電平有效 ******SSPD(閃爍速度/頻率):0:低速(約1.5Hz) 1:快速(約3Hz) ******INTM(按鍵中斷輸出方式):0:低電平有效(電平或邊沿中斷) 1:低電平脈沖(邊沿中斷) ******GPOE(通用輸出引腳使能--僅DIG6和DIG7引腳):0:用于顯示驅(qū)動(dòng)字輸出禁止通用輸出 ***********************************************1:當(dāng)掃描極限為1~6 時(shí),多余的DIG6和DIG7引腳用于通用輸出,分別由閃爍位D6S和D7S控制 *******************************************/ void CH452_Init() { Uint CH452_SYS_SET=0; CH452_KEY_DIN_CLR; CH452_KEY_DIN_SET; CH452_SYS_SET=(CH452_SYS_COM|CH452_KEY_KEYB_ON|CH452_KEY_INTM_ON);//CH452系統(tǒng)參數(shù)設(shè)置:開鍵盤功能\邊沿中斷 // CH452_SYS_SET=(CH452_SYS_COM|CH452_KEY_KEYB_ON|CH452_KEY_INTM_OFF);//CH452系統(tǒng)參數(shù)設(shè)置:開鍵盤功能\低電平中斷 // WriteCH452(CH452_RESET); WriteCH452(CH452_SYS_SET); } /******************************************* ******名稱:WriteCH452(Uint command) ******變量:Uint command ******功能:向CH452寫命令 *******************************************/ void WriteCH452(Uint command) { Uchar i; CH452_KEY_INT0_OFF;//51禁止452產(chǎn)生的中斷 CH452_KEY_LOAD_CLR;//LOAD低電平 for(i=0;i<12;i++) { if(command&0x0001)CH452_KEY_DIN_SET; else CH452_KEY_DIN_CLR; //DIN=command&0x0001; CH452_KEY_DCLK_CLR; command>>=1; CH452_KEY_DCLK_SET; } CH452_KEY_LOAD_SET;//LOAD上升沿加載命令 NOP;NOP;NOP;NOP;NOP;NOP; CH452_KEY_INT0_ON;//51允許452產(chǎn)生的中斷 } /******************************************* ******名稱:Uchar ReadCH452() ******變量: ******功能:從CH452讀數(shù)據(jù) *******************************************/ Uchar ReadCH452() { Uchar i; Uchar key=0; Uchar read; CH452_KEY_INT0_OFF; read=CH452_R_COM;//讀取鍵盤命令0111 CH452_KEY_LOAD_CLR; for(i=0;i<4;i++) { if(read&0x01)CH452_KEY_DIN_SET; else CH452_KEY_DIN_CLR; //DIN=read&0x01; CH452_KEY_DCLK_CLR; read>>=1; CH452_KEY_DCLK_SET; } CH452_KEY_LOAD_SET;//LOAD上升沿加載命令 for(i=0;i<7;i++) { key<<=1; key|=DOUT; NOP; CH452_KEY_DCLK_CLR; CH452_KEY_DCLK_SET; } //CH452_CLR_INT_FLAG; CH452_KEY_INT0_ON; return(key); } /******************************************* ******名稱:INT0_Init() ******變量: ******功能:中斷初始化 *******************************************/ void CH452_INT0() interrupt 0 { key_int_flag=1; keyboard=ReadCH452(); } //-----------main----- void main() { DelayMs(100); LcdInit(); AT89C51_Init(); CH452_Init(); DelayMs(100); while(1) { if(key_int_flag) { LcdSendCom(0x01); Display(0,0,5,"北京歡迎您"); key_int_flag=0; } else Display(1,0,4,"沒(méi)鍵按下"); DelayMs(10);
} }