麻烦大家帮我看看,这程序编译总是出现missing return-expression,谢谢!
#include #include #define uchar unsigned char #define uint unsigned int
#include "CH452W4.C" unsigned char minute=30,hour=12; uchar keyp;
/*********************************************************** * 延时函数 ***********************************************************/ void delayms(uint t) { uchar i; while(t--) for(i=0;i<120;i++); }
/*********************************************************** * 数码管显示 ***********************************************************/ void display() { // CH452_Write(CH452_DIG7 | 0 |CH452_BCD_DOT_X ); //显示数码管的第8位,并加显小数点 // CH452_Write(CH452_DIG6 | 3); //显示数码管的第7位 // CH452_Write(CH452_DIG5 | 2); //显示数码管的第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);
}
/********************************************************** * 处理按键值函数 *************************************************************/ 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); } } } } } } } } } } } } } } } }
/*********************************************************** * 显示左循环函数 *************************************************************/ void shife8() { uchar i; for(i=0;i<8;i++) { CH452_Write(CH452_LEFTCYC); //写左循环命令 delayms(300); //移动的速度控制 } } /*********************************************************** * 主函数 *************************************************************/ void main() { //CH452_DOUT=1; // 设置该引脚为输入方向 IE1=0; //设置CH452按键中断 EX1=1; EA=1; CH452_Write(CH452_RESET); CH452_Write(CH452_BCD); // 选择BCD译码方式,扫描极限为8个数码管 // CH452_Write(CH452_SELF_BCD ); // 选择自定义BCD译码方式,扫描极限为8个数码管 // CH452_Write(CH452_TWINKLE + 0x26);//设置闪烁控制,0x26表示[0010 0110]: //高四位的第2位数码管闪烁,低四位的第2和第3位闪烁 CH452_Write(CH452_SYSON2); // 开启显示、键盘 display(); // 显示 shife8(); //左循环8次 // CH452_Write(CH452_CLR_BIT |16); //段位清0,从第一位到第八位,从0段到第63段,刚好8个数码管,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); }