菜鸟设计的数码管滚动,怎么数码管老是闪烁啊,晃眼。...
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar codeDSY_CODE1[]={0xbf,0xbf,0x09,0x06,0xc7,0xc7,0x40,0xbf};//,,0x46,0x21,0x06,0x0e0xbf,0xbf,,0xbf ,0xbf
uchar codeDSY_CODE2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//延时
void DelayMS(uint xms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//主程序
void main()
{
while(1)
{uint num,num2;
for(num2=0;num2<8;num2++)
{ P2=0xff;
DelayMS(10);
P2=DSY_CODE2[num2]; //wei
for(num=0;num<8;num++)
{
P0=DSY_CODE1[num]; //duan
DelayMS(10);
P0=0xff;
P2=_crol_(P2,1);
}
}
}
这种问题,很有可能和延时有关。,改小或者改大调试下
嗯嗯,要多试试扫描数码管的延时,多用几个值试试,
恩 应该是延时参数的问题 我看了有的视频教程上1ms参数是148 小编也可以单步运行仿真一下 或者可以弄个仿真芯片 一步一步看结果
改成1ms试一试,可能是延时时间太长了
{uint num,num2; //这个为什么在这里定义,每次循环还重新定义下,建议放在while外面
for(num2=0;num2<8;num2++)
{ P2=0xff;
DelayMS(10);
P2=DSY_CODE2[num2]; //wei //这里定义了位码
for(num=0;num<8;num++)
{
P0=DSY_CODE1[num]; //duan
DelayMS(10);
P0=0xff;
P2=_crol_(P2,1); //这里又移动位码 你要实现什么样的功能,是一个数码管里面来回滚动显示数字,还是一个数码管显示一个数字,数码管和数字都滚动显示?
}
}
建议改成
uint num,num2;
P2 = 0xfe;
while(1)
{
for(num=0;num<8;num++)
{
P0=DSY_CODE1[num]; //duan
DelayMS(10);
P0=0xff;
P2=_crol_(P2,1);
}
}
或者
for(num2=0;num2<8;num2++)
{ P2=0xff;
DelayMS(10);
P2=DSY_CODE2[num2]; //wei
for(num=0;num<8;num++)
{
P0=DSY_CODE1[num]; //duan
DelayMS(10);
P0=0xff;
}
}
这个只有一个原因扫描速度不够
延时改成1~3MS左右最佳