16X16LED从右向左滚动显示
时间:10-02
整理:3721RD
点击:
帮忙把以下程序改的可以从右到左显示汉字,谢谢,可私聊QQ1554031689。菜鸟求指导
程序:
/*-----------------------------------------------
名称:16x16点阵
编写:shifang
修改:无
硬件:LY-LED16x16A 点阵模块
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <intrins.h>
unsigned char code tab[]={//
//取模选择字节倒序 ,正序得出的字是反的,可以在软件中设置自动倒叙
/*-- 文字: 汉 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x48,0x10,0x41,0x10,0x82,0x08,0x92,0x08,0x90,0x08,
0x08,0x05,0x08,0x05,0x07,0x02,0x04,0x02,0x04,0x05,0x84,0x08,0x44,0x10,0x30,0x60,
/*-- 文字: 字 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x00,0x80,0x00,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,0x00,0x02,0x00,0x01,
0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10,
/*-- 文字: 试 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x14,0x04,0x24,0x08,0x24,0x08,0x04,0xE0,0x7F,0x00,0x04,0x0F,0x04,0xE8,0x07,
0x88,0x04,0x88,0x08,0x88,0x08,0xA8,0x08,0x98,0x53,0xE8,0x50,0x40,0x60,0x00,0x40,
};
unsigned int code seg[]=
{
0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000
};
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit LATCH_B = P2^6; //16行控制,行信号
sbit SRCLK_B= P2^5;
sbit SER_B = P2^4;
sbit LATCH = P0^2; //数据控制,列信号
sbit SRCLK= P0^1;
sbit SER= P0^3;
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
发送字节程序
------------------------------------------------*/
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SRCLK=0;
SER=dat&0x80;
dat<<=1;
SRCLK=1;
}
}
void SendByte1(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SRCLK_B=0;
SER_B=dat&0x80;
dat<<=1;
SRCLK_B=1;
}
}
void SendSer(unsigned char dat1,unsigned char dat2)
{
SendByte(dat1);
SendByte(dat2);
LATCH=1;
_nop_();
LATCH=0;
}
/*------------------------------------------------
发送位码字节程序
使用另外一片单独595
------------------------------------------------*/
void SendSeg(unsigned int a)
{
SendByte1(a>>8);
SendByte1(a);
LATCH_B=1; //锁存
_nop_();
LATCH_B=0;
}
/*------------------------------------------------
主程序
------------------------------------------------*/
void main()
{
unsigned char i,j,k;
while(1)
{
for(j=0;j<4;j++){//循环显示4个汉字
for(k=0;k<100;k++)//每个汉字之间的延时,可以调节
for(i=0;i<16;i++){//显示1个汉字循环扫描16行,每行显示2个数据
SendSer(0xff,0xff);//清屏
SendSeg(seg);//对应的行选通
SendSer(~tab[32*j+2*i+1],~tab[32*j+2*i]);//发送改行显示数据
//DelayMs(1);
}
}
}
}
程序:
/*-----------------------------------------------
名称:16x16点阵
编写:shifang
修改:无
硬件:LY-LED16x16A 点阵模块
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <intrins.h>
unsigned char code tab[]={//
//取模选择字节倒序 ,正序得出的字是反的,可以在软件中设置自动倒叙
/*-- 文字: 汉 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x48,0x10,0x41,0x10,0x82,0x08,0x92,0x08,0x90,0x08,
0x08,0x05,0x08,0x05,0x07,0x02,0x04,0x02,0x04,0x05,0x84,0x08,0x44,0x10,0x30,0x60,
/*-- 文字: 字 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x00,0x80,0x00,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,0x00,0x02,0x00,0x01,
0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10,
/*-- 文字: 试 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x14,0x04,0x24,0x08,0x24,0x08,0x04,0xE0,0x7F,0x00,0x04,0x0F,0x04,0xE8,0x07,
0x88,0x04,0x88,0x08,0x88,0x08,0xA8,0x08,0x98,0x53,0xE8,0x50,0x40,0x60,0x00,0x40,
};
unsigned int code seg[]=
{
0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000
};
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit LATCH_B = P2^6; //16行控制,行信号
sbit SRCLK_B= P2^5;
sbit SER_B = P2^4;
sbit LATCH = P0^2; //数据控制,列信号
sbit SRCLK= P0^1;
sbit SER= P0^3;
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
发送字节程序
------------------------------------------------*/
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SRCLK=0;
SER=dat&0x80;
dat<<=1;
SRCLK=1;
}
}
void SendByte1(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SRCLK_B=0;
SER_B=dat&0x80;
dat<<=1;
SRCLK_B=1;
}
}
void SendSer(unsigned char dat1,unsigned char dat2)
{
SendByte(dat1);
SendByte(dat2);
LATCH=1;
_nop_();
LATCH=0;
}
/*------------------------------------------------
发送位码字节程序
使用另外一片单独595
------------------------------------------------*/
void SendSeg(unsigned int a)
{
SendByte1(a>>8);
SendByte1(a);
LATCH_B=1; //锁存
_nop_();
LATCH_B=0;
}
/*------------------------------------------------
主程序
------------------------------------------------*/
void main()
{
unsigned char i,j,k;
while(1)
{
for(j=0;j<4;j++){//循环显示4个汉字
for(k=0;k<100;k++)//每个汉字之间的延时,可以调节
for(i=0;i<16;i++){//显示1个汉字循环扫描16行,每行显示2个数据
SendSer(0xff,0xff);//清屏
SendSeg(seg);//对应的行选通
SendSer(~tab[32*j+2*i+1],~tab[32*j+2*i]);//发送改行显示数据
//DelayMs(1);
}
}
}
}
用的at89c52rc芯片,行列驱动都是74hc595,谢谢了
