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