点阵显示左移和不动程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
×点阵显示左移和不动程序
显示左移的程序(串行送数据)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define SCAN P2 //行驱动接到P2
sbit SHCP=P1^0; //595 CLK
sbit STCP=P1^1; //595 STR
sbit DR=P1^2; //红色
sbit DG=P1^3; //绿色
sbit ENT=P1^4; //595 OE/G
uint word; //字模计数器
uchar move; //列指针
uchar line; //行指针
uchar speed=10; //设定移动速度
uchar BUF[12]; //缓存数组
uchar code disp[]; //字模数组
/********************装载一线点阵数据********************/ void loadline()
{
uchar s;
for(s=0;s<5;s++) //s为要显示的字数+1
{
BUF[2*s]=disp[word+32*s+2*line];
BUF[2*s+1]=disp[word+1+32*s+2*line];
}
}
/********************发送一线移动数据********************/ void sendline()
{
char s,p;
uchar inc,k,j;
if(move<8)
inc=0;
else inc=1;
for(s=0+inc;s<=7+inc;s++)
{
if(move<8)
j=move;
else j=move-8;
k=(BUF[s]<<j)|(BUF[s+1]>>(8-j)); //字模左边字节左移j位,右边字节右移j位,2者相或
for(p=0;p<8;p++)
{ DR=(k&0x80); //选择红色显示
SHCP=0; //595时钟信号,产生脉冲
SHCP=1;
k<<=1;
//左移一位
}
}
}
void main()
{
char s;
uint k;
uchar i,y=0;
move=0;
word=0;
ENT=0;
ENT=1; //清屏
while(1)
{
while(word<448) //(4+10)*32=448
{
while(move<16) //数据移位
{
for(i=0;i<speed;i++) //移动速度
{
for(line=0;line<16;line++) //行扫描
{
loadline(); //装载一线点阵数据
sendline(); //发送一线移动数据
SCAN=line; //显示第line行
STCP=1; //锁存为高,595锁存信号
STCP=0;
}
}
move++; //移动一步(一位)
}
move=0;
word=word+32; //下一个字
}
word=0;
}
}
uchar code disp[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*前面四字位置空白显示*/
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
////////////////////////////////////////////////////////////////////////////////
/* (16 X 16 , 宋体)*/
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,
0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF
7,0xDF,0xEF,0xEF,0xDF,0xF7,0xBF,0xFB,0xFF,0xFF,/*"大",8*/
/* (16 X 16 , 宋体)*/
0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFF,0xFF,
0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xFF,0xFF,0xFF,0xFF,/*"吉",9*/
/* (16 X 16 , 宋体)*/
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,
0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xEF,0xEF,0xDF,0xF7,0xBF,0xFB,0xFF,0xFF,/*"大",10*/
/* (16 X 16 , 宋体)*/
0xFF,0xFD,0xF8,0x7D,0xC3,0xFD,0xFB,0xED,0xFB,0xED,0x80,0x6D,0xFB,0xED,0xFB,0xED,
0xF1,0xED,0xEA,0xED,0xDB,0x6D,0xBB,0xAD,0xFB,0xFD,0xFB,0xF5,0xFB,0xF9,0xFF,0xFF,/*&q uot;利",11*/
/* (16 X 16 , 宋体)*/
0xEF,0xFF,0xF7,0x81,0x80,0xBF,0xDD,0xBF,0xEB,0xBF,0x00,0x81,0xF7,0xB7,0xF7,0xB7,
0x00,0xB7,0xF7,0xB7,0xE3,0xB7,0xD5,0xB7,0xB6,0xB7,0xE7,0xB7,0xF7,0xB7,0xFF,0xFF,/*&qu ot;新",12*/
/* (16 X 16 , 宋体)*/
0xF7,0xFF,0xF0,0x03,0xF7,0x7F,0xEF,0x7F,0xDF,0x7F,0xB0,0x07,0x77,0x7F,0xF7,0x7F,
0xF7,0x7F,0xF7,0x7F,0x00,0x00,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,/*"年",13*/
/* (16 X 16 , 宋体)*/
0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xC4,0x03,0xAB,0xBB,0x6D,0xBB,0xEF,0xBB,0xE8,0x00,
0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0x5F,0xEE,0xEF,0xED,0xF7,0xEB,0xFB,0xEF,0xFF,/*"快",14*/
/* (16 X 16 , 宋体)*/
0xFF,0xFF,0xE0,0x07,0xEF,0xFF,0xEF,0x7F,0xEF,0x7F,0xEF,0x7F,0xE0,0x03,0xFF,0x7F,
0xFF,0x7F,0xFB,0x6F,0xF7,0x77,0xEF,0x7B,0xDF,0x7D,0xBD,0x7E,0xFE,0xFF,0xFF,0xFF,/*"乐",15*/
/* (16 X 16 , 宋体)*/
////////////////////////////////////////////////////////////////////////////////
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*结束后面五字空白显示*/
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};
显示不动(静态显示)的程序(串行送数据)
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CLK =P1^0 ; //74HC595移时钟
sbit STB =P1^1 ; // 74HC595锁存信号
sbit Red=P1^2 ; //红色数据输出引脚低电平有效
sbit Greed=P1^3; //全屏控制使能0,低电平有效
sbit EN = P1^4; //全屏使能
uchar SendData; //要发送的数据变量
uchar shuzu1; //
数组一维变量
uchar shuzu2; //数组二维变量
uchar hang; //行扫描变量(半屏只有16行,所以hang=0到15)
void delay()
{
uint i;
for(i=0;i<40;i++);
}
uchar code data1[8][32]=
{
{//圣[16*16]横排
0x00,0x00,0x3F,0xF8,0x10,0x10,0x0C,0x60,
0x02,0x80,0x01,0x00,0x02,0xC0,0x0C,0x30,
0x31,0x0E,0xC1,0x24,0x1F,0xF0,0x01,0x00,
0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00}, {//诞[16*16]横排
0x00,0x08,0x40,0x1C,0x2F,0x70,0x21,0x10,
0x02,0x10,0x04,0x10,0xEF,0x5C,0x21,0x50,
0x29,0x50,0x25,0x50,0x22,0x50,0x2A,0x7C,
0x33,0x00,0x24,0x80,0x08,0x46,0x10,0x3C}, {//快[16*16]横排
0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x88,
0x5B,0xFC,0x54,0x88,0x50,0x88,0x90,0x88,
0x10,0x88,0x1F,0xFE,0x10,0x80,0x11,0x40,
0x11,0x20,0x12,0x10,0x14,0x0E,0x18,0x04}, {//乐[16*16]横排
0x00,0x20,0x00,0xF0,0x1F,0x00,0x10,0x00,
0x11,0x00,0x11,0x00,0x21,0x04,0x7F,0xFE,
0x01,0x00,0x01,0x00,0x09,0x20,0x09,0x10,
0x11,0x08,0x21,0x0C,0x45,0x04,0x02,0x00}, };
//------------------------------------
//----------字发送子程序-----------
void SendByte(void)
{
uchar m;
for(m=0;m<8;m++)
{
CLK = 0;
Red = !(SendData & 0x80); //红屏显示Greed = !(SendData & 0x80); //红屏显示SendData =SendData<<1;
CLK = 1; //移位时钟上升沿
}
}
//-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{
if (hang>=16)
{
hang =0x00;
}
P2= P2 & 0xf0;
P2= P2 | hang;
hang++;
}
void SendHang(void)
{
uchar m2,shuzu;
shuzu = shuzu1*4; //一维数组变量参数传给数组变量EN=1;
for(shuzu=0;shuzu<4;shuzu++)
{
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
}
STB = 0;
STB = 1; //上升沿数据锁存
RowsCan(); //行扫描
EN = 0;
delay();
}
//---------------------------------------
//----------发送一屏数据-----------------
void Sendping(void)
{
SendHang();
shuzu2++ ;
shuzu2++ ;
if(shuzu2 ==32) { shuzu2 =0;}
}
void initial(void)
{
EN = 1;
Red = 1;
Greed = 1;
SendData = 0x00;
hang = 0x00;
}
//;---------主程序循环-------------- void main()
{
initial();
while(1)
{
Sendping();
}
}。