我利用鎖存器74HC595調(diào)試了一個(gè)共陽(yáng)極數(shù)碼管靜態(tài)顯示0-9的程序,但是顯示的時(shí)候仍有誤差(即有幾個(gè)數(shù)字顯示不完整,還會(huì)有抖動(dòng)),求解。。。
#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 ,共陽(yáng)極
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
};
fa_shon(uchar k) //
{
//uchar i; //定義循環(huán)變量
for(i=0;i<8;i++) //因?yàn)槭?字節(jié)是8位,所以循環(huán)8次
{
dat=k&0x80; //將要發(fā)送的數(shù)據(jù)與上0X01送到數(shù)據(jù)引腳
clk=0; //時(shí)鐘引腳加低電平
_nop_();
_nop_();
clk=1; //時(shí)鐘引腳加高電平
k<<=1; //將發(fā)送的數(shù)據(jù)左移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;
}
} */
|