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条回答
↗旋风
1楼-- · 2019-07-17 20:20
显示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;
       
                 

       
      }
}
chenengood
2楼-- · 2019-07-17 20:54
学习了                              学习了
↗旋风
3楼-- · 2019-07-17 23:28
4楼绝对正解       验证只需把时间延长些慢扫描 你就可以看出i=2时开始出错           P0=0x00;可以加在while(1)之前      
天蝎※座
4楼-- · 2019-07-17 23:37
 精彩回答 2  元偷偷看……
chenshichao541
5楼-- · 2019-07-18 04:56

把PO=0;去掉就可以显示“0”如果你共阴共阳没接反的话。
笑龙仔
6楼-- · 2019-07-18 09:01
好的,我也在学习这个。

一周热门 更多>