CH451S求救請(qǐng)高手幫忙謝謝

小弟使用的是PIC24FJ256GA106,16位的單片機(jī)程序是參照網(wǎng)站上例子寫(xiě)的,只做按鍵實(shí)用沒(méi)有接數(shù)碼管,硬件是參照PDF15頁(yè)的例子去掉了數(shù)碼管與二極管部分,以下是程序目前的問(wèn)題是,按鍵沒(méi)有任何反應(yīng)DOUT始終是高電平,5V供電與3.3V供電都試過(guò)了現(xiàn)象一樣總是按鍵后沒(méi)有中斷,請(qǐng)高手幫忙看下程序有什么問(wèn)題?另外請(qǐng)問(wèn)LOAD、DIN、LDCK這些引腳MCU在輸出高低電平時(shí),高低電平各自要保持的時(shí)間范圍是多少?謝謝! /************************************************************************************** *功能描述:IO口初始化 *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) /************************************************************************************** *功能描述:外部中斷函數(shù) *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void __attribute__((__interrupt__))_INT0Interrupt() { IFS0bits.INT0IF=0; //清中斷標(biāo)志位 delaytime(50); ch451_read(); EX1=1; } /************************************************************************************** *功能描述:鍵盤(pán)初始化 *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void ch451_init(void) { //INTCON2bits.INT0EP=1; TRISDbits.TRISD9=0; //PORTDbits.RD9=1; //DIN=1 //delaytime(9); PORTDbits.RD9=0; //先低后高,選擇4線輸入DIN=0 delaytime(9); PORTDbits.RD9=1; //DIN=1 delaytime(9); CH451_Write(0x0201); CH451_Write(0x0403); } /************************************************************************************** *功能描述:輸出命令子程序 定義一無(wú)符號(hào)整型變量存儲(chǔ)12字節(jié)的命令字。 *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void CH451_Write(unsigned int command) { unsigned char i; TRISDbits.TRISD9=0; TRISDbits.TRISD0=0; TRISDbits.TRISD8=0; PORTDbits.RD0=0; //命令開(kāi)始 LOAD=0 delaytime(9); //d=command; for(i=0;i<12;i++) //送入12位數(shù)據(jù),低位在前 { if((command& 0x00001)==0x0001) { PORTDbits.RD9=1; } else { PORTDbits.RD9=0; } //delaytime(10); PORTDbits.RD8=0; //DCLK=0 delaytime(9); command>>=1; PORTDbits.RD8=1; //上升沿有效DCLK=1 delaytime(9); } PORTDbits.RD0=1; //加載數(shù)據(jù)LOAD=1 delaytime(9);

} /************************************************************************************** *功能描述:輸入命令子程序,MCU從451讀一字節(jié) *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void ch451_read (void) { uchar i; uchar command; // CH451命令字暫存單元 TRISDbits.TRISD0=0; TRISDbits.TRISD9=0; TRISDbits.TRISD8=0; //TRISFbits.TRISF6=1; // 單片機(jī)向CH451輸入讀CH451的命令字 command = 0x07; PORTDbits.RD0=0; //LOAD delaytime(9); //d=command; for (i=0; i<4; i++) { // 向CH451送入4位命令字,低位在前 //DIN if((d & 0x0001) ==0x0001) { PORTDbits.RD9=1; } else { PORTDbits.RD9=0; } //delaytime(10); PORTDbits.RD8=0; //DCLK delaytime(9); d>>=1; // 右移一位 PORTDbits.RD8=1; // 時(shí)鐘上升沿通知CH451輸入位數(shù)據(jù)DCLK delaytime(9); } PORTDbits.RD0=1; // 產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)LOAD delaytime(9); ch451_key=0; // 清除上個(gè)按鍵信息,為接收新鍵碼準(zhǔn)備 for (i=0; i<7; i++) { ch451_key <<= 1; // 數(shù)據(jù)移入,高位在前,低位在后 ch451_key |= PORTFbits.RF6; // 從高到低讀入CH451的數(shù)據(jù)

PORTDbits.RD8=0; // 產(chǎn)生時(shí)鐘下升沿通知CH451輸出下一位 delaytime(9); PORTDbits.RD8=1; delaytime(9); } }

/************************************************************************************** *功能描述:主函數(shù) *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void main() {

Init_Io(); Init_Uart(); Init_Int0(); ch451_init(); while(1) {

; } } /************************************************************************************** *功能描述:延時(shí) *輸入; 無(wú) *輸出:無(wú) *返回:無(wú) **************************************************************************************/ void delaytime(uint b) { uint j; for(j=0;j { ; } }


熱門(mén)產(chǎn)品 : CH32X035: 32位USB+USB PD單片機(jī)

您好,你的程序在上電初始化CH451的時(shí)候,發(fā)了復(fù)位命令以后再發(fā)的0X0403,這樣會(huì)導(dǎo)致0X0403的命令丟失,應(yīng)該在復(fù)位后延時(shí)50MS或者更多以后再發(fā)0X0403,或者不發(fā)0X0201復(fù)位命令,直接發(fā)0x0403. 另外,判斷芯片是否正常工作,可以用示波器觀察每個(gè)DIG引腳,如果有規(guī)則的矩形波,那就說(shuō)明0x0403的命令起作用了,如果是一直高電平,那芯片沒(méi)有收到0x0403的命令,沒(méi)有工作,檢查你的輸出波形是否正確,波形寬度要求在手冊(cè)中的參數(shù)里有體現(xiàn),您參考一下。


下雨的天您好,按照您所說(shuō)已經(jīng)補(bǔ)發(fā)0201復(fù)位命令了直接發(fā)送0403,但是按鍵后還是沒(méi)有產(chǎn)生中斷DOUT腳一直為高電平,另外用示波器觀察了其余各腳的波形顯示正常,請(qǐng)您仔細(xì)幫忙看下是否還有其他錯(cuò)誤,謝謝


另外還有一個(gè)問(wèn)題就是用手碰下芯片的地也就是9腳和10腳連接的地方有時(shí)就會(huì)有個(gè)中斷信號(hào)但是讀出來(lái)的鍵值是7f


我現(xiàn)在想問(wèn)您的是發(fā)了0x0403命令以后DIG引腳有矩形波嗎?如果有的話(huà),芯片已經(jīng)正常工作了,有按鍵按下后,DOUT會(huì)變低,直到你發(fā)了讀命令后,輸出鍵值,最后DOUT變高。


您好我看了一下發(fā)完0x0403后DIG引腳沒(méi)有波形


那檢查程序中的發(fā)送部分吧。用示波器看一個(gè)整周期的數(shù)據(jù)。


你好DIG的波形已經(jīng)看到,并且也看到了我發(fā)0403的波形只是中斷后沒(méi)有讀到鍵值讀到的是7fh另外,DIG的波形也不是每次都能讀到有時(shí)連續(xù)幾次程序運(yùn)行停止再運(yùn)行后發(fā)0403能看到波形有時(shí)連續(xù)幾次都看不到,要重新上電才行


你主程序上來(lái)延時(shí)500毫秒以后再運(yùn)行程序,如下: void main() { delayms(250); delayms(250); Init_Io(); Init_Uart(); Init_Int0(); ch451_init(); while(1) {

; }


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

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