51單片機+點陣8*8上、下、左、右移顯示C程序
}
void xian()
{
uchar i;
while(word24)//需要顯示3個字,公式=8*N個字,比如四個字就是4*8=32
{
for(move=0;move8;move++)//要移多少位?
{
for(i=0;ishudu;i++)//一字移動的速度
{
for(line=0;line8;line++)//掃描8次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai();//調用數據轉換子程序
LINE=line;//打開行線,即74HC138行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
word=word+8;//一個字顯示完了,就顯示下一個字
}
word=0;//清0重新開始
}
/********************************/
/************主程序*************/
/********************************/
void main()
{
while(1)
{
xian();
}
}
四、右移
#includereg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LINE P1//定義行線IO口,即74HC154控制端
#define shudu 120//字移動的速度
sbit DATA=P3^5;//74HC595數據端
sbit CLK=P3^7;//74HC595移位脈沖端
sbit CLKR=P3^6;//74HC595數據鎖存端
uchar move;//移動幾位變量
uchar line;//行變量
uint word;//字節變量
uchar BUF[2];//2組緩存數組以便動態更改數據
uchar code table[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3C,0x00,0x18,0x00,0x7E,0x00,0x00,
0x08,0x08,0x7F,0x49,0x7F,0x08,0x08,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};//字模數組
/********************************/
/**74HC595移位寄存器送數子函數***/
/********************************/
void song(uchar z)//帶參數函數
{
uchar num,hang;//定義變量
hang=z;//將形參給變量
for(num=0;num8;num++)//移動8次將數據發送完畢
{
if(hang0x01==1)//將高7位屏蔽掉,保留最低位判斷
DATA=1;//為1就將74HC595數據端置1
else
DATA=0;//否則給0
CLK=0;//上升沿送走數據
CLK=1;//高電平形成上升沿
hang>>=1;//將數移走一位
}
}
/********************************/
/*裝一線數據子函數(即一行數據)*/
/********************************/
void yixian()
{
BUF[0]=table[word+line];//第1個字代碼裝入緩存數組0,line表示行數,word表示字數
BUF[1]=table[word+8+line];//第2個字代碼裝入緩存數組1
}
/********************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai()
{
uchar temp,yi;//定義兩個變量
yi=move;//將要移多少位給變量yi
temp=(BUF[1](8-yi))|(BUF[0]>>yi);/*將第1個字即數組0左移yi(yi只是代號,比如1位)位
,然后將第下一個字即數組1右移8-yi位,然后或一下,這樣就會得到要發送的數*/
song(~temp);//發送給74HC595
}
void xian()
{
uchar i;
while(word24)//需要顯示3個字,公式=8*N個字,比如四個字就是4*8=32
{
for(move=0;move8;move++)//要移多少位?
{
for(i=0;ishudu;i++)//一字移動的速度
{
for(line=0;line8;line++)//掃描8次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai();//調用數據轉換子程序
LINE=line;//打開行線,即74HC138行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
word=word+8;//一個字顯示完了,就顯示下一個字
}
word=0;//清0重新開始
}
/********************************/
/************主程序*************/
/********************************/
void main()
{
while(1)
{
xian();
}
}
評論