单片机驱动点阵16*16综合C程序-包含各种效果
*******************/
/************************************************************/
/**************************左移显示***************************/
/************************************************************/
/************************************************************/
/************************************************************/
/*装一线数据子函数(即一行数据)*/
/********************************/
void yixian()
{
uchar s;
for(s=0;s<2;s++)/*循环2次,得到第1个字(代码存在数组1与2中)
与第2个字(代码存在数组2与3中)的某一行数值*/
{
BUF[s*2]=table[word+(32*s)+(line*2)];//左半屏代码,line表示行数,word表示字数
BUF[s*2+1]=table[word+(32*s+1)+(line*2)];//右半屏代码
}
}
/********************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai()
{
uchar temp,yi;
if(move<8)//处理移动次数小于8次的部分
{
yi=move;
temp=(BUF[1] 然后或上第2个字左半屏的8-yi次数,注此句是处理右半屏的数*/ song(~temp);//发送给74HC595 temp=(BUF[0] 然后或上第1个字右半屏的8-yi次数,注此句是处理左半屏的数*/ song(~temp);//发送给74HC595 } else//处理移动次数小于8次以外的部分 { yi=move-8; temp=(BUF[2] song(~temp);//发送给74HC595 temp=(BUF[1] song(~temp);//发送给74HC595 } } /********************************/ /************左移子程序**********/ /********************************/ void zou() { uchar i; while(word<256) { for(move=0;move<16;move++)//要移多少位? { for(i=0;i for(line=0;line<16;line++)//扫描16次,即完成一个字的移动 { yixian();//调用一线子程序 yipai();//调用数据转换子程序 LINE=line;//打开行线,即174HC154行线端 CLKR=1;//在74HC595处锁存起来 CLKR=0; CLKR=1; } } } word=word+32;//一个字显示完了,就显示下一个字 } } /************************************************************/ /************************************************************/ /**************************右移显示***************************/ /************************************************************/ /************************************************************/ /********************************/ /*将一行数据转换出来,然后显示*/ /********************************/ void yipai1() { uchar temp,yi; if(move<8)//处理移动次数小于8次的部分 { yi=move;//小于8次就直接给移动的次数 temp=(BUF[0]<(8-yi))|(BUF[1]>>yi);/*将第1个字的左半屏数左移8-yi次, 然后或上右半屏的yi次数,注此句是处理右半屏的数*/ song(~temp);//发送给74HC595 temp=(BUF[3]<(8-yi))|(BUF[0]>>yi);/*将第2个字的右半屏数与第1个字左 半屏的数左移8-yi次,然后或上右半屏的yi次数,注此句是处理左半屏的数*/ song(~temp);//发送给74HC595 } else//处理移动次数小于8次以外的部分 { yi=move-8;//不小于8次就给move-8次给变量 temp=(BUF[3]<(8-yi))|(BUF[0]>>yi);/*将第2个字的右半屏数左移8-yi次, 然后或上第1个字左半屏的yi次数,注此句是处理右半屏的数*/ song(~temp);//发送给74HC595 temp=(BUF[2]<(8-yi))|(BUF[3]>>yi);/*将第2个字的左半屏数左移8-yi次, 然后或上第2个字的右半屏的yi次数,注此句是处理左半屏的数*/ song(~temp);//发送给74HC595 } } /********************************/ /************右移子程序**********/ /********************************/ void you() { uchar i; while(word<256) { for(move=0;move<16;move++)//要移多少位? { for(i=0;i for(line=0;line<16;line++)//扫描16次,即完成一个字的移动 { yixian();//调用一线子程序 yipai1();//调用数据转换子程序 LINE=line;//打开行线,即174HC154行线端 CLKR=1;//在74HC595处锁存起来 CLKR=0; CLKR=1; } } } word=word+32;//一个字显示完了,就显示下一个字 } } /************************************************************/ /************************************************************/ /*************************上拉子函数**************************/ /************************************************************/ /************************************************************/ /******************************************/ /***********显示一个整体字子函数***********/ /******************************************/ void shang1()//快速上移完一个整体字 { ji=word;//将变量给计数器 for(line=0;line<16;line++)//循环16次得到一个整体字 {
单片机驱动点阵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)