【新手求助】关于LED点阵切换数字问题

2019-07-15 11:12发布

问题:在切换数字的一瞬间有明显的余辉现象之后再显示后面的一个数字,想了2天了还是没结果,望大佬们不吝赐教;
#include <reg51.h>
#include <intrins.h>
typedef unsigned char u8;
**it SRCLK=P3^6;
**it RCLK=P3^5;
**it SER=P3^4;
**it key=P3^2;
code char LEDduan[]={
0x00,0x00,0x7e,0x42,0x42,0x7e,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00};
code char LEDwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 count=0,k=0;
void delay(u8 t)
{
u8 i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
void LED74HC595(u8 dat)
{
u8 i;
SRCLK=0;
RCLK=0;
for(i=0;i<8;i++)
{
SER=dat&0x80; //取出最高位;
dat<<=1; //取出次高位;
SRCLK=1; //数据向高位移动;
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
RCLK=0; //保存数据;
}
void LEDdisplay()
{
u8 i,j=0;
for(i=k;i<8+k;i++) //显示数据
{

P0=LEDwei[j++]; //位选;
LED74HC595(LEDduan[i]); //段选;
delay(5);
LED74HC595(0x00); //消影;

}
}
void zd()
{
TMOD|=0x01;
TH0=0x3c;
TL0=0xb0; //定时函数;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
zd();
while(1)
{
LEDdisplay();
}
}
void time()interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==20)//定时1S;
{
count=0;
k=k+8;
}
if(k>8)k=0;
}




0条回答

一周热门 更多>