為什么452不掃描?

用貴公司的CH452芯片與三星的44B0(arm7)連接擴(kuò)展鍵盤(pán)。

連接方式如下: 使用兩線SDA、SCL 加 INT方式接一個(gè)8*8的鍵盤(pán)。 SDA、SCL接至44B0的兩個(gè)通用IO,INT接至44b0的一個(gè)外部中斷1輸入。 DIG0~DIG3串接2K電阻接鍵盤(pán)掃描輸出,SEG0~SEG3串接200電阻接鍵盤(pán)的 掃描輸入。

用貴公司網(wǎng)站上的程序,運(yùn)行后,CH452不工作,按下鍵盤(pán)后INT不產(chǎn)生低電平。 DIG0~DIG3上始終是高電平,沒(méi)有輸出鍵盤(pán)掃描輸出。不知是什么問(wèn)題,請(qǐng)求幫助?。?!

程序如下: void Main(void) { port_init(); interrupt_INIT(); CH452_Write(CH452_RESET); Delay_1us(100); CH452_Write(CH452_SYSON2); Delay_1us(100); while(1) { CH452_Write(CH452_SLEEP); Delay_1us(50); } }

怎樣才知道452工作了呢?

盼回復(fù),謝謝?。?


熱門(mén)產(chǎn)品 : CH390:以太網(wǎng)控制器芯片

問(wèn)題和fpzxx兄一樣啊,請(qǐng)指教


唉,我改成四線的,也是不行,讀不到DOUT口的數(shù)據(jù),怎么都是高呢


有示波器就看看單片機(jī)輸出的I/O的波形,或者檢查程序中設(shè)計(jì)I/O方向的程序,還有,不要一直發(fā)SLEEP命令


小二兄,I/O口波形DIN、DCLK、LOAD都很好,現(xiàn)在我能測(cè)到掃描,但是不知道為什么DOUT一運(yùn)行,還沒(méi)按鍵就有 信號(hào),而且是正負(fù)3.3V,直接進(jìn)了中斷


4線接口類似于SPI,如果未啟用鍵盤(pán),那么DOUT是移位輸出,當(dāng)然有信號(hào),如果已啟用鍵盤(pán),那么DOUT有輸出則說(shuō)明實(shí)際檢測(cè)到有按鍵按下(例如SEG與DIG之間的數(shù)碼管漏電等)


1、未啟用鍵盤(pán)時(shí),DOUT輸出恒為“1” 2、啟用鍵盤(pán)后,在沒(méi)有連接LED的情況下,還沒(méi)按鍵,DOUT就有信號(hào),而且示波器測(cè)量為正負(fù)3V 下面是我的程序:請(qǐng)指教 void Delay_1us(int time) { int i,j; for(i=0;i<400;i++) { for(j=0;j } }

void port_init(void) { rPCONG = 0xffff; rPUPG = 0x0; rPCONC = 0x55555555; rPUPC = 0x0; rPDATC = 0x0; rPCONF = 0x92555; rPDATF = 0x0; rPUPF = 0x0; //should be enabled /*所有的外部硬件中斷為低電平觸發(fā)*/ rEXTINT=0x0;

}

void CH452_Write(UINT16 cmd) { UINT8 i; CH452_LOAD_CLR; //命令開(kāi)始,LOAD=0 // Delay_1us(3); for(i=0;i!=12;i++) //送入12位數(shù)據(jù),低位在前 { if (cmd&1) {CH452_DIN_SET;} else {CH452_DIN_CLR;} // 輸出位數(shù)據(jù) Delay_1us(50); CH452_DCLK_CLR; cmd>>=1; Delay_1us(50); CH452_DCLK_SET; Delay_1us(50); } CH452_LOAD_SET; //加載數(shù)據(jù),LOAD上升沿 Delay_1us(100); }

//************************************************* //輸入命令子程序,MCU從CH452讀一字節(jié) UINT8 CH452_Read(void) { UINT8 i,keycode=0; UINT8 cmd; //定義命令字,和數(shù)據(jù)存儲(chǔ)器

cmd=0x07; //輸入讀451命令字 CH452_LOAD_CLR; for(i=0;i!=4;i++) { if (cmd&1) {CH452_DIN_SET;} else {CH452_DIN_CLR;} // 輸出位數(shù)據(jù) Delay_1us(50); // CH452_DIN=cmd&1; //送入最低位 CH452_DCLK_CLR; cmd>>=1; //往右移一位 Delay_1us(50); CH452_DCLK_SET; //產(chǎn)生時(shí)鐘上升沿鎖通知CH451輸入位數(shù)據(jù) Delay_1us(50); } CH452_LOAD_SET; //產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù) Delay_1us(50); CH452_SDA_init; Delay_1us(50); for(i=0;i!=7;i++) { CH452_DCLK_CLR; //產(chǎn)生時(shí)鐘下升沿通知CH451輸出下一位 Delay_1us(100); keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后 if(CH452_DOUT) keycode|=0x1; //從高到低讀入451的數(shù)據(jù) Delay_1us(100); CH452_DCLK_CLR; //產(chǎn)生時(shí)鐘下升沿通知CH451輸出下一位 Delay_1us(100); CH452_DCLK_SET; Delay_1us(100); } rINTPND = 0x00000000; /* 清除所有未決的中斷*/ rI_ISPC = 0x03FFFFFF;

return(keycode); //反回鍵值 } UINT8 CH452_get_key(void) { UINT8 keynum=0; UINT16 key=0; rINTPND = 0x00000000; /* 清除所有未決的中斷*/ rI_ISPC = 0x03FFFFFF; rPCONG = 0xfff3; keynum=CH452_Read(); Delay_1us(50); key=(keynum&0x38)*8+(keynum&0x7); return(keynum); } void Main(void) { UINT8 nkey=0; UINT16 key; port_init(); CH452_Write(CH452_RESET); Delay_1us(100); CH452_Write(CH452_SYSON2); Delay_1us(50); interrupt_INIT(); Delay_1us(50); while(1) { nkey=CH452_get_key(); Delay_1us(50); } }


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频