📄 dianzhen3左右移.c
字号:
#include <reg51.h> // 引用标准库的头文件
#define uchar unsigned char
#define uint unsigned int
sbit sh_cp=P3^0; //595时钟端
sbit ds=P3^1; //595数据端
sbit st_cp=P3^2; //595锁存端
uchar num=20; //汉字个数
uchar code tab[]={ //取码方式 阴码 逆向 逐列 16×16 十六进制
//《(0) 单(1) 片(2) 机(3) 开(4) 发(5) 典(6) 型(7) 模(8) 块(9) 设(10) 计(11) 》(12)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x01,0x20,0x02,
0x90,0x04,0x48,0x09,0x24,0x12,0x12,0x24,0x09,0x48,0x04,0x90,0x02,0x20,0x00,0x00,/*"《",0*/
0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",1*/
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,/*"片",2*/
0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,/*"机",3*/
0x40,0x00,0x42,0x40,0x42,0x20,0x42,0x10,0x42,0x0C,0xFE,0x03,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0xFE,0x7F,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x00,0x00,/*"开",4*/
0x00,0x40,0x10,0x20,0x3E,0x10,0x10,0x88,0x10,0x87,0xF0,0x41,0x9F,0x46,0x90,0x28,
0x90,0x10,0x92,0x28,0x94,0x27,0x1C,0x40,0x10,0xC0,0x10,0x40,0x10,0x00,0x00,0x00,/*"发",5*/
0x00,0x00,0x00,0x04,0x00,0x84,0xF8,0x47,0x48,0x64,0x48,0x3C,0xFF,0x17,0x48,0x04,
0x48,0x04,0xFF,0x07,0x48,0x0C,0x48,0x34,0xF8,0xE7,0x00,0x44,0x00,0x04,0x00,0x00,/*"典",6*/
0x10,0x40,0x12,0x42,0x92,0x49,0x7E,0x48,0x12,0x48,0x12,0x48,0xFE,0x49,0x12,0x7E,
0x12,0x48,0x10,0x48,0xFC,0x48,0x00,0x4A,0x00,0x4C,0xFF,0x4B,0x00,0x40,0x00,0x00,/*"型",7*/
0x10,0x03,0xD0,0x00,0xFF,0xFF,0x50,0x00,0x90,0x00,0x04,0x84,0xF4,0x85,0x54,0x45,
0x5F,0x35,0x54,0x0F,0x54,0x15,0x5F,0x25,0xF4,0x65,0x04,0xC4,0x00,0x44,0x00,0x00,/*"模",8*/
0x10,0x08,0x10,0x18,0xFF,0x0F,0x10,0x04,0x10,0x85,0x00,0x41,0x08,0x31,0x08,0x0D,
0xFF,0x03,0x08,0x05,0x08,0x09,0x08,0x11,0xF8,0x31,0x00,0x61,0x00,0x21,0x00,0x00,/*"块",9*/
0x40,0x00,0x41,0x00,0xCE,0x7F,0x04,0x20,0x00,0x90,0x80,0x80,0x40,0x40,0xBE,0x43,
0x82,0x2C,0x82,0x10,0x82,0x10,0xBE,0x2C,0xC0,0x43,0x40,0xC0,0x40,0x40,0x00,0x00,/*"设",10*/
0x20,0x00,0x21,0x00,0x2E,0x00,0xE4,0x7F,0x00,0x20,0x00,0x10,0x20,0x08,0x20,0x00,
0x20,0x00,0x20,0x00,0xFF,0xFF,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,/*"计",11*/
0x02,0x20,0x04,0x90,0x09,0x48,0x12,0x24,0x24,0x12,0x48,0x09,0x90,0x04,0x20,0x02,
0x40,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"》",12*/
/*-- 调入了一幅图像:"心"型 --*/
0x00,0x00,0x3C,0x38,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x7F,0xFC,0x3F,0xF8,0x1F,0xF0,0x0F,0xE0,0x07,0xC0,0x03,0x00,0x00,
//=========================清 屏==============6个字模==============================
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,
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,
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,
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,
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,
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,
};
void send(uchar dat595); //595发送8位扫描段码子程序
void delay(uint n); //延时子程序
void disp(uchar k); //显示子程序
void dispmove(void); //左右移动显示子程序
main() //主程序
{
while(1)
{
dispmove(); //显示
}
}
void send(uchar dat595) //595发送8位扫描段码子程序
{
uchar dat=dat595; //把要发送的数据给dat
uint i;
for(i=0;i<8;i++) //8位发送循环
{
dat<<=1; //数据左移一位至CY 即先发送高位
ds=CY; //数据送至595的数据端
sh_cp=0; //时钟产生上升沿
sh_cp=1; //
}
}
void delay(uint n) //延时子程序
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<100;j++);
}
void disp(uchar k)
{ uchar i,row,j,m;
uint g;
for(j=0;j<5;j++) //动态显示5次后,再移动
{
row=0x08; //74138的编码初值08 第一行有效
for(i=0;i<16;i++) //16行循环有效
{
st_cp=0; //595锁存端无效
for(m=6;m>0;m--) //6组16×16数据发送循环
{
g=2*i+2*k+m*32-32;//取字模
send(tab[g+1]); //上半屏
send(tab[g]); //下半屏
}
P1=row; //对应行输出
row++; //行号加1
st_cp=1; //595锁存数据
delay(1); //延时后刷屏
}
}
}
void dispmove(void) //左右移动显示
{ uchar k,j;
for(k=0;k<16*(num-6);k++) //num个字,6个16×16的led,16*(num-6)为需要的点数
{
disp(k); //k++为向后取码,则向左移动
}
for(k=16*(num-6);k>0;k--) //num个字,6个16×16的led,16*(num-6)为需要的点数
{
disp(k); //k--为向前取码,则向右移动
}
for(j=0;j<3;j++) //分三页静态显示
{
for(k=16;k>0;k--) //动态扫描
{
disp(16*6*j); //一页显示6个字
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -