锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

玩转LED点阵之三:16X64单红点阵上移

时间:2024-05-22 22:07:13

//单片机:STC12C5A60S2
//晶振:22.1184M
//显示屏:HUB0816X64单红点阵
//显示方式:左移和上移
//作者:振甬电子
//QQ: 1766135164
//网址:www.ruidan.com

//时间:2013-05-13
#include
#include"zimo.h"
#define uchar unsigned char
#define uint unsigned int
#define EED 5 //定义速度与数字成反比 数字小,速度快
#define SPEED2 80
#define LIG 10 //定义亮度:取值范围0--10
#define hang 3 //需要显示的行数+1空白行 #define NUMBER 11 //定义要移动显示总16X16汉字个数,计算方法:NUMBER=汉字显示个数+4个空格
#define NUMBER2 4
uchar word=0,col=0,col1=0,disrow=0,move=0;//wor为要显字变量,col为位移变量,col1为字节偏移量,disrow为行变量
uchar BUFF__UP[17]; //显示缓冲 上下缓冲字节数取值=[2*板点阵宽度/8]+1比较保险,即两倍板的点阵字节数. uchar BUFF__UP0[12]; //显示缓冲 sbit R1=P0^4;//红色数据1
sbit R2=P3^3;//红色数据2 sbit G1=P3^4;//绿色数据1
sbit G2=P3^5;//绿色数据 sbit CLK=P0^7;//595时钟
sbit B=P0^6;//595
sbit OE =P0^5;//74HC138使能:低有效 //根据列指针由双字节合并为单字节的子程序模块
uchar Combine_2byte(uchar h1,uchar h2) // 和点阵的取模方式有关,低位在前,高位在后,但是实际显示,高位在前,低位在后
{
uchar T_date,tempcol;
tempcol=col1;
T_date=(h1>>tempcol)|(h2<<(8-tempcol));
return T_date;
} //分别装屏点阵数据
void Load_one_line(void) //多加4个16X16汉字的缓冲
{
BUFF__UP[0]=Table[word][disrow*2+0];//装载上半屏一线点阵数据
BUFF__UP[1]=Table[word][disrow*2+1]; BUFF__UP[2]=Table[word+1][disrow*2+0];
BUFF__UP[3]=Table[word+1][disrow*2+1]; BUFF__UP[4]=Table[word+2][disrow*2+0];
BUFF__UP[5]=Table[word+2][disrow*2+1]; BUFF__UP[6]=Table[word+3][disrow*2+0];
BUFF__UP[7]=Table[word+3][disrow*2+1]; BUFF__UP[8]=Table[word+4][disrow*2+0];
BUFF__UP[9]=Table[word+4][disrow*2+1]; BUFF__UP[10]=Table[word+5][disrow*2+0];
BUFF__UP[11]=Table[word+5][disrow*2+1]; BUFF__UP[12]=Table[word+6][disrow*2+0];
BUFF__UP[13]=Table[word+6][disrow*2+1]; BUFF__UP[14]=Table[word+7][disrow*2+0];
BUFF__UP[15]=Table[word+7][disrow*2+1]; } //发送屏一线点阵数据
void Send_one_line(void)
{
char s;
uchar temp,i,inc;
if(col<8) inc=0;
if(8<=col&&col<16) inc=1;
for(s=0+inc;s<=8+inc;s++)
{
temp=Combine_2byte(BUFF__UP[s],BUFF__UP[s+1]);
for(i=0;i<8;i++)
{
R1=~(temp>>i)&0x01; //取出低高位
R2=0xff; //不显示
G1=0xff;
G2=0xff;
CLK=0;
CLK=1; //移位时钟
}
}
} //左移函数
void LEFT_MOVE()
{
uchar i;
for(col=0;col<16;col++)//循环16次,点亮并移动一个汉字,步进是一位
{
col1=col%8;//一个字节移动位数
for(i=0;i {
for(disrow=0;disrow<16;disrow++)//扫描16行
{
Load_one_line();//装载一行点阵数据
Send_one_line();//发送一行点阵数据
OE=1;
STB=1; // 输出锁存
STB=0;
P0=disrow; // 行扫描
OE=0;
}
}
} word=word+1;// 一个汉字移动后,指向下一个汉字
if(word>=NUMBER)
{
word=0;//移动完NUMBER个汉字后重新开始
}
} //分别装载上、下半屏点阵数据
void Load_one_line_up()
{
BUFF__UP0[0]=Table2[0*hang][disrow*2+0+move*2];//装载上半屏一线点阵数据
BUFF__UP0[1]=Table2[0*hang][disrow*2+1+move*2]; BUFF__UP0[2]=Table2[1*hang][disrow*2+0+move*2];
BUFF__UP0[3]=Table2[1*hang][disrow*2+1+move*2]; BUFF__UP0[4]=Table2[2*hang][disrow*2+0+move*2];
BUFF__UP0[5]=Table2[2*hang][disrow*2+1+move*2]; BUFF__UP0[6]=Table2[3*hang][disrow*2+0+move*2];
BUFF__UP0[7]=Table2[3*hang][disrow*2+1+move*2];
}
//74HC595串行数据输入
void Send_one_line_up()
{
uchar i,j;
uchar DataR1,DataR2,DataG1,DataG2;
for(j=0;j<8;j++)
{
DataR1=~BUFF__UP0[j];
DataG1=0xff;
DataR2=0xff;
DataG2=0xff;
for(i=0;i<8;i++)
{
R1=DataR1 & 0x01;
G1=DataG1 & 0x01;
R2=DataR2 & 0x01;
G2=DataG2 & 0x01;
CLK = 0;
CLK = 1;
DataR1 >>= 1;
DataG1 >>= 1;
DataR2 >>= 1;
DataG2 >>= 1;
}
}
} //上移函数
void UP_MOVE()
{
int sp;
for(move=0;move<16*(hang-1);move++)
{
for(sp=0;sp {
for(disrow=0;disrow<16;disrow++)
{
Load_one_line_up();//装载数据
Send_one_line_up();//发送数据
OE=1;
STB=0;
STB=1;//输出锁存
P0=disrow;//8位行选
OE=0;
}
}
}
}
//主函数入口
void main(void)
{
R1=0;//数据初始化
R2=0;
G1=0;
G2=0;
while(1)
{
// LEFT_MOVE(); //左移
UP_MOVE(); //上移
}
}

zimo.h
unsigned char code Table[][32]=
{
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,
/*************下面修改需要显示的点阵字体**********************/
0x08,0x00,
0xC8,0x7F,
0x48,0x00,
0x7F,0x00,
0x48,0x3F,
0x68,0x00,
0xD8,0x7F,
0x48,0x03,
0x4C,0x25,
0x4B,0x65,
0x48,0x19,
0x48,0x11,
0x28,0x11,
0x28,0x65,
0x1A,0x23,
0x04,0x01,/*"振",0*/
0xFC,0x1F,
0x00,0x0C,
0x60,0x03,
0x80,0x00,
0xFC,0x1F,
0x84,0x10,
0x84,0x10,
0xFC,0x1F,
0x84,0x10,
0x84,0x10,
0xFC,0x1F,
0x84,0x10,
0x84,0x10,
0x84,0x10,
0x84,0x14,
0x04,0x08,/*"甬",1*/
0x80,0x00,
0x80,0x00,
0x80,0x00,
0xFC,0x1F,
0x84,0x10,
0x84,0x10,
0xFC,0x1F,
0x84,0x10,
0x84,0x10,
0x84,0x10,
0xFC,0x1F,
0x84,0x10,
0x80,0x40,
0x80,0x40,
0x00,0x7F,
0x00,0x00,/*"电",2*/
0x00,0x00,
0xFC,0x0F,
0x00,0x04,
0x00,0x02,
0x00,0x01,
0x80,0x00,
0x80,0x00,
0x80,0x20,
0xFF,0x7F,
0x80,0x00,
0x80,0x00,
0x80,0x00,
0x80,0x00,
0x80,0x00,
0xA0,0x00,
0x40,0x00,/*"子",3*/
0x00,0x01,
0x00,0x01,
0x3F,0x01,
0xA0,0x7F,
0xA1,0x20,
0x52,0x12,
0x14,0x02,
0x08,0x02,
0x18,0x02,
0x18,0x06,
0x24,0x05,
0x24,0x09,
0x82,0x18,
0x61,0x70,
0x1C,0x20,
0x00,0x00,/*"欢",4*/
0x02,0x00,
0x84,0x01,
0x6C,0x3E,
0x24,0x22,
0x20,0x22,
0x20,0x22,
0x27,0x22,
0x24,0x22,
0xA4,0x22,
0x64,0x2A,
0x24,0x12,
0x04,0x02,
0x04,0x02,
0x0A,0x00,
0xF1,0x7F,
0x00,0x00,/*"迎",5*/
0x90,0x00,
0x90,0x01,
0x88,0x20,
0xC8,0x7F,
0x44,0x20,
0x2C,0x12,
0x16,0x02,
0x45,0x0A,
0xC4,0x12,
0x44,0x12,
0x24,0x22,
0x24,0x62,
0x14,0x22,
0x84,0x02,
0x04,0x01,
0x00,0x00,/*"你",6*/
/*************上面修改需要显示的点阵字体**********************/

/*********为了消除BUB,多加32个空字符***************/
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,
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章