微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LED点阵程序,点亮一个0都点不亮。。

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

时间:10-02 整理:3721RD 点击:
点阵为啥不听话啊,心都碎了。写个最简单的程序也不听话,就是全屏都亮。
求大神帮忙,指点迷经
#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;
   }
  }
}

帮顶

什么现象?

把PO=0;去掉就可以显示“0”如果你共阴共阳没接反的话。

贴个原理图看看呢

正在学习点阵

没原理图,看不出问题的

你要用74HC138 74HC595 74HC164中的一款 还有8550三极管来驱动  要不是就会电流不够 亮不起了

1)你的P0口有没有加上拉?  2)你的延时加长一些.  

#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

------------

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

显示0    仅供参考  
#include <reg52.h>
sbit DU = P2^0; //数码管段选及点阵行选
sbit WE = P2^1; //数码管位选
sbit CS88 = P2^2; //8X8点阵使能及点阵列选
sbit LCDEN=P2^5;//LCD 1602
unsigned char  table1 []={0x7c,0x82};// 行亮
unsigned char table2 []={0xbb,0xc7};//分别对应相应的段亮
void delay(unsigned int t)
{
while(t--);
}
main()
{
unsigned char i;
    LCDEN=0;//关掉LCD1602 以免影响点阵管IO口电评
    WE=1;  
    P0=0Xff;
    WE=0;        //关掉数码管显示
while(1)
      {
           DU=1;
       P0=table1[i];//取显示数据
           DU=0;
           CS88=1;
           P0=table2[i];  //取段码
           CS88=0;
           delay(300); //扫描间隙延时
           i++;
           if(2==i)
             i=0;
       
                 
       
      }
}

学习了                              学习了

4楼绝对正解       验证只需把时间延长些慢扫描 你就可以看出i=2时开始出错           P0=0x00;可以加在while(1)之前      

学学习习   

把PO=0;去掉就可以显示“0”如果你共阴共阳没接反的话。

好的,我也在学习这个。

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

网站地图

Top