点阵 左移上移 右移 下移 下拉 等花样显示讲解学习.docx
《点阵 左移上移 右移 下移 下拉 等花样显示讲解学习.docx》由会员分享,可在线阅读,更多相关《点阵 左移上移 右移 下移 下拉 等花样显示讲解学习.docx(14页珍藏版)》请在冰豆网上搜索。
![点阵 左移上移 右移 下移 下拉 等花样显示讲解学习.docx](https://file1.bdocx.com/fileroot1/2023-1/25/cabb0d4a-bca4-4faf-8065-0e5b083540a4/cabb0d4a-bca4-4faf-8065-0e5b083540a41.gif)
点阵左移上移右移下移下拉等花样显示讲解学习
点阵左移上移右移下移下拉等花样显示
#include
#defineuintunsignedint
#defineucharunsignedchar
#definesudu20
/***各种声明的声明*****/
sbitLAT_port=P2^0;
sbitCLK_port=P2^1;
sbitDI_port=P2^2;
sbitG_port=P2^3;
sbitA_port=P2^4;
sbitB_port=P2^5;
sbitC_port=P2^6;
sbitD_port=P2^7;
ucharmove;//上移下移用的全局变量
uchartemp;//缓冲用的
ucharhan;
ucharzi;
ucharcodeziku[]={
0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,
0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xFC,0x7F,0xFE,/*"未命名文件",0*/
0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE7,0x7C,0x9F,
0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xFF,0xBF,0xFF,/*"李",0*/
0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF7,0x03,0xE0,
0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB7,0x1E,0xB0,/*"慧",1*/
0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF7,0xF7,0xF7,
0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF5,0xFE,0xFB,/*"丹",2*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
ucharcodeziku1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF7,0xF7,0xF7,
0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF5,0xFE,0xFB,/*"丹",2*/
0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF7,0x03,0xE0,
0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB7,0x1E,0xB0,/*"慧",1*/
0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE7,0x7C,0x9F,
0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xFF,0xBF,0xFF,/*"李",0*/
0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,
0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xFC,0x7F,0xFE,/*"未命名文件",0*/
};
ucharBUF[4];
/***子函数申明****/
voiddelay(uintt);
voidxie595(uchardat);
voidhangxuan(ucharhan);
voidhuanchong();
voidzhuanhuanzuoyi();
voidzhuanhuanyouyi();
/***延时****///
voiddelay(uintt)
{
while(t--);
}
/****595输入函数****///
voidxie595(uchardat)
{
uchari;
CLK_port=0;
for(i=0;i<8;i++)
{
if((dat&0x80)!
=0)
DI_port=1;
else
DI_port=0;
CLK_port=1;//上升沿输入数据
CLK_port=0;
dat<<=1;
}
}
/*******行扫描程序*******///
voidhangxuan(ucharhan)
{
switch(han)
{
case0:
A_port=0;B_port=0;C_port=0;D_port=0;
break;
case1:
A_port=1;B_port=0;C_port=0;D_port=0;
break;
case2:
A_port=0;B_port=1;C_port=0;D_port=0;
break;
case3:
A_port=1;B_port=1;C_port=0;D_port=0;
break;
case4:
A_port=0;B_port=0;C_port=1;D_port=0;
break;
case5:
A_port=1;B_port=0;C_port=1;D_port=0;
break;
case6:
A_port=0;B_port=1;C_port=1;D_port=0;
break;
case7:
A_port=1;B_port=1;C_port=1;D_port=0;
break;
case8:
A_port=0;B_port=0;C_port=0;D_port=1;
break;
case9:
A_port=1;B_port=0;C_port=0;D_port=1;
break;
case10:
A_port=0;B_port=1;C_port=0;D_port=1;
break;
case11:
A_port=1;B_port=1;C_port=0;D_port=1;
break;
case12:
A_port=0;B_port=0;C_port=1;D_port=1;
break;
case13:
A_port=1;B_port=0;C_port=1;D_port=1;
break;
case14:
A_port=0;B_port=1;C_port=1;D_port=1;
break;
case15:
A_port=1;B_port=1;C_port=1;D_port=1;
break;
}
}
/*****缓冲****************/
voidhuanchong()
{
uchari;
for(i=0;i<2;i++)
{
BUF[i*2+1]=ziku[zi*32+i*32+han*2+1];//右半部分屏的数据
BUF[i*2]=ziku[zi*32+i*32+han*2];//左半部分屏数据
}
}
/*********左右转换********/
voidzhuanhuanzuoyi()//向左子函数
{
ucharwy;
if(move<8)
{
wy=move;
temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy));//右半屏的数据处理准备移动的屏左移(8-wy)位;看得见的右移wy位
xie595(temp);
temp=((BUF[1]<<(8-wy))|(BUF[0]>>wy));//左半屏同上
xie595(temp);
}
else
{
wy=(move-8);
temp=((BUF[3]<<(8-wy))|(BUF[2]>>wy));//同上
xie595(temp);
temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy));
xie595(temp);
}
}
voidzhuanhuanyouyi()//向右子函数统统同上方向改变
{
ucharwy;
if(move<8)
{
wy=move;
temp=((BUF[0]>>(8-wy))|(BUF[1]<xie595(temp);
temp=((BUF[3]>>(8-wy))|(BUF[0]<xie595(temp);
}
else
{
wy=(move-8);
temp=((BUF[3]>>(8-wy))|(BUF[0]<xie595(temp);
temp=((BUF[2]>>(8-wy))|(BUF[3]<xie595(temp);
}
}
/***一般显示***********/
voidyiban()
{
zi=0;
han=0;
LAT_port=0;//锁住595
G_port=1;//138不使能
for(zi=0;zi<4;zi++)//多少个字循环多少次
{
uinti;
for(i=0;i<2000;i++)//刷屏N次
{
xie595(ziku[zi*32+han*2+1]);
xie595(ziku[zi*32+han*2]);
LAT_port=1;//上升沿595输出数据
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;//关屏
han++;
if(han==16)
han=0;
}
}
}
/**********下拉******/
voidxiala()
{
uinti,j=0;
uintk;
zi=0;
han=0;
LAT_port=0;
G_port=1;
for(k=0;k<64;k++)//一个字要16
{
for(i=0;i{
xie595(ziku[zi*32+han*2+1]);//先写高位
xie595(ziku[zi*32+han*2]);
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
han++;
if(han==16)
han=0;
if(han>j)
han=0;
}
j++;
if(j>15)
{
G_port=1;
j=0;
delay(50000);
zi++;
if(zi==4)
zi=0;
}
}
}
/*********上移***********/
voidshangyi()
{
uinti=0,j=0;
ucharmove=0;
G_port=1;
LAT_port=0;
zi=0;
han=0;
for(j=0;j<(zi+1)*16;j++)
{
for(i=0;i<(sudu*15);i++)
{
xie595(ziku[zi*32+han*2+1+move*2]);//......
xie595(ziku[zi*32+han*2+move*2]);
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
han++;
if(han==16)
han=0;
}
move++;
if(move==16)
{
move=0;
zi++;
if(zi==4)
zi=0;
}
}
}
/*********下移***********/
voidxiayi()
{
uinti=0,j=0;
ucharmove=0;
G_port=1;
LAT_port=0;
zi=4;
han=0;
for(j=0;j<(zi+2)*16;j++)
{
for(i=0;i<(sudu*15);i++)
{
xie595(ziku1[zi*32+han*2+1-move*2]);
xie595(ziku1[zi*32+han*2-move*2]);
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
han++;
if(han==16)
han=0;
}
move++;
if(move==16)
{
move=0;
zi--;
if(zi<0)
zi=4;
}
}
}
/*******左移***************/
voidzuoyi()
{
uchari;
LAT_port=0;
G_port=1;
zi=0;
han=0;
for(zi=0;zi<4;zi++)
{
for(move=0;move<16;move++)
{
for(i=0;i{
for(han=0;han<16;han++)
{
huanchong();
zhuanhuanzuoyi();
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
}
}
}
}
}
/********右移**********/
voidyouyi()
{
uchari;
LAT_port=0;
G_port=1;
zi=0;
han=0;
for(zi=0;zi<4;zi++)
{
for(move=0;move<16;move++)//移动16次置0
{
for(i=0;i{
for(han=0;han<16;han++)
{
huanchong();
zhuanhuanyouyi();
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
}
}
}
}
}
voidmain()
{
while
(1)
{
yiban();
delay(30000);
xiala();
delay(30000);
shangyi();//各种调用
delay(30000);
xiayi();
delay(30000);
zuoyi();
delay(30000);
youyi();
}
}