|
8*8點陣消隱問題請教
想用8*8的點陣做個心開流水燈,
硬件環(huán)境:
//P0口控制列
//通過74HC595串并轉(zhuǎn)換,控制行,
因為行數(shù)據(jù)是通過74HC595串并轉(zhuǎn)換得到的,每一列數(shù)據(jù)總是有拖尾現(xiàn)象。試了動態(tài)數(shù)碼管的消隱方法,好像不好使。而且到右側(cè),幾個點,整屏開始出現(xiàn)抖動,大家有什么好辦法,可以消隱,去除抖動。
195309jcqo4uyh49qd411a.jpg (603.37 KB, 下載次數(shù): 84)
下載附件
2017-4-25 20:12 上傳
195310dik0yz116p6thasz.jpg (506.39 KB, 下載次數(shù): 89)
下載附件
2017-4-25 20:12 上傳
195311rwz802ffvn0w30v3.jpg (504.05 KB, 下載次數(shù): 81)
下載附件
2017-4-25 20:12 上傳
下面是程序。
#include
#include
#define NOP() _nop_()
//P0口控制列
sbit MOSIO=P3^4; //通過74HC595串并轉(zhuǎn)換,控制行,
sbit R_CLK=P3^5;
sbit S_CLK=P3^6;
unsigned char code H[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02};
unsigned char code L[]={0xef,0xdf,0xbf,0x7f,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfd,0xfd,0xfb,0xf7};
void delay(unsigned int i)
{
unsigned int j;
for(i;i>0;i--)
for(j=30;j>0;j--);
}
void HC595SendData(unsigned char SendVal)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((SendVal<<i)&0x80) mosio="1;
else MOSIO=0;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
R_CLK=0;
NOP();
NOP();
R_CLK=1;
}
}
void D(unsigned char a,b)
{
HC595SendData(a); //通過74HC595串并轉(zhuǎn)換,控制行,
P0=b; //P0口控制列
}
void main(void)
{
unsigned char c,d;
unsigned int e;
for(d=1;d<17;d++)
{ e=10;
while(e--)
{
for(c=0;c<d;c++)[ size][="" font][="" backcolor][="" color]
{
D(H[c],L[c]);
delay(2);
D(0,0xff);
delay(1);
}
delay(3);
}
}
}
|
|