C51菜鸟,关于动态数码管的显示程序,求指导!
时间:10-02
整理:3721RD
点击:
今天花了不少时间写这个程序,拿到keil上跑起来就出问题了。程序的目标是把主程序里1维数组中的元素动态显示出来,问题主要有:
1.想用decode函数返回数字对应的段选码,但是貌似只有第一次传到了P0口,后来的b可以正常返回,只是到不了P0口。
2.C语言学的不太好,所以一开始这么定义的 int decode(int a),然后各种提示错误,没办法加了个中间变量c
源程序附上,求指导!
1.想用decode函数返回数字对应的段选码,但是貌似只有第一次传到了P0口,后来的b可以正常返回,只是到不了P0口。
2.C语言学的不太好,所以一开始这么定义的 int decode(int a),然后各种提示错误,没办法加了个中间变量c
源程序附上,求指导!
- #include<reg51.h>
- int decode(int c)
- { int b;
- switch(c)
- {
- case 0:return b=0x3f;break;
- case 1:return b=0x06;break;
- case 2:return b=0x5b;break;
- case 3:return b=0x4f;break;
- case 4:return b=0x66;break;
- case 5:return b=0x6d;break;
- case 6:return b=0x7d;break;
- case 7:return b=0x07;break;
- case 8:return b=0x7f;break;
- case 9:return b=0x6f;break;
- default:return b=0;break;
-
- }
- }
- void delay1ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 12;
- j = 169;
- do
- {
- while (--j);
- } while (--i);
- }
- void delay10ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 117;
- j = 184;
- do
- {
- while (--j);
- } while (--i);
- }
- void main()
- { int i,b,c;
- int a[8]={0,1,2,3,4,5,6,7};
- while(1)
- { i=0;
- do
- {
- c=a[i];
- decode(c);
- P0=b;
- P1=i;
- delay1ms();
- i++;
- }
- while(i<8);
-
- delay10ms();
- }
- }
你的decode函数返回的是这个函数里面定义的b外面是没有的。所以P0=b中的b没有值默认为隐式声明。你可以用楼上的方法也可以用P0=decode(c)。一句换,P0要的是这个函数的返回值。
你可以试一试
b=decode(c);
P0=b;
然后把b定义成char型
灰常感谢!
再问一下,上面第二个问题可能没说清楚,就是在decode里面不能直接把数组元素拿来用吗?必须再定义一个中间变量c?
你根本就不需要这个函数,我上面说的只是纠正你的逻辑。可以直接用P0=num[i],其中num数组放的是数码管显示数字对应的十六进制编码。如果你非要放这个函数里面也可以。return num[c];break;就可以了。前提你的num声明放在#include下面最好声明为:char code num[8]={};用这个函数没什么作用绕了半天还是回到直接使用数组元素上面。
明白了,还以为都要跟汇编语言一样来个查表呢,,,,没想到直接访问数组更方便!谢谢指导!