完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 小学僧啊 于 2019-4-3 16:21 编辑
部分程序如下: char KeyValue=0; //矩阵键盘键值,根据不同的值执行不同的子程序 char grade=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,z; char score=1; //这个值可以通过按键改变(1~9) void display(void) //显示有问题的一段显示程序,不过应该不是这段程序的问题 { if(over_flag==1) { PA=tabledu[z/10]; PB=0x0A; delay(2); PA=0x00; PA=tabledu[z%10]; PB=0x0B; delay(2); PA=0x00; } else { PA=tabledu[num]; PB=0x08; delay(2); PA=0x00; PA=tabledu[grade/10]; //这的显示开始出问题了 PB=0x0A; delay(2); PA=0X00; PA=tabledu[grade%10]; PB=0x0B; delay(2); PA=0X00; } } } void main(void) //主程序的一部分,关于显示出错的部分 { if((ask_flag==1)&(KeyValue==4)) //假设这个条件满足,执行if中的语句 { end_flag=1; TR0=0; TR1=0; KeyValue=0; switch(num) { case(1):grade=a;break; case(2):grade=b;break; case(3):grade=c;break; case(4):grade=d;break; case(5):grade=e;break; case(6):grade=f;break; case(7):grade=g;break; case(8):grade=h;break; } } if((end_flag==1)&(KeyValue==5)) { KeyValue=0; switch(num) { case(1):a=a+score;grade=a;break; case(2):b=b+score;grade=b;break; case(3):c=c+score;grade=c;break; case(4):d=d+score;grade=d;break; case(5):e=e+score;grade=e;break; case(6):f=f+score;grade=f;break; case(7):g=g+score;grade=g;break; case(8):h=h+score;grade=h;break; } grade_flag=1; } display(); } 这段程序可以正常运行,在变量grade,a,b,c,d,e,f,g,h没有改变时,显示正常,但当执行一遍switch之后,被改变的量显示的不是预期的数字,比如说score=5,num=5,执行之后e=0+5,grade=5。 数码管十位应该显示0,各位显示5,可是在这里的显示就出现问题了,不知道是哪里出了问题。(我试过将其中一个变量改为非零值,在没有执行switch时可以正常显示,但执行后就出问题了) |
|
相关推荐
4个回答
|
|
void display(void)的最后多了一个大括号,
case(8):h=h+score;grade=h;break;这段执行后,a到h没有清零,所以第一次跟你举例的一样,第二次开始就不一样了,假设第二次还是score=5,num=5,执行之后e=5+5,grade=10。 这只是一部分代码,并不一定代表错误就在这段代码里 |
|
2 条评论
|
|
这个程序本身没有太大的问题,之所以显示乱码,或者说显示的不是我预想的值,是因为if中的条件在一直被满足,所以语句执行了许多次,因此变量的值会不是预想的结果。
|
|
|
|
显示程序这样写才合理
void display(void) { if(over_flag==1) { PA=0x00; PB=0x0A; PA=tabledu[z/10]; delay(2); PA=0x00; PB=0x0B; PA=tabledu[z%10]; delay(2); } else { PA=0x00; PB=0x08; PA=tabledu[num]; delay(2); PA=0X00; PB=0x0A; PA=tabledu[grade/10]; delay(2); PA=0X00; PB=0x0B; PA=tabledu[grade%10]; delay(2); } } if((ask_flag==1)&(KeyValue==4)) 和 if((end_flag==1)&(KeyValue==5))这两条判断语句肯定是错的! 正确写法:if((ask_flag==1)&&(KeyValue==4)) 和 if((end_flag==1)&&(KeyValue==5)) |
|
2 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
611 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1047 浏览 0 评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发板简介与上电测试
970 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之传参
538 浏览 0 评论
【xG24 Matter开发套件试用体验】点灯之后的UART测试
668 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11043 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-10 15:18 , Processed in 0.569729 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号