1、点阵 左移 上移 右移 下移 下拉 等花样显示讲解学习点阵 左移 上移 右移 下移 下拉 等花样显示#include#define uint unsigned int#define uchar unsigned char#define sudu 20/*各种声明的声明*/sbit LAT_port=P20; sbit CLK_port=P21;sbit DI_port=P22;sbit G_port=P23;sbit A_port=P24;sbit B_port=P25;sbit C_port=P26;sbit D_port=P27;uchar move; /上移下移用的全局变量uchar t
2、emp; /缓冲用的uchar han;uchar zi;uchar code ziku=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
3、,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,
4、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,;uchar code ziku1=0x00,
5、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,
6、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,0
7、x00,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*/;uchar BUF4;/*子函数申明*/void delay(uint t);void xie595(uchar dat);void hangx
8、uan(uchar han);void huanchong();void zhuanhuanzuoyi();void zhuanhuanyouyi();/*延时*/void delay(uint t) while(t-) ;/*595输入函数*/void xie595(uchar dat) uchar i; CLK_port=0; for(i=0;i8;i+) if(dat&0x80)!=0) DI_port=1; else DI_port=0; CLK_port=1; /上升沿输入数据 CLK_port=0; dat=1; /*行扫描程序*/void hangxuan(uchar han)
9、switch(han) case 0: A_port = 0; B_port = 0; C_port = 0; D_port = 0; break; case 1: A_port = 1; B_port = 0; C_port = 0; D_port = 0; break; case 2: A_port = 0; B_port = 1; C_port = 0; D_port = 0; break; case 3: A_port = 1; B_port = 1; C_port = 0; D_port = 0; break; case 4: A_port = 0; B_port = 0; C_po
10、rt = 1; D_port = 0; break; case 5: A_port = 1; B_port = 0; C_port = 1; D_port = 0; break; case 6: A_port = 0; B_port = 1; C_port = 1; D_port = 0; break; case 7: A_port = 1; B_port = 1; C_port = 1; D_port = 0; break; case 8: A_port = 0; B_port = 0; C_port = 0; D_port = 1; break; case 9: A_port = 1; B
11、_port = 0; C_port = 0; D_port = 1; break; case 10: A_port = 0; B_port = 1; C_port = 0; D_port = 1; break; case 11: A_port = 1; B_port = 1; C_port = 0; D_port = 1; break; case 12: A_port = 0; B_port = 0; C_port = 1; D_port = 1; break; case 13: A_port = 1; B_port = 0; C_port = 1; D_port = 1; break; ca
12、se 14: A_port = 0; B_port = 1; C_port = 1; D_port = 1; break; case 15: A_port = 1; B_port = 1; C_port = 1; D_port = 1; break; /*缓冲*/void huanchong() uchar i; for(i=0;i2;i+) BUFi*2+1=zikuzi*32+i*32+han*2+1; /右半部分屏的数据 BUFi*2=zikuzi*32+i*32+han*2; /左半部分屏数据 /*左右转换*/void zhuanhuanzuoyi() /向左子函数 uchar wy;
13、 if(move8) wy=move; temp=(BUF2wy); /右半屏的数据处理 准备移动的屏左移(8-wy)位;看得见的右移wy位 xie595(temp); temp=(BUF1wy); /左半屏 同上 xie595(temp); else wy=(move-8); temp=(BUF3wy); /同上 xie595(temp); temp=(BUF2wy); xie595(temp); void zhuanhuanyouyi() /向右子函数 统统同上 方向改变 uchar wy; if(move(8-wy)|(BUF1(8-wy)|(BUF0(8-wy)|(BUF0(8-wy)
14、|(BUF3wy); xie595(temp); /*一般显示*/void yiban() zi=0; han=0; LAT_port=0; / 锁住595 G_port=1; /138 不使能 for(zi=0;zi4;zi+) /多少个字循环多少次 uint i; for(i=0;i2000;i+) /刷屏N次 xie595(zikuzi*32+han*2+1); xie595(zikuzi*32+han*2); LAT_port=1; /上升沿595输出数据 LAT_port=0; hangxuan(han); G_port=0; delay(30); G_port=1; /关屏 han
15、+; if(han=16) han=0; /*下拉*/void xiala() uint i,j=0; uint k; zi=0; han=0; LAT_port=0; G_port=1; for(k=0;k64;k+) /一个字要16 for(i=0;ij) han=0; j+; if(j15) G_port=1; j=0; delay(50000); zi+; if(zi=4) zi=0; /*上移*/void shangyi() uint i=0,j=0; uchar move=0; G_port=1; LAT_port=0; zi=0; han=0; for(j=0;j(zi+1)*1
16、6;j+) for(i=0;i(sudu*15);i+) xie595(zikuzi*32+han*2+1+move*2); /. xie595(zikuzi*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; /*下移*/void xiayi() uint i=0,j=0; uchar move=0; G_port=1; LAT_
17、port=0; zi=4; han=0; for(j=0;j(zi+2)*16;j+) for(i=0;i(sudu*15);i+) xie595(ziku1zi*32+han*2+1-move*2); xie595(ziku1zi*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(zi0) zi=4; /*左移*/void zuoyi() uchar
18、i; LAT_port=0; G_port=1; zi=0; han=0; for(zi=0;zi4;zi+) for(move=0;move16;move+) for(i=0;isudu;i+) for(han=0;han16;han+) huanchong(); zhuanhuanzuoyi(); LAT_port=1; LAT_port=0; hangxuan(han); G_port=0; delay(30); G_port=1; /*右移*/void youyi() uchar i; LAT_port=0; G_port=1; zi=0; han=0; for(zi=0;zi4;zi
19、+) for(move=0;move16;move+) /移动16次置0 for(i=0;isudu;i+) for(han=0;han16;han+) huanchong(); zhuanhuanyouyi(); LAT_port=1; LAT_port=0; hangxuan(han); G_port=0; delay(30); G_port=1; void main() while(1) yiban(); delay(30000); xiala(); delay(30000); shangyi(); /各种调用 delay(30000); xiayi();delay(30000); zuoyi(); delay(30000); youyi();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1