LED点阵程序,点亮一个0都点不亮。。
求大神帮忙,指点迷经
#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> //包含头文件 ------------
P0=0不能删除,这是为了消除“鬼影”的 显示0 仅供参考 学习了 学习了
4楼绝对正解 验证只需把时间延长些慢扫描 你就可以看出i=2时开始出错 P0=0x00;可以加在while(1)之前
学学习习
把PO=0;去掉就可以显示“0”如果你共阴共阳没接反的话。
好的,我也在学习这个。
#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
#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;
}
}
