新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机驱动点阵16*16综合C程序-包含各种效果

单片机驱动点阵16*16综合C程序-包含各种效果

作者: 时间:2016-11-29 来源:网络 收藏

/********************************/

/*******将一个字右移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;//一个字显示完了,就显示下一个字

}

}

/************************************************************/

/************************************************************/

/**************************主函数***************************/

/************************************************************/

/************************************************************/

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();//调用右覆盖子程序

}

}


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭