自已改的,这块板子显示后两个字有重影,和别的所有板子接口方法不一样
/*-----------------------------------------------
名称:16x16点阵
论坛:www.doflye.net
编写:无名人士
修改:无
硬件:LY-LED16x16A 点阵模块
------------------------------------------------*/
unsigned char 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 seg[]=
{
0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000
};
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
#define RCLKB 2 //行锁存信号,数据传输完成后锁存
#define SRCLKB 3 //行时钟信号
#define SERB 4 //行信号,每次选通一行,高电平有效
#define RCLKA 5 //列锁存信号,数据传输完成后锁存
#define SRCLKA 6 //列时钟信号
#define SERC 7 //列信号,这里是红色点阵列信号
//#define SERA 8 // 列信号,这里是绿色点阵列信号,仅双色点阵时有效
void setup()
{
pinMode(RCLKB, OUTPUT);
pinMode(SRCLKB, OUTPUT);
pinMode(SERB, OUTPUT);
pinMode(RCLKA, OUTPUT);
pinMode(SRCLKA, OUTPUT);
pinMode(SERC, OUTPUT);
//pinMode(SERA, OUTPUT);
}
/*------------------------------------------------
主程序
------------------------------------------------*/
void loop()
{
unsigned char i;
// while(1)
// {
//
for(i=0;i<16;i++){
SendSer(0xff,0xff,0xff,0xff);//清屏
SendSeg(seg[i]); //开通对应的行
SendSer(~tab[2*i+33],~tab[32+2*i],~tab[2*i+1],~tab[2*i]);//显示该行数据
// delayMicroseconds(100);
}
// }
}
// 发送字节程序
//------------------------------------------------*/
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
digitalWrite(SRCLKA,LOW);
digitalWrite(SERC,dat & 0x80);
dat<<=1;
digitalWrite(SRCLKA,HIGH);
}
}
void SendByte1(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
digitalWrite(SRCLKB,LOW);
digitalWrite(SERB,dat & 0x80);
dat<<=1;
digitalWrite(SRCLKB,HIGH);
}
}
void SendSer(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
{
SendByte(dat1);
SendByte(dat2);
SendByte(dat3);
SendByte(dat4);
digitalWrite(RCLKA,HIGH);//锁存
delayMicroseconds(1);
digitalWrite(RCLKA,LOW);//显示
}
/*------------------------------------------------
发送位码字节程序使用另外一片单独595
------------------------------------------------*/
void SendSeg(unsigned int a)
{
SendByte1(a>>8);
SendByte1(a);
digitalWrite(RCLKB,HIGH); //锁存
delayMicroseconds(1);
digitalWrite(RCLKB, LOW);//显示
}
|