完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我的目的是:想让一个八位数码管显示不断变化的多位数的时候自动进位退位。而且前面没数的话不能显示0。
例如:显示1234;不能显示成00001234。数字变成234了就自动显示234,而不能显示00000234或者00002340。 我的想法是: 声明一个8位数组来放数字的每一位,对应8位数码管的每一段。 用138译码器控制位选,顺便发送段选。 定义一个变量控制位选。 代码如下: #define IO_DIS P0 ***it LocationA=P1^3; ***it LocationB=P1^4; ***it LocationC=P1^5; unsigned char code DisCode[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char DisData[8]; unsigned char SectionValue; void DisLED(unsigned long Value) { if(Value>=0){DisData[7]=DisCode[Value%10/1];SectionValue=1;} if(Value>=10){DisData[6]=DisCode[Value%100/10];SectionValue=2;} if(Value>=100){DisData[5]=DisCode[Value%1000/100];SectionValue=3;} if(Value>=1000){DisData[4]=DisCode[Value%10000/1000];SectionValue=4;} if(Value>=10000){DisData[3]=DisCode[Value%100000/10000];SectionValue=5;} if(Value>=100000){DisData[2]=DisCode[Value%1000000/100000];SectionValue=6;} if(Value>=1000000){DisData[1]=DisCode[Value%10000000/1000000];SectionValue=7;} if(Value>=10000000){DisData[0]=DisCode[Value%100000000/10000000];SectionValue=8;} } void DisIC138(unsigned char Value) { unsigned char i; for(i=0;i switch(i) { case 0:LocationA=0;LocationB=0;LocationC=0; break; case 1:LocationA=1;LocationB=0;LocationC=0; break; case 2:LocationA=0;LocationB=1;LocationC=0; break; case 3:LocationA=1;LocationB=1;LocationC=0; break; case 4:LocationA=0;LocationB=0;LocationC=1; break; case 5:LocationA=1;LocationB=0;LocationC=1; break; case 6:LocationA=0;LocationB=1;LocationC=1; break; case 7:LocationA=1;LocationB=1;LocationC=1; break; } IO_DIS=DisData[i]; DelayMs(1); IO_DIS=0x00; } } 脑壳痛的是:显示8位数正常,显示7位数后面就少1位,显示6位数就少两位。。。。。 如:DisLED(6666666); DisIC138(SectionValue); 我以为会显示【×6666666】这个不带爱像的学习板就只显示【×666666×】。 我想要的是: 1.哪位能帮我看看,我的代码错到哪里了?在源代码上指点下,我想知道我思路对吗? 2.有更好更简单的代码能告诉我吗? 3.请尽量用简单粗暴的语言帮我解决以上两个问题,说复杂了我理解不了。 |
|
相关推荐
3个回答
|
|
你的value变量分解是从 个位开始往高位走,而且数组最高位存储的是value的最低位的数值。
但是你在显示的时候是从最低位开始显示的。是不是顺序的问题? 建议你用每位数值不同的数测试,比如123456,看看是不是分解和显示数据的顺序问题。
最佳答案
|
|
|
|
jjseh1987 发表于 2015-9-21 04:56 已经解决了,你说的差不多,138扣位扣后面了,DisLED扣前面了。。。。。 |
|
|
|
加一个空白的数0x00或者0xff看你电路共阳还是共阴
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 16:11 , Processed in 0.912916 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号