LED点阵程序,点亮一个0都点不亮。。

2019-07-16 05:33发布

点阵为啥不听话啊,心都碎了。写个最简单的程序也不听话,就是全屏都亮。。
求大神帮忙,指点迷经
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar  table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar  table2[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
void delay(uint a)
{
   while(a--);
}

void main()
{
  uchar i;
  while(1)
  {
  for(i=0;i<8;i++)
  {
   P0=table1[i];
   P1=table2[i];
   
   delay(40);
   P0=0X00;
   }
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
晓颜SKY
1楼-- · 2019-07-17 01:05
你要用74HC138 74HC595 74HC164中的一款 还有8550三极管来驱动  要不是就会电流不够 亮不起了
horsewater
2楼-- · 2019-07-17 05:03
1)你的P0口有没有加上拉?  2)你的延时加长一些.  
丁一凡
3楼-- · 2019-07-17 05:24
#include <AT89X52.H>                                                //包含头文件

#define shuma P0                                                //定义P0口为数据
unsigned char b;                                               
unsigned char  table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit LED_1=P1^0;
void Delay(unsigned int i)                        //延时函数
{
        while(i--);                                                //延时长短由i决定
}                                       

void main(void)
{
        LED_1=0;                        //只是让P1^0L亮(即选择第一个数码管)
        while(1)                                //无限循环
        {
                for(;;)                                //       
            {
                  shuma=table1;
                  b++;
                          if(b>9)
                                  b=0;
                  Delay(30000);
                 }
        }
}用的共阳极的数码管,上面那个是第一个数码管从0闪到9
wkxboot
4楼-- · 2019-07-17 09:57
子龙007
5楼-- · 2019-07-17 10:32
 精彩回答 2  元偷偷看……
程程程小二
6楼-- · 2019-07-17 15:28
窝心辰 发表于 2012-6-7 14:40
把PO=0;去掉就可以显示“0”如果你共阴共阳没接反的话。

P0=0不能删除,这是为了消除“鬼影”的

一周热门 更多>