点阵 左移上移 右移 下移 下拉 等花样显示讲解学习文档格式.docx
《点阵 左移上移 右移 下移 下拉 等花样显示讲解学习文档格式.docx》由会员分享,可在线阅读,更多相关《点阵 左移上移 右移 下移 下拉 等花样显示讲解学习文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
未命名文件"
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,/*"
李"
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,
};
ucharcodeziku1[]={
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;
case2:
B_port=1;
case3:
case4:
C_port=1;
case5:
case6:
case7:
case8:
D_port=1;
case9:
case10:
case11:
case12:
case13:
case14:
case15:
/*****缓冲****************/
voidhuanchong()
2;
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]>
//左半屏同上
else
wy=(move-8);
temp=((BUF[3]<
(8-wy))|(BUF[2]>
//同上
voidzhuanhuanyouyi()//向右子函数统统同上方向改变
temp=((BUF[0]>
(8-wy))|(BUF[1]<
temp=((BUF[3]>
(8-wy))|(BUF[0]<
temp=((BUF[2]>
(8-wy))|(BUF[3]<
}
/***一般显示***********/
voidyiban()
zi=0;
han=0;
LAT_port=0;
//锁住595
G_port=1;
//138不使能
for(zi=0;
zi<
4;
zi++)//多少个字循环多少次
uinti;
for(i=0;
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;
for(k=0;
k<
64;
k++)//一个字要16
{
sudu*15;
i++)//
{
//先写高位
if(han>
j)
j++;
if(j>
15)
{
j=0;
delay(50000);
zi++;
if(zi==4)
zi=0;
}
/*********上移***********/
voidshangyi()
uinti=0,j=0;
ucharmove=0;
for(j=0;
j<
(zi+1)*16;
j++)
(sudu*15);
{
xie595(ziku[zi*32+han*2+1+move*2]);
//......
xie595(ziku[zi*32+han*2+move*2]);
move++;
if(move==16)
move=0;
zi++;
if(zi==4)
zi=0;
/*********下移***********/
voidxiayi()
zi=4;
(zi+2)*16;
xie595(ziku1[zi*32+han*2+1-move*2]);
xie595(ziku1[zi*32+han*2-move*2]);
}
move++;
if(move==16)
{
zi--;
if(zi<
0)
zi=4;
}
/*******左移***************/
voidzuoyi()
zi++)
for(move=0;
move<
16;
move++)
for(i=0;
sudu;
for(han=0;
han<
han++)
{
huanchong();
zhuanhuanzuoyi();
LAT_port=1;
LAT_port=0;
hangxuan(han);
G_port=0;
delay(30);
G_port=1;
}
/********右移**********/
voidyouyi()
move++)//移动16次置0
zhuanhuanyouyi();
voidmain()
while
(1)
yiban();
delay(30000);
xiala();
shangyi();
//各种调用
xiayi();
delay(30000);
zuoyi();
youyi();