//单片机:STC89C52
//晶振:22.1184M,下载挑选双倍时钟,不然会有闪耀!
//显现屏:HUB08接口16X64单红点阵
//显现方法:左移
//作者:振甬电子
//QQ: 1766135164
//网址:www.51hei.com
//时刻:2013-05-13
#include
#include”zimo.h”
#define ucharunsigned char
#define uintunsigned int
#define SPEED5//界说速度与数字成反比 数字小,速度快
#define NUMBER11//界说要移动显现总16X16汉字个数,计算方法:NUMBER=汉字显现个数+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 STB=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 main(void)
{
R1=0;//数据初始化
R2=0;
G1=0;
G2=0;
while(1)
{
LEFT_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,
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/318070.html