CH452A四線方式 數(shù)碼管不顯示,按鍵沒反應(yīng)

CH452 LOAD DIN DCLK DOUT 和ARM CPU的4個GPIO連接,DOUT 是普通GPIO,不能產(chǎn)生中斷,所以我只能用查詢方式去讀按鍵的鍵值。

#define CH452_DCLK GPIO_B2 #define CH452_DIN GPIO_B3 #define CH452_LOAD GPIO_B4 #define CH452_DOUT GPIO_B5

Init() { CH452_Write(0x403); CH452_Write(CH452_BCD); CH452_Write(CH452_DIG7 | 1); CH452_Write(CH452_DIG6 | 2); CH452_Write(CH452_DIG5 | 3); CH452_Write(CH452_DIG4 | 4); CH452_Write(CH452_DIG3 | 5); CH452_Write(CH452_DIG2 | 6); CH452_Write(CH452_DIG1 | 7); CH452_Write(CH452_DIG0 | 8)

}

void CH452_Write(unsigned short cmd) { unsigned char i; SetGpioVal(CH452_LOAD,0); for(i=0;i!=12;i++) { if(cmd & 1) SetGpioVal(CH452_DIN,1); else SetGpioVal(CH452_DIN,0); // 輸出位數(shù)據(jù) // CH452_DIN=cmd&1; SetGpioVal(CH452_DCLK,0); cmd >>=1; DelayMicroSeconds(DELAY_CLK); SetGpioVal(CH452_DCLK,1); DelayMicroSeconds(DELAY_CLK); } SetGpioVal(CH452_LOAD,1); DelayMicroSeconds(6); }

//************************************************* //輸入按鍵代碼子程序,從CH452讀取 unsigned char CH452_Read( void ) { unsigned char i; unsigned char cmd,keycode; //定義命令字,和數(shù)據(jù)存儲器 cmd=0x07; //讀按鍵的命令字 SetGpioVal(CH452_LOAD,0); for(i=0;i!=4;i++) { if (cmd & 1) SetGpioVal(CH452_DIN,1); else SetGpioVal(CH452_DIN,0); // 輸出位數(shù)據(jù) // CH452_DIN=cmd&1; //送入最低位 SetGpioVal(CH452_DCLK,0); cmd>>=1; DelayMicroSeconds(DELAY_CLK); SetGpioVal(CH452_DCLK,1); DelayMicroSeconds(DELAY_CLK); } SetGpioVal(CH452_LOAD,1); keycode=0; for(i=0;i!=7;i++) { keycode<<=1; if(GetGpioVal(CH452_DOUT))) keycode++; SetGpioVal(CH452_DCLK,0); DelayMicroSeconds(DELAY_CLK); SetGpioVal(CH452_DCLK,1); DelayMicroSeconds(DELAY_CLK); } return(keycode); //反回鍵值 }

主程序通過一個循環(huán)不停的去讀鍵值,讀到的總是0x7f

請大家?guī)兔纯礊槭裁磾?shù)碼管不顯示,按鍵讀到的也總是0x7f

請確定以下問題: 1.發(fā)送的數(shù)據(jù)是否正確,如:0x0403,用示波器查看,注意,該命令最好在上電后延時幾十個毫秒后再發(fā)。 2.用示波器檢查芯片的任意一個DIG引腳,查看是否有方波輸出,如果沒有且一直為高,則可推出上面第一條發(fā)送的0x0403沒有發(fā)送成功,檢查程序時序。 3.H3L2引腳需接高電平。


小雨的天: 先謝謝你了。 我按照你說的用示波器查看,發(fā)出的0x403波形是對的,但是DIG引腳一直為高,也就是說0x403沒有發(fā)送成功,我檢查了一下我的寫命令時序,和你們提供的代碼比較了一下,沒發(fā)現(xiàn)有什么問題啊?上電后我延時了100毫秒才發(fā)0x403命令。你幫我看看這個寫命令時序問題出現(xiàn)在哪里,謝謝了! void CH452_Write(unsigned short cmd) { unsigned char i; //設(shè)置LOAD為輸出方向 SetGpioFunc(CH452_LOAD,1); //設(shè)置DOUT為輸入方向 SetGpioFunc(CH452_DOUT,0); //設(shè)置DIN為輸出方向 SetGpioFunc(CH452_DIN,1); //設(shè)置DCLK為輸出方向 SetGpioFunc(CH452_DCLK,1); //命令開始,LOAD=0 SetGpioVal(CH452_LOAD,0); for(i=0;i!=12;i++) //送入12位數(shù)據(jù),低位在前 { if(cmd & 1) SetGpioVal(CH452_DIN,1);// 輸出位數(shù)據(jù) 1 else SetGpioVal(CH452_DIN,0); // 輸出位數(shù)據(jù) 0 // CH452_DIN=cmd&1; SetGpioVal(CH452_DCLK,0); //設(shè)置DCLK為0 cmd >>=1; DelayMicroSeconds(DELAY_CLK);//等待2微秒 SetGpioVal(CH452_DCLK,1); //設(shè)置DCLK為1 上升沿有效 DelayMicroSeconds(DELAY_CLK);//等待2微秒 } SetGpioVal(CH452_LOAD,1); //設(shè)置LOAD=1 加載數(shù)據(jù),LOAD上升沿 DelayMicroSeconds(6); //命令數(shù)據(jù)加載周期不小于6US,CH451不需要該周期 }


程序沒什么問題,注意DCLK每位之間的寬度。滿足CH452的時序需要。 另外,用示波器查看DIN DCLK信號,再檢查一下數(shù)據(jù)是否正確。


我已經(jīng)用示波器檢查了DIN DCLK信號,是正確的,還有可能是什么問題呢?


芯片H3L2引腳是怎么接的?示波器怎么看的,多通道同時看的嗎?也就是DCLK和DIN需要同時看,然后再換一根探頭看LOAD,如果時序沒有問題,芯片就會工作了。


按鍵和顯示多可以正常工作了,是做硬件的把復(fù)位的電平弄反了。謝謝你的耐心回復(fù)


呵呵!不客氣。


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

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