編譯出現(xiàn)missing return-expression,怎么解決

麻煩大家?guī)臀铱纯?,這程序編譯總是出現(xiàn)missing return-expression,謝謝!

#include #include #define uchar unsigned char #define uint unsigned int

#include "CH452W4.C" unsigned char minute=30,hour=12; uchar keyp;

/*********************************************************** * 延時函數(shù) ***********************************************************/ void delayms(uint t) { uchar i; while(t--) for(i=0;i<120;i++); }

/*********************************************************** * 數(shù)碼管顯示 ***********************************************************/ void display() { // CH452_Write(CH452_DIG7 | 0 |CH452_BCD_DOT_X ); //顯示數(shù)碼管的第8位,并加顯小數(shù)點 // CH452_Write(CH452_DIG6 | 3); //顯示數(shù)碼管的第7位 // CH452_Write(CH452_DIG5 | 2); //顯示數(shù)碼管的第6位 CH452_Write(CH452_DIG4 |hour/10); //顯示小時 CH452_Write(CH452_DIG3 |hour%10); CH452_Write(CH452_DIG2 |0x12); //顯示"-" CH452_Write(CH452_DIG1 |minute/10); //顯示分鐘 CH452_Write(CH452_DIG0 |minute%10);

}

/********************************************************** * 處理按鍵值函數(shù) *************************************************************/ uchar workkeycode(uchar x)

{ if(x==0x51) //鍵盤第一次按下 { delayms(10); if(x==0x51) { while(!x); //等待鍵盤釋放 while(1) //個位閃爍 { CH452_Write(CH452_DIG0 |0x10); delayms(250); CH452_Write(CH452_DIG0 |minute/10); delayms(250); x=0x51; if(x==0) //鍵盤再次按下 { delayms(10); if(x==0x51) { while(!x); //等待鍵盤釋放 while(1) //十位閃爍 { CH452_Write(CH452_DIG1 |0x10); delayms(250); CH452_Write(CH452_DIG1 |minute%10); delayms(250); if(x==0x51) //鍵盤第三次按下 { delayms(10); if(x==0x51) { while(!x); //等待鍵盤釋放 while(1) //百位閃爍 { CH452_Write(CH452_DIG2 |0x10); delayms(250); CH452_Write(CH452_DIG2 |0x12); delayms(250); if(x==0x51) //鍵盤第四次按下 { delayms(10); if(x==0x51) { while(!x); //等待鍵盤釋放 while(1) //千位閃爍 { CH452_Write(CH452_DIG3 |0x10); delayms(250); CH452_Write(CH452_DIG3 |hour/10); delayms(250); if(x==0x51) //鍵盤第五次按下 { delayms(10); if(x==0x51) { while(!x); //等待鍵盤釋放 while(1) //千位閃爍 { CH452_Write(CH452_DIG4 |0x10); delayms(250); CH452_Write(CH452_DIG4 |hour%10); delayms(250); } } } } } } } } } } } } } } } }

/*********************************************************** * 顯示左循環(huán)函數(shù) *************************************************************/ void shife8() { uchar i; for(i=0;i<8;i++) { CH452_Write(CH452_LEFTCYC); //寫左循環(huán)命令 delayms(300); //移動的速度控制 } } /*********************************************************** * 主函數(shù) *************************************************************/ void main() { //CH452_DOUT=1; // 設置該引腳為輸入方向 IE1=0; //設置CH452按鍵中斷 EX1=1; EA=1; CH452_Write(CH452_RESET); CH452_Write(CH452_BCD); // 選擇BCD譯碼方式,掃描極限為8個數(shù)碼管 // CH452_Write(CH452_SELF_BCD ); // 選擇自定義BCD譯碼方式,掃描極限為8個數(shù)碼管 // CH452_Write(CH452_TWINKLE + 0x26);//設置閃爍控制,0x26表示[0010 0110]: //高四位的第2位數(shù)碼管閃爍,低四位的第2和第3位閃爍 CH452_Write(CH452_SYSON2); // 開啟顯示、鍵盤 display(); // 顯示 shife8(); //左循環(huán)8次 // CH452_Write(CH452_CLR_BIT |16); //段位清0,從第一位到第八位,從0段到第63段,剛好8個數(shù)碼管,8X8=64。 // CH452_Write(CH452_LEVEL|0x2b); //加載光柱,編碼小于光柱的會點亮,大于和等于光柱的都會熄滅 while(1) { // CH452_Write(CH452_DIG6 |CH452_BCD_DOT_X); } }

/*********************************************************** * // INT1中斷服務程序 *************************************************************/ void int1() interrupt 2 //using 1 { keyp=CH452_Read(); //按鍵值 keyp=workkeycode(keyp); //處理按鍵值 if(keyp/10!=0) CH452_Write(CH452_DIG5 | (keyp/10)); //如果十位不為0,顯示按鍵碼的十位 else CH452_Write(CH452_DIG5 |CH452_BCD_SPACE); //如果十位為0,則不顯示 CH452_Write(CH452_DIG4 | (keyp%10)); //顯示按鍵碼的個位

CH452_Write(CH452_SLEEP); }

uchar workkeycode(uchar x)這個函數(shù)你的返回值是uchar型變量,你的函數(shù)體里面沒有一個return調(diào)用,肯定會出現(xiàn)missing return-expression,建議在函數(shù)體中加上return語句或者改為void workkeycode(uchar x)!


改成void workkeycode(uchar x),出現(xiàn)了更多的錯誤


加了return x;后,沒有編譯出錯??墒菫槭裁次乙切Ч麤]有呢?我需要按鍵按一下,第一個數(shù)碼管閃爍,再按一下第二個數(shù)碼管閃爍,依次類推。


那你看下你讀取鍵值的函數(shù)在你按鍵按下去之后產(chǎn)生中斷了嗎?還有讀取到的鍵值是多少呢?


具體怎么操作呢?


hcn,請問下,我現(xiàn)在DOUT在按下按鍵后是低電平,可是不會回復到高電平


那說明你沒有將鍵值讀取走,只要讀取完鍵值之后DOUT腳就會拉高。


怎么樣才會把鍵值讀取走呢?


hcn,麻煩你告訴我哪里有問題好嗎?急啊,找了半天也沒找出問題來


CH452_Read這個函數(shù)你需要檢查下,還有DOUT產(chǎn)生中斷之后有沒有進入中斷函數(shù)?這些都需要你自己去判斷的。


CH452_Read這個函數(shù)是你們官網(wǎng)提供的吧?要是這個沒有問題的話,那還有哪里可能出現(xiàn)問題呢?


程序是官方的沒問題,那么你的硬件連線包括中斷引腳連線和官方提供的例子程序完全一樣嗎? 仔細檢查下問題所在。


hcn,請問你一個問題,昨天我按按鍵,數(shù)碼管沒有反應。今天我改了個東西,按按鍵有反應,但是就亂來了。 /* 與單片機有關,與中斷連接方式有關 */ #define USE_CH452_KEY 1 // 使用了CH452的按鍵中斷 #ifdef USE_CH452_KEY #define DISABLE_KEY_INTERRUPT {EX1=0;} #define ENABLE_KEY_INTERRUPT {EX1=1;} #define CLEAR_KEY_INTER_FLAG {IE1=0;} #else 你們官網(wǎng)給的pin.h里面的中斷設置是這樣的, 因為我接的是INT0,所以我改成 /* 與單片機有關,與中斷連接方式有關 */ #define USE_CH452_KEY 1 // 使用了CH452的按鍵中斷 #ifdef USE_CH452_KEY #define DISABLE_KEY_INTERRUPT {EX0=0;} #define ENABLE_KEY_INTERRUPT {EX0=1;} #define CLEAR_KEY_INTER_FLAG {IE0=0;} #else 改了以后就有反應了,但是亂來的,幫我看看,我這樣改的方向?qū)幔?/p>


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

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