这是我的代码:
#include <reg51.h>
#include <intrins.h>
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit key=P3^2;
code char LEDduan[]={
0x00,0x00,0x7e,0x42,0x42,0x7e,0x00,0x00, //显示0;
0x00,0x00,0x40,0x40,0x40,0x7e,0x00,0x00}; //显示1 ;
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=200;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++) //K为切换数字用;
{
P0=LEDwei[j++]; //位选;
LED74HC595(LEDduan[i]); //段选;
delay(2);
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;
}
板子上LED点阵用的74HC595芯片来实现扫描,此代码能实现数字转换功能,但有瑕疵;就是在0到1转换的瞬间其余的灯会闪烁一下熄灭,然后再显示1,问了其他人说是余辉现象,可是我已经消影了还有这种现象,但是1转换到0又没有这种现象;想了好久没结果,希望大虾给我提一提或是有另外能实现定时转换数字的代码,谢谢; |