完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
写的程序,但是便宜一直有错,是计算器程序,麻烦哪位大神能指点下。
(错误:JISUANQI.C(221): error C211: call not to a function JISUANQI.C(221): error C208: 'function': too many actual parameters JISUANQI.C(222): error C187: not an lvalue JISUANQI.C(238): error C211: call not to a function JISUANQI.C(238): error C208: 'function': too many actual parameters JISUANQI.C(239): error C187: not an lvalue JISUANQI.C(251): error C211: call not to a function JISUANQI.C(251): error C208: 'function': too many actual parameters JISUANQI.C(252): error C187: not an lvalue Target not created) #include #define uchar unsigned char #define uint unsigned int; uchar code a[]={0xF7,0xFB,0xFD,0xFE}; unsigned char code table[16]={0xee,0x82,0xdc,0xd6,0xb2,0x76,0x7e,0xc2,0xfe,0xf6,0xee,0xee,0xee,0xee,0xee,0xee,}; uchar fuhao=0,scan=0; //全局变量fuhao用来存放运算符的值 scan作为是否按键的标志位(按下就为1没按为0) void delay(uchar n); //延时Z毫秒 void display(long f); //用六位数码管显示long值 uchar keyscan(); //键盘扫描并把扫描得到的值返回 void displayerror(); //显示错误操作提示信息 void delay(uchar n) //延时n ms(晶振12Mhz) { uchar i; while(n--) for(i=125;i>0;i--);//1ms } uchar keyscan() //扫描键盘,返回的值高四位相应位表列,低表行。若未按键则返回0 { uchar row,col; uchar j,m; P1=0xF0; if((P1&0xF0)!=0xF0) { delay(1); if((P1&0xF0)!=0xF0) col=~(P1|0x0F); //确定列 j=0; P1=a[j]; while(j<=3) { if((P1&0xF0)!=0xF0) { row=~a[j]; //确定行 break; } else {j++;P1=a[j];} } m=row+col; return(m); } else return(0); } uchar coding(uchar m) //将用相应位表示的按键号转化为数值编码 { uchar k; switch(m) { case (0x08+0x80): k=0;break;//0 case (0x08+0x40): k=1;break;//1 case (0x08+0x20): k=2;break;//2 case (0x08+0x10): k=3;break;//3 case (0x04+0x80): k=4;break;//4 case (0x04+0x40): k=5;break;//5 case (0x04+0x20): k=6;break;//6 case (0x04+0x10): k=7;break;//7 case (0x02+0x80): k=8;break;//8 case (0x02+0x40): k=9;break;//9 case (0x02+0x20): k=10;break;//加法 case (0x02+0x10): k=11;break;//减法 case (0x01+0x80): k=12;break;//乘法 case (0x01+0x40): k=13;break;//除法 case (0x01+0x20): k=14;break;//清零 case (0x01+0x10): k=15;break;//等于 } scan=1; return(k); } void main() { uchar val=0,j=0,i=0,jie,e=0; //i,j用于判断每次输入的数是否超过六位,e为错误操作标志位(为1表示已错误操作),jie为显示计算结果标志位(为1表示要显示结果) long a=0,b=0,c=0; //a存放第一次输入的数,b存放第二次输入的数,c存放计算的结果 display(0); //初始化显示 delay(1000); //延时1000毫秒 while(1) { //beep=1; //关闭蜂鸣器 val=keyscan(); //把扫描得到的值赋给val if(scan==1) //一旦按下键我就对其操作 { scan=0; //把按键标志位scan复位 if(val==10) //如果按下的为复位键 { a=0;b=0;c=0;fuhao=0;jie=0;e=0;i=0;j=0;display(0); //复位操作(初始化) (显示是不能停) continue; //直接进入下一次循环 } else if(val>=11&&val<=15&&i==0&&fuhao==0)//如果第一次按下的不是数字键 { display(0); //数码管显示不能停 continue; //直接进入下一次循环 } else if(val>=12&&val<=15&&fuhao==0&&i!=0)//输入数字之后按下的第一个运算符 { fuhao=val; //把扫描得到运算符值赋给fuhao标志位 i=0; //一旦输入运算符就把数字输入计数i清零 display(0); //数码管显示不能停 } else if(fuhao!=0&&val>=11&&val<=15) //只要按下等于或者运算符之前按了数字键和运算符就显示计算结果 { jie=1; //计算结果标志位jie为1(表示要显示计算结果c) if(fuhao==12) //如果输入的是运算符‘+’ { c=a+b; //把运算的结果赋给c if(c>999999) //如果计算结果超出数码管的显示范围 { displayerror(); //显示出错信息 e=1; //出错信息标志位置1 } else { display(c); //不超出显示范围就显示结果 } } else if(fuhao==13) //如果输入的运算符是‘-’ { if(a { displayerror(); } else { c=a-b; display(c); } } else if(fuhao==14) //如果输入的运算符是‘*’ { c=a*b; if(c>999999) { displayerror(); e=1; } else { display(c); } } else //如果输入的运算符是‘/’ { c=a/b; display(c); } } else if(val>=0&&val<=9) //如果按下的为数字键 { if(fuhao==0) //如果是第一次按下数字键 { a=a*10+val; //把前面显示的值左移一位再加当前输入的数字存放到a(0到9) i++; //每输入一个数字,数字计数i加1 if(i>6) //如果连续输入数字超过六位 { displayerror();e=1; //显示出错信息且错误标志位置1 } else { display(a); //显示得到的a continue; //进入下次次循环 } } else //第二次按下数字键 { b=b*10+val; //把前面显示的值左移一位再加当前输入的数字存放到b(0到9) j++; //第二次输入数字的计算变量j加1 if(j>6) //如果输入超出数码管显示范围 { displayerror(); e=1; } else { display(b); continue; } } } } else //如果没按下键(也要显示) { if(e==1) displayerror();//如果出错标志位为1就显示出错信息 else if(fuhao==0) display(a); //如果还没输入运算符(到目前为止还只是输入数字)就显示a else if(fuhao!=0&&jie==0) display(b); //如果输入数字后又输了运算符且没输入运算符和等于就显示b else if(jie==1) display(c); //如果输入了结果标志位就显示计算结果c else display(0); //其余就初始化显示 } } } void display(long f) //以 {unsigned long x; unsigned char a[5]={0,0,0,0,0},i=0,j; if(f!=0){ if((f<10000)&&(f>1)) //正常显示 {if(f>1000)f=f-1; // while(f<1000) {f=f*10; i++; } x=f*10; a[4]=x%10; if(a[4]>=5)f=f+1;; x=f; a[1]=x%10; a[2]=(x/10)%10; a[3]=(x/100)%10; a[4]=(x/1000)%10; for(j=0;j<5;j++) {a[j]=table(a[j]);} a[i+1]++; a[0]=0; } else if(f>=10000) //以科学计数法显示 {while(f>=1000) {f=f/10; i++; } x=f; a[4]=(unsigned char)((float)((f-x))*10); if(a[4]>=5)x++; //四舍五入 a[2]=x%10; a[3]=(x/10)%10; a[4]=(x/100)%10; a[0]=i+2; for(j=0;j<5;j++) {a[j]=table(a[j]);} a[4]++; a[1]=0x7c; } else {x=f*10000; //频率值小于1 if((x%10)>=5)x=x+10; //四舍五入 x=x/10; a[1]=x%10; a[2]=(x/10)%10; a[3]=(x/100)%10; a[4]=(x/1000)%10; for(j=0;j<5;j++) {a[j]=table(a[j]);} a[4]++; a[0]=0; } } for(j=0;j<5;j++) //串行 {SBUF=a[j]; while(TI==0);} } void displayerror() //最高位显示E表示出错信息 { unsigned char a[5]={0,0,0,0,0},i=0,j; for(j=0;j<5;j++) {a[j]=0x7c; SBUF=a[j]; while(TI==0); } } |
|
相关推荐
3 个讨论
|
|
谢谢你,具体指向是这几处,这是显示程序里的,这个程序我在别的项目里用的是没有错误。改了很多也不行。 {a[j]=table(a[j]);}(错误指出此处:JISUANQI.C(221): error C211: call not to a function JISUANQI.C(221): error C208: 'function': too many actual parameters) a[i+1]++;(错误指出:JISUANQI.C(222): error C187: not an lvalue) {a[j]=table(a[j]);}(错误指出此处:JISUANQI.C(238): error C211: call not to a function JISUANQI.C(238): error C208: 'function': too many actual parameters) a[4]++;((错误指出此处:JISUANQI.C(239): error C187: not an lvalue {a[j]=table(a[j]);}((错误指出此处:JISUANQI.C(251): error C211: call not to a function JISUANQI.C(251): error C208: 'function': too many actual parameters)) a[4]++;(错误之处)JISUANQI.C(252): error C187: not an lvalue |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 02:17 , Processed in 1.662729 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号