我利用锁存器74HC595调试了一个共阳极数码管静态显示0-9的程序,但是显示的时候仍有误差(即有几个数字显示不完整,还会有抖动),求解。。。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint flag , i,c ;
sbit clk=P3^6;
sbit dat=P3^4;
sbit suo_cun=P3^5;
uchar volatile e,f;
uchar code tab[]={ 0xC0,// 0 ,共阳极
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
};
fa_shon(uchar k) //
{
//uchar i; //定义循环变量
for(i=0;i<8;i++) //因为是1字节是8位,所以循环8次
{
dat=k&0x80; //将要发送的数据与上0X01送到数据引脚
clk=0; //时钟引脚加低电平
_nop_();
_nop_();
clk=1; //时钟引脚加高电平
k<<=1; //将发送的数据左移1位
}
return(i) ;
}
void main()
{
/*TMOD=0x01;
TH0=15535/256;
TL0=15535%256;
EA=1;
ET0=1;
TR0=1;*/
while(1)
{
// uchar a;
// for(a=0;a<3;a++)
// {
if(c++>=300)
{ e++;
c=0;
}
fa_shon(tab[e%10]);
// fa_shon(tab[e%100/10]);
// fa_shon(tab[e/100]);
// }
suo_cun=0; //锁存为低电平
_nop_();
_nop_();
suo_cun=1; //锁存为高电平
flag=1;
}
}
/*
void tt()interrupt 1
{
TH0=15535/256;
TL0=15535%256;
f++;
if(f>=20)
{
f=0;
if(flag==1&&i==8)
{e++;
flag=0;
}
if(e>9)e=0;
}
} */
|