单片机驱动点阵16*16综合C程序-包含各种效果
while(word>
yi次数,注此句是处理左半屏的数*/
song(~temp);//发送给74HC595
}
}
/********************************/
/*******将一个字移一位***********/
/********************************/
void you3()
{
for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
{
yixian();//调用一线子程序
yipai3();//调用数据转换子程序
LINE=line;//打开行线,即174HC154行线端
CLKR=1;//在74HC595处锁存起来
CLKR=0;
CLKR=1;
}
}
/********************************/
/*******将一个字右移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;//一个字显示完了,就显示下一个字
}
}
/************************************************************/
/************************************************************/
/**************************左覆盖***************************/
/************************************************************/
/************************************************************/
/********************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai5()
{
uchar temp,yi;
if(move<8)//处理移动次数小于8次的部分
{
yi=move;
temp=(BUF[1]);//发送左半屏的数,在移动右半屏时,左半屏不动
song(~temp);//发送给74HC595
temp=(BUF[2]&~gai)|(BUF[0]&gai);
song(~temp);//发送给74HC595
}
else//处理移动次数小于8次以外的部分
{
yi=move-8;
temp=(BUF[3]&~gai)|(BUF[1]&gai);/*将第1个字的左半屏数第0列清0或上第二
个字左半屏最后1行*/
song(~temp);//发送给74HC595
temp=BUF[2];//发送右半屏的数,在移动左半屏时,右半屏不动
song(~temp);//发送给74HC595
}
}
/********************************/
/*****扫描16次,形成一列覆盖*****/
/********************************/
void fu3()
{
uchar i;
for(i=0;i<2;i++)//一字移动的速度
{
for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
{
yixian();//调用一线子程序
yipai5();//调用数据转换子程序
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();//调用覆盖子程序
}
for(o=0;o<60;o++)//一字完后,停一段时间
{
fu3();//调用覆盖子程序
}
word=word+32;//一个字显示完了,就显示下一个字
}
}
/************************************************************/
/************************************************************/
/**************************右覆盖***************************/
/************************************************************/
/************************************************************/
/********************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai4()
{
uchar temp,yi;
if(move<8)//处理移动次数小于8次的部分
{
yi=move;
temp=(BUF[1]&gai)|(BUF[3]&~gai);/*将第1个字的右半屏数第0列清0或上第二
个字右半屏最后1行*/
song(~temp);//发送给74HC595
temp=(BUF[0]);//发送左半屏的数,在移动右半屏时,左半屏不动
song(~temp);//发送给74HC595
}
else//处理移动次数小于8次以外的部分
{
yi=move-8;
temp=BUF[3];//发送右半屏的数,在移动左半屏时,右半屏不动
song(~temp);//发送给74HC595
temp=(BUF[0]&gai)|(BUF[2]&~gai);/*将第1个字的左半屏数第0列清0或上第二
个字左半屏最后1行*/
song(~temp);//发送给74HC595
}
}
/********************************/
/*****扫描16次,形成一列覆盖*****/
/********************************/
void fu2()
{
uchar i;
for(i=0;i<2;i++)//一字移动的速度
{
for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
{
yixian();//调用一线子程序
yipai4();//调用数据转换子程序
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();//调用覆盖子程序
}
for(o=0;o<60;o++)//一字完后,停一段时间
{
fu2();//调用覆盖子程序
}
word=word+32;//一个字显示完了,就显示下一个字
}
}
/*******************************
单片机驱动点阵16*1 相关文章:
- 51单片机驱动点阵16*16上移C程序(11-29)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)