單片機(jī)驅(qū)動點(diǎn)陣16*16綜合C程序-包含各種效果
/********************************/
/*******將一個字右移16位***********/
/********************************/
void youla()
{
uchar i;
while(word<256)
{
for(move=0;move<16;move++)//要移多少位?
you3();
for(i=0;i<150;i++)
you3();
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************左覆蓋***************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數(shù)據(jù)轉(zhuǎn)換出來,然后顯示*/
/********************************/
void yipai5()
{
uchar temp,yi;
if(move<8)//處理移動次數(shù)小于8次的部分
{
yi=move;
temp=(BUF[1]);//發(fā)送左半屏的數(shù),在移動右半屏?xí)r,左半屏不動
song(~temp);//發(fā)送給74HC595
temp=(BUF[2]&~gai)|(BUF[0]&gai);
song(~temp);//發(fā)送給74HC595
}
else//處理移動次數(shù)小于8次以外的部分
{
yi=move-8;
temp=(BUF[3]&~gai)|(BUF[1]&gai);/*將第1個字的左半屏數(shù)第0列清0或上第二
個字左半屏最后1行*/
song(~temp);//發(fā)送給74HC595
temp=BUF[2];//發(fā)送右半屏的數(shù),在移動左半屏?xí)r,右半屏不動
song(~temp);//發(fā)送給74HC595
}
}
/********************************/
/*****掃描16次,形成一列覆蓋*****/
/********************************/
void fu3()
{
uchar i;
for(i=0;i<2;i++)//一字移動的速度
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調(diào)用一線子程序
yipai5();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
/********************************/
/***每列移動16次后,形成覆蓋****/
/********************************/
void zoufu()
{
uchar o;
while(word<256)
{
for(move=0;move<16;move++)//移動16次,形成覆蓋
{
gai=table3[move];//移動一次改變一次覆蓋變量
fu3();//調(diào)用覆蓋子程序
}
for(o=0;o<60;o++)//一字完后,停一段時間
{
fu3();//調(diào)用覆蓋子程序
}
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************右覆蓋***************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數(shù)據(jù)轉(zhuǎn)換出來,然后顯示*/
/********************************/
void yipai4()
{
uchar temp,yi;
if(move<8)//處理移動次數(shù)小于8次的部分
{
yi=move;
temp=(BUF[1]&gai)|(BUF[3]&~gai);/*將第1個字的右半屏數(shù)第0列清0或上第二
個字右半屏最后1行*/
song(~temp);//發(fā)送給74HC595
temp=(BUF[0]);//發(fā)送左半屏的數(shù),在移動右半屏?xí)r,左半屏不動
song(~temp);//發(fā)送給74HC595
}
else//處理移動次數(shù)小于8次以外的部分
{
yi=move-8;
temp=BUF[3];//發(fā)送右半屏的數(shù),在移動左半屏?xí)r,右半屏不動
song(~temp);//發(fā)送給74HC595
temp=(BUF[0]&gai)|(BUF[2]&~gai);/*將第1個字的左半屏數(shù)第0列清0或上第二
個字左半屏最后1行*/
song(~temp);//發(fā)送給74HC595
}
}
/********************************/
/*****掃描16次,形成一列覆蓋*****/
/********************************/
void fu2()
{
uchar i;
for(i=0;i<2;i++)//一字移動的速度
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調(diào)用一線子程序
yipai4();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
/********************************/
/***每列移動16次后,形成覆蓋****/
/********************************/
void youfu()
{
uchar o;
while(word<256)
{
for(move=0;move<16;move++)//移動16次,形成覆蓋
{
gai=table2[move];//移動一次改變一次覆蓋變量
fu2();//調(diào)用覆蓋子程序
}
for(o=0;o<60;o++)//一字完后,停一段時間
{
fu2();//調(diào)用覆蓋子程序
}
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************主函數(shù)***************************/
/************************************************************/
/************************************************************/
void main()
{
while(1)
{
word=0;//初始化變量
jian();//間斷顯示子程序
word=0;
shang();//調(diào)用上移子程序
word=128;//賦初值以便形成下移
xia();//調(diào)用下移子程序
word=0;
zou();//調(diào)用左移子程序
word=0;
you();//調(diào)用右移子程序
word=0;
shangla();//調(diào)用上拉子程序
word=128;
xiala();//調(diào)用下拉子程序
word=0;
zoula();//調(diào)用左拉子程序
word=0;
youla();//調(diào)用右拉子程序
word=0;
zoufu();//調(diào)用左覆蓋子程序
word=0;
youfu();//調(diào)用右覆蓋子程序
}
}
評論