微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > C51菜鸟,关于动态数码管的显示程序,求指导!

C51菜鸟,关于动态数码管的显示程序,求指导!

时间:10-02 整理:3721RD 点击:
今天花了不少时间写这个程序,拿到keil上跑起来就出问题了。程序的目标是把主程序里1维数组中的元素动态显示出来,问题主要有:
1.想用decode函数返回数字对应的段选码,但是貌似只有第一次传到了P0口,后来的b可以正常返回,只是到不了P0口。
2.C语言学的不太好,所以一开始这么定义的 int decode(int a),然后各种提示错误,没办法加了个中间变量c
源程序附上,求指导!

  1. #include<reg51.h>

  2. int  decode(int c)
  3. {  int b;
  4.    switch(c)
  5.    {
  6.      case 0:return b=0x3f;break;
  7.          case 1:return b=0x06;break;
  8.          case 2:return b=0x5b;break;
  9.          case 3:return b=0x4f;break;
  10.          case 4:return b=0x66;break;
  11.          case 5:return b=0x6d;break;
  12.          case 6:return b=0x7d;break;
  13.          case 7:return b=0x07;break;
  14.          case 8:return b=0x7f;break;
  15.          case 9:return b=0x6f;break;
  16.          default:return b=0;break;
  17.          
  18.    }
  19. }

  20. void delay1ms()                //@12.000MHz
  21. {
  22.         unsigned char i, j;

  23.         i = 12;
  24.         j = 169;
  25.         do
  26.         {
  27.                 while (--j);
  28.         } while (--i);
  29. }
  30. void delay10ms()                //@12.000MHz
  31. {
  32.         unsigned char i, j;

  33.         i = 117;
  34.         j = 184;
  35.         do
  36.         {
  37.                 while (--j);
  38.         } while (--i);
  39. }

  40. void main()
  41. {   int i,b,c;
  42.     int a[8]={0,1,2,3,4,5,6,7};
  43.         while(1)
  44.         {  i=0;   
  45.           do
  46.                {
  47.                 c=a[i];
  48.                      decode(c);
  49.                      P0=b;
  50.                          P1=i;
  51.                          delay1ms();
  52.                          i++;
  53.                          }
  54.                          while(i<8);

  55.                  
  56.                  delay10ms();
  57.         }
  58. }

复制代码



你的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]={};用这个函数没什么作用绕了半天还是回到直接使用数组元素上面。

明白了,还以为都要跟汇编语言一样来个查表呢,,,,没想到直接访问数组更方便!谢谢指导!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top