问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求51单片机LCD12864串行显示程序,只用SID口和SCLK口,能显示输出四行中文的,最好写上main函数,谢谢

发布网友 发布时间:2022-04-30 07:50

我来回答

1个回答

热心网友 时间:2023-10-21 10:34

//LCD12864字库系列(控制器ST7920A),单片机:89S52,晶振:12M,
//串口连接 与 并口连接 ( 串口时 屏蔽 并行模块)
//并行连接方式,P2.0-RS,P2.1-RW,P2.2-E
#include<reg52.h>
#include <intrins.h>
sbit RS=P3^2; //串口时为CS
sbit RW=P3^1; //串口为SID
sbit E=P3^0; //串口为时钟SCLK
sbit stop=P2^2;
sbit PSB=P3^4;
sbit REST=P3^3;
//以下是用<at89x51.h>头文件的定义
/*
#define RS P2_0
#define RW P2_1 //定义引脚
#define E P2_2
#define PSB P2_3
#define REST P2_4
#define Data P1
#include<at89x51.h>
*/
#define BF 0x80 //用于检测LCM状态字中的Busy标识
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字符串例子
//"F1--English",也可以往里面写入汉字码,一个汉字由两个码组成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6; //字符串长度
//汉字,直接可以写入字形
unsigned char code uctech[] = {"有限公司"};
const Uchar lengthCF3=8;
Uchar code TAB1[]={
/*-- 调入了一幅图像:D:\公司的文件\程序图片\未命名11.bmp --*/
/*-- 宽度x高度=128x64 --*/
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x05,0xAE,0x90,0x00,0x00,0x00,0x00,0x00,
0x95,0x55,0x48,0x80,0x00,0x00,0x00,0x00,
0x2B,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xA8,0x00,0x22,0x15,0x20,0x00,0x00,0x00,
0x97,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,
0x45,0x55,0x08,0xA0,0x00,0x00,0x00,0x0A,
0x6F,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,
0xB2,0x80,0x40,0x00,0x04,0x40,0x00,0x00,
0xBA,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x4D,0x55,0x15,0x15,0x20,0x00,0x00,0x95,
0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE8,0x40,0x40,0x00,0x00,0x00,0x4A,
0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x2A,0x00,0x40,0x00,0x00,0x15,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFD,0xD0,0xAA,0x01,0x00,0x00,0x25,
0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xB6,0x00,0x10,0x00,0x01,0x4A,
0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFD,0xE8,0x40,0x00,0x00,0x11,
0x00,0x24,0x84,0x00,0x00,0x00,0x00,0x00,
0xAB,0xFF,0xFF,0x55,0x00,0x00,0x00,0x24,
0x02,0x49,0x5E,0xA0,0x00,0x00,0x00,0x00,
0x84,0xBF,0xFF,0xF4,0x88,0x00,0x00,0x00,
0x10,0x05,0xFF,0xF4,0x00,0x00,0x00,0x00,
0x29,0x0B,0xFF,0xFA,0x20,0x00,0x00,0x00,
0x02,0xBF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0x44,0xA0,0x57,0xFD,0x80,0x00,0x00,0x00,
0x08,0x5F,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x91,0x0A,0xAA,0xF6,0x50,0x00,0x00,0x00,
0x41,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x44,0xA0,0x01,0x1B,0x84,0x00,0x00,0x00,
0x26,0xFF,0xFF,0xFF,0x90,0x00,0x00,0x00,
0x11,0x0A,0xAA,0x6D,0x68,0x00,0x00,0x00,
0x0B,0xFB,0xFF,0xEF,0xE0,0x00,0x00,0x00,
0xC4,0xA0,0x01,0x02,0x80,0x00,0x00,0x00,
0x43,0xF1,0xFE,0x63,0xF0,0x00,0x00,0x00,
0x15,0x55,0x54,0x55,0x6A,0x00,0x00,0x00,
0x9F,0xE3,0xFC,0x87,0x38,0x00,0x00,0x00,
0xCA,0xAB,0x91,0x00,0x90,0x00,0x00,0x00,
0x07,0xC1,0xFA,0x2A,0x80,0x00,0x00,0x00,
0x25,0xFF,0xFE,0x95,0x2A,0x00,0x00,0x00,
0x2F,0x13,0xFE,0xFC,0x10,0x00,0x00,0x00,
0x95,0xFF,0xFF,0xC0,0x50,0x00,0x00,0x00,
0x0F,0x41,0xFF,0xF3,0x80,0x00,0x00,0x00,
0x4F,0xFF,0xFF,0xF9,0x2A,0x00,0x00,0x00,
0x9F,0x08,0xFF,0xD4,0x00,0x00,0x00,0x00,
0xB3,0xFF,0xFF,0xFE,0x54,0x80,0x00,0x00,
0x1E,0xA0,0x7F,0xA0,0x00,0x00,0x00,0x00,
0x5F,0xFE,0x7F,0xFE,0xAA,0x00,0x00,0x00,
0x5F,0x57,0xFE,0x00,0x00,0x00,0x00,0x00,
0xAF,0xFD,0x7F,0xFF,0x94,0x80,0x00,0x00,
0x1F,0xFE,0xE8,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFA,0x7F,0x5F,0xCA,0x00,0x00,0x00,
0x3F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xAF,0xF1,0x7F,0xDE,0xF5,0x40,0x00,0x00,
0x1A,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,
0xDF,0xF2,0x3F,0xFC,0xC2,0x00,0x00,0x00,
0x50,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x2F,0xFA,0xBF,0xFF,0xF4,0xA0,0x00,0x00,
0x05,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
0x97,0xFE,0x3F,0xFF,0xE3,0x00,0x00,0x00,
0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x68,0xFF,0xDF,0xD5,0x78,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x5F,0xFF,0x48,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD0,0xAA,0xF4,0xA0,0xAA,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0x45,0x09,0x05,0x11,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA1,0x28,0xA0,0x00,0x44,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x42,0x04,0x52,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA5,0x09,0x51,0x00,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x50,0x04,0x4A,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xAA,0x05,0x50,0x21,0x48,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x90,0x02,0x84,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD4,0x05,0x48,0x10,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x81,0x20,0x00,0x02,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA4,0x84,0x92,0x48,0x94,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x48,0x10,0x00,0x00,0x21,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//这个是在串口时指令和数据之间的延时
/*
void delay10US(Uchar x)
{
Uchar k;
for(k=0;k<x;k++);
}
*/
const Uchar delay=250; //延时时间常数
static void Wait1ms(void)//延迟1 ms
{
Uchar cnt=0;
while (cnt<delay) cnt++;
}
//延迟n ms
void WaitNms(int n)
{
Uchar i;
for(i=1;i<=n;i++)
Wait1ms();
}
void stopint(void)//中断程序
{
if(stop==0)
while(1);
}
//**************************************************************************//
//以下是并口时才开的
//读忙标志,
void RDBF(void)
{
Uchar temp;
RS=0; // RS=0
RW=1; // RW=1
while(1)
{
P1=0xFF; //数据线为输入
E=1;
temp=P1;
E=0; // E=0
if ((temp&0x80)==0) break;
}
}
//写数据到指令寄存器
void WRCommand(Uchar comm)
{
RDBF();
RW=0;
P1=comm;
E=1;
E=0;
}
//写数据到数据寄存器
void WRData(Uchar TEMP)
{
RDBF();
RS=1;
RW=0;
P1=TEMP;
E=1;
E=0;
stopint();
}
/////////////////////////////////////////////////////////////////////////////////
//以下是串口时开的读写时序
/*void SendByteLCD(Uchar WLCDData)
{
Uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<<i)&0x80)RW=1;
else RW=0;
E=0;
E=1 ;
}
}
SPIWR(Uchar Wdata,Uchar WRS)
{
SendByteLCD(0xf8+(WRS<<1));
SendByteLCD(Wdata&0xf0);
SendByteLCD((Wdata<<4)&0xf0);
}
void WRCommand(Uchar CMD)
{
RS=0;
RS=1;
SPIWR(CMD,0);
delay10US(90);//89S52来模拟串行通信,所以,加上89S52的延时,
}
void WRData(Uchar Data)
{
RS=0;
RS=1;
SPIWR(Data,1);
}
*/
/*******************************************************************/
//初始化LCD-8位接口
void LCDInit(void)
{ // PSB=0; //串口
PSB=1;//并口时选这个,上一行取消
REST=1;
REST=0;
REST=1;
WRCommand(0x30); //基本指令集,8位并行
WRCommand(0x06); //启始点设定:光标右移
WRCommand(0x01); //清除显示DDRAM
WRCommand(0x0C); //显示状态开关:整体显示开,光标显示关,光标显示反白关
WRCommand(0x02); //地址归零
}
//显示数组字符串(显示半宽字型16*8点阵)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{
Uchar i;
WRCommand(addr); //设定DDRAM地址
for(i=0;i<count;)
{
WRData(english[i*2]);
WRData(english[i*2+1]);
i++;
}
}
//显示连续字串(半宽字符)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
Uchar j;
for(j=0;j<count;)
{
WRCommand(addr); //设定DDRAM地址
WRData(i+j);
j++;
WRData(i+j);
addr++;
j++;
}
}
//自定义字符写入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{
Uchar i;
for(i=0;i<16;)
{
WRCommand(addr+i); //设定CGRAM地址
WRData(data1);
WRData(data1);
i++;
WRCommand(addr+i); //设定CGRAM地址
WRData(data2);
WRData(data2);
i++;
}
}
//显示自定义的字符,并把这个字符填满全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
Uchar j;
for(j=0;j<0x20;)
{
WRCommand(addr+j); //设定DDRAM地址
WRData(0x00);
WRData(i);
j++;
}
}
void CLEARGDRAM(void)
{
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<32;j++)
{
WRCommand(0x80+j);
WRCommand(0x80);//X坐标
for(i=0;i<32;i++)//
{
WRData(0x00);
}
}

}
//写入GDRAM 绘图,Y是Y绘图坐标,2个字节一行,CLONG是图形长度,以字节
//为单位;HIGHT是图形高度,TAB是图形数据表.12864M的图形显示是相当于256*32点阵.
//由两屏128*32上下两屏组成,同一行的下屏的头地址紧接上屏的未地址。
//绘图在串口输入时,会比在并口下的输入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{
Uint k;
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<hight;j++)//32
{ //先上半屏
WRCommand(Y1+j); //Y总坐标,即第几行
WRCommand(0x80);//X坐标,即横数第几个字节开始写起
for(i=0;i<clong;i++)//
{
WRData(TAB1[clong*j+i]);
}
//后下半屏

for(k=0;k<clong;k++)//
{
WRData(TAB1[clong*(j+hight)+k]);
}

}
}
void menu(void)
{
LCDInit();
ShowNUMChar(0x80,0x01,0x0f);//显示半宽特殊符号
ShowNUMChar(0x90,0x30,0x0f);//显示半宽0~?数字标点
ShowNUMChar(0x88,0x41,0x0f);//显示半宽A~P大写
ShowNUMChar(0x98,0x61,0x0f);//显示半宽a~p小写
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
WRCGRAM(0xff,0x00,0x40);//写入横
WRCGRAM(0x00,0xff,0x50);//写入横2
WRCGRAM(0xaa,0xaa,0x60);//写入竖
WRCGRAM(0x55,0x55,0x70);//写入竖2
ShowCGChar(0x80,0x00);//显示横并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,02);//显示横2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,04);//显示竖并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,06);//显示竖2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
WRCGRAM(0x00,0x00,0x40);//清CGRAM1
WRCGRAM(0x00,0x00,0x50);//清CGRAM2
WRCGRAM(0xaa,0x55,0x40);//写入点
WRCGRAM(0x55,0xaa,0x50);//写入点2
ShowCGChar(0x80,00);//显示点并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,02);//显示点2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowQQChar(0x80,uctech,lengthCF3);//显示'有限公司',以下共四行
ShowQQChar(0x90,uctech,lengthCF3);
ShowQQChar(0x88,uctech,lengthCF3);
ShowQQChar(0x98,uctech,lengthCF3);
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
}
void menu2(void)
{ CLEARGDRAM();
WRGDRAM(0x80,16,32,TAB1);
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
}
//主函数
void main(void)
{
menu();//初始化及半宽字符和点横竖汉字扫描
menu2();//绘图显示
for(;;)
{;}
}

热心网友 时间:2023-10-21 10:34

//LCD12864字库系列(控制器ST7920A),单片机:89S52,晶振:12M,
//串口连接 与 并口连接 ( 串口时 屏蔽 并行模块)
//并行连接方式,P2.0-RS,P2.1-RW,P2.2-E
#include<reg52.h>
#include <intrins.h>
sbit RS=P3^2; //串口时为CS
sbit RW=P3^1; //串口为SID
sbit E=P3^0; //串口为时钟SCLK
sbit stop=P2^2;
sbit PSB=P3^4;
sbit REST=P3^3;
//以下是用<at89x51.h>头文件的定义
/*
#define RS P2_0
#define RW P2_1 //定义引脚
#define E P2_2
#define PSB P2_3
#define REST P2_4
#define Data P1
#include<at89x51.h>
*/
#define BF 0x80 //用于检测LCM状态字中的Busy标识
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字符串例子
//"F1--English",也可以往里面写入汉字码,一个汉字由两个码组成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6; //字符串长度
//汉字,直接可以写入字形
unsigned char code uctech[] = {"有限公司"};
const Uchar lengthCF3=8;
Uchar code TAB1[]={
/*-- 调入了一幅图像:D:\公司的文件\程序图片\未命名11.bmp --*/
/*-- 宽度x高度=128x64 --*/
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x05,0xAE,0x90,0x00,0x00,0x00,0x00,0x00,
0x95,0x55,0x48,0x80,0x00,0x00,0x00,0x00,
0x2B,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xA8,0x00,0x22,0x15,0x20,0x00,0x00,0x00,
0x97,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,
0x45,0x55,0x08,0xA0,0x00,0x00,0x00,0x0A,
0x6F,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,
0xB2,0x80,0x40,0x00,0x04,0x40,0x00,0x00,
0xBA,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x4D,0x55,0x15,0x15,0x20,0x00,0x00,0x95,
0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE8,0x40,0x40,0x00,0x00,0x00,0x4A,
0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x2A,0x00,0x40,0x00,0x00,0x15,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFD,0xD0,0xAA,0x01,0x00,0x00,0x25,
0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xB6,0x00,0x10,0x00,0x01,0x4A,
0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFD,0xE8,0x40,0x00,0x00,0x11,
0x00,0x24,0x84,0x00,0x00,0x00,0x00,0x00,
0xAB,0xFF,0xFF,0x55,0x00,0x00,0x00,0x24,
0x02,0x49,0x5E,0xA0,0x00,0x00,0x00,0x00,
0x84,0xBF,0xFF,0xF4,0x88,0x00,0x00,0x00,
0x10,0x05,0xFF,0xF4,0x00,0x00,0x00,0x00,
0x29,0x0B,0xFF,0xFA,0x20,0x00,0x00,0x00,
0x02,0xBF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0x44,0xA0,0x57,0xFD,0x80,0x00,0x00,0x00,
0x08,0x5F,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x91,0x0A,0xAA,0xF6,0x50,0x00,0x00,0x00,
0x41,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x44,0xA0,0x01,0x1B,0x84,0x00,0x00,0x00,
0x26,0xFF,0xFF,0xFF,0x90,0x00,0x00,0x00,
0x11,0x0A,0xAA,0x6D,0x68,0x00,0x00,0x00,
0x0B,0xFB,0xFF,0xEF,0xE0,0x00,0x00,0x00,
0xC4,0xA0,0x01,0x02,0x80,0x00,0x00,0x00,
0x43,0xF1,0xFE,0x63,0xF0,0x00,0x00,0x00,
0x15,0x55,0x54,0x55,0x6A,0x00,0x00,0x00,
0x9F,0xE3,0xFC,0x87,0x38,0x00,0x00,0x00,
0xCA,0xAB,0x91,0x00,0x90,0x00,0x00,0x00,
0x07,0xC1,0xFA,0x2A,0x80,0x00,0x00,0x00,
0x25,0xFF,0xFE,0x95,0x2A,0x00,0x00,0x00,
0x2F,0x13,0xFE,0xFC,0x10,0x00,0x00,0x00,
0x95,0xFF,0xFF,0xC0,0x50,0x00,0x00,0x00,
0x0F,0x41,0xFF,0xF3,0x80,0x00,0x00,0x00,
0x4F,0xFF,0xFF,0xF9,0x2A,0x00,0x00,0x00,
0x9F,0x08,0xFF,0xD4,0x00,0x00,0x00,0x00,
0xB3,0xFF,0xFF,0xFE,0x54,0x80,0x00,0x00,
0x1E,0xA0,0x7F,0xA0,0x00,0x00,0x00,0x00,
0x5F,0xFE,0x7F,0xFE,0xAA,0x00,0x00,0x00,
0x5F,0x57,0xFE,0x00,0x00,0x00,0x00,0x00,
0xAF,0xFD,0x7F,0xFF,0x94,0x80,0x00,0x00,
0x1F,0xFE,0xE8,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFA,0x7F,0x5F,0xCA,0x00,0x00,0x00,
0x3F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xAF,0xF1,0x7F,0xDE,0xF5,0x40,0x00,0x00,
0x1A,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,
0xDF,0xF2,0x3F,0xFC,0xC2,0x00,0x00,0x00,
0x50,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x2F,0xFA,0xBF,0xFF,0xF4,0xA0,0x00,0x00,
0x05,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
0x97,0xFE,0x3F,0xFF,0xE3,0x00,0x00,0x00,
0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x68,0xFF,0xDF,0xD5,0x78,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x5F,0xFF,0x48,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD0,0xAA,0xF4,0xA0,0xAA,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0x45,0x09,0x05,0x11,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA1,0x28,0xA0,0x00,0x44,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x42,0x04,0x52,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA5,0x09,0x51,0x00,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x50,0x04,0x4A,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xAA,0x05,0x50,0x21,0x48,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x90,0x02,0x84,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD4,0x05,0x48,0x10,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x81,0x20,0x00,0x02,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA4,0x84,0x92,0x48,0x94,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x48,0x10,0x00,0x00,0x21,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//这个是在串口时指令和数据之间的延时
/*
void delay10US(Uchar x)
{
Uchar k;
for(k=0;k<x;k++);
}
*/
const Uchar delay=250; //延时时间常数
static void Wait1ms(void)//延迟1 ms
{
Uchar cnt=0;
while (cnt<delay) cnt++;
}
//延迟n ms
void WaitNms(int n)
{
Uchar i;
for(i=1;i<=n;i++)
Wait1ms();
}
void stopint(void)//中断程序
{
if(stop==0)
while(1);
}
//**************************************************************************//
//以下是并口时才开的
//读忙标志,
void RDBF(void)
{
Uchar temp;
RS=0; // RS=0
RW=1; // RW=1
while(1)
{
P1=0xFF; //数据线为输入
E=1;
temp=P1;
E=0; // E=0
if ((temp&0x80)==0) break;
}
}
//写数据到指令寄存器
void WRCommand(Uchar comm)
{
RDBF();
RW=0;
P1=comm;
E=1;
E=0;
}
//写数据到数据寄存器
void WRData(Uchar TEMP)
{
RDBF();
RS=1;
RW=0;
P1=TEMP;
E=1;
E=0;
stopint();
}
/////////////////////////////////////////////////////////////////////////////////
//以下是串口时开的读写时序
/*void SendByteLCD(Uchar WLCDData)
{
Uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<<i)&0x80)RW=1;
else RW=0;
E=0;
E=1 ;
}
}
SPIWR(Uchar Wdata,Uchar WRS)
{
SendByteLCD(0xf8+(WRS<<1));
SendByteLCD(Wdata&0xf0);
SendByteLCD((Wdata<<4)&0xf0);
}
void WRCommand(Uchar CMD)
{
RS=0;
RS=1;
SPIWR(CMD,0);
delay10US(90);//89S52来模拟串行通信,所以,加上89S52的延时,
}
void WRData(Uchar Data)
{
RS=0;
RS=1;
SPIWR(Data,1);
}
*/
/*******************************************************************/
//初始化LCD-8位接口
void LCDInit(void)
{ // PSB=0; //串口
PSB=1;//并口时选这个,上一行取消
REST=1;
REST=0;
REST=1;
WRCommand(0x30); //基本指令集,8位并行
WRCommand(0x06); //启始点设定:光标右移
WRCommand(0x01); //清除显示DDRAM
WRCommand(0x0C); //显示状态开关:整体显示开,光标显示关,光标显示反白关
WRCommand(0x02); //地址归零
}
//显示数组字符串(显示半宽字型16*8点阵)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{
Uchar i;
WRCommand(addr); //设定DDRAM地址
for(i=0;i<count;)
{
WRData(english[i*2]);
WRData(english[i*2+1]);
i++;
}
}
//显示连续字串(半宽字符)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
Uchar j;
for(j=0;j<count;)
{
WRCommand(addr); //设定DDRAM地址
WRData(i+j);
j++;
WRData(i+j);
addr++;
j++;
}
}
//自定义字符写入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{
Uchar i;
for(i=0;i<16;)
{
WRCommand(addr+i); //设定CGRAM地址
WRData(data1);
WRData(data1);
i++;
WRCommand(addr+i); //设定CGRAM地址
WRData(data2);
WRData(data2);
i++;
}
}
//显示自定义的字符,并把这个字符填满全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
Uchar j;
for(j=0;j<0x20;)
{
WRCommand(addr+j); //设定DDRAM地址
WRData(0x00);
WRData(i);
j++;
}
}
void CLEARGDRAM(void)
{
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<32;j++)
{
WRCommand(0x80+j);
WRCommand(0x80);//X坐标
for(i=0;i<32;i++)//
{
WRData(0x00);
}
}

}
//写入GDRAM 绘图,Y是Y绘图坐标,2个字节一行,CLONG是图形长度,以字节
//为单位;HIGHT是图形高度,TAB是图形数据表.12864M的图形显示是相当于256*32点阵.
//由两屏128*32上下两屏组成,同一行的下屏的头地址紧接上屏的未地址。
//绘图在串口输入时,会比在并口下的输入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{
Uint k;
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<hight;j++)//32
{ //先上半屏
WRCommand(Y1+j); //Y总坐标,即第几行
WRCommand(0x80);//X坐标,即横数第几个字节开始写起
for(i=0;i<clong;i++)//
{
WRData(TAB1[clong*j+i]);
}
//后下半屏

for(k=0;k<clong;k++)//
{
WRData(TAB1[clong*(j+hight)+k]);
}

}
}
void menu(void)
{
LCDInit();
ShowNUMChar(0x80,0x01,0x0f);//显示半宽特殊符号
ShowNUMChar(0x90,0x30,0x0f);//显示半宽0~?数字标点
ShowNUMChar(0x88,0x41,0x0f);//显示半宽A~P大写
ShowNUMChar(0x98,0x61,0x0f);//显示半宽a~p小写
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
WRCGRAM(0xff,0x00,0x40);//写入横
WRCGRAM(0x00,0xff,0x50);//写入横2
WRCGRAM(0xaa,0xaa,0x60);//写入竖
WRCGRAM(0x55,0x55,0x70);//写入竖2
ShowCGChar(0x80,0x00);//显示横并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,02);//显示横2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,04);//显示竖并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,06);//显示竖2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
WRCGRAM(0x00,0x00,0x40);//清CGRAM1
WRCGRAM(0x00,0x00,0x50);//清CGRAM2
WRCGRAM(0xaa,0x55,0x40);//写入点
WRCGRAM(0x55,0xaa,0x50);//写入点2
ShowCGChar(0x80,00);//显示点并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowCGChar(0x80,02);//显示点2并填满
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
ShowQQChar(0x80,uctech,lengthCF3);//显示'有限公司',以下共四行
ShowQQChar(0x90,uctech,lengthCF3);
ShowQQChar(0x88,uctech,lengthCF3);
ShowQQChar(0x98,uctech,lengthCF3);
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
WRCommand(0x01); //清除显示DDRAM
}
void menu2(void)
{ CLEARGDRAM();
WRGDRAM(0x80,16,32,TAB1);
WaitNms(250); //等待时间
WaitNms(250); //等待时间
stopint();
}
//主函数
void main(void)
{
menu();//初始化及半宽字符和点横竖汉字扫描
menu2();//绘图显示
for(;;)
{;}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
金丝熊,一般吃什么啊?水果还是蔬菜? 怎样管理wp7上安装的软件?我手机是三星i917 》有文件管理软件吗?、我的... 二片式球阀(关于二片式球阀的基本详情介绍) 二片式球阀工作原理 二片式球阀优点 不锈钢二片式球阀安装与维护及注意事项 二片式球阀两片式球阀的结构特点 不锈钢二片式球阀结构特点 不锈钢二片式球阀简介 吃刚出炉的蛋糕致癌? 火锅店需要安装中央空调吗? 四位数码管显示0到9999 四个按键控制数字加减清零用51单片机C 语言 100平米的火锅店需要多大的中央空调供应,100平米的火锅店需要多大 在89C51的4个并行口中,能作为通用I&#47;O口和高8位地址总线的是(A )。 A.P0 B.P1 C.P2 D.P3 火锅店,两层,楼上楼下约500平米,想安装*空调,问一下大概要多少钱?什么牌子既实惠又好用?谢啦! 大众尚酷p189c00是什么问题 奥迪a3变速箱故障,报p189c00 朋友准备干一家火锅店,面积1000平米,*空调选哪种牌子的,实用性强,性价比高,大概需要多少钱, 朗逸故障码P189c00怎么解决? 高尔夫7报故障p189C00 火锅店装什么样的空调比较好,那种空调效果好又省电 大众帕萨特p189c故障码怎么解决 火锅店中央空调用三星的好还是美的的好? 开一家400平米左右的火锅店用柜式空调合适还是*空调合适各自费用多少? 火锅店适合装什么空调? 400平的火锅店,如果要配*空调的话,应该怎么调配呢?或者有没有其他的换气制冷方案?在商场一楼 火锅店中央空调用多大的比较划算 请问火锅馆用中央空调好还是风管机好吗 英语六级网课视频? 梦见坐车上坡和别的车划蹭人没有受伤下醒了 梦见房屋塌了,人们掉下来了,但没有人员受伤? 梦见自己家和别人家房子都塌了,但家里人都没受伤。这个梦有什么寓意? 救急!请问单片机C语言IO口如何定义啊 51 单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序 梦见下雨二姨家的房子塌了但没伤着人,咋回事? 改c语言程序,要显示今天的年月日时分秒,,在线等啊 ,急,,全部分了都用上了 为什么我的LCD1602数据显示不了?? 成都易态科技有限公司怎么样? 成都易态科技有限公司评价怎么样?这个公司叫我过去面试,不知道怎么样啊? 那一夜我对着自己开了一枪是什么歌,什么歌曲的歌词 有一首歌是什么我给了自己一枪,求歌名 我对自己开了一枪歌词是什么意思 新月斜挂,朦胧的月光透过树枝,洒在地上改成比喻句怎么改? 看美丽的月光洒在大地上多么动人的夜景那轮明月多么像个大圆盘正如李白所说 美丽的........作文 造句 春雨是绿的,洒在地上,草就变绿了 阳光温暖的洒在地上这句歌词是哪首歌的 夏天什么温暖的阳光洒在大地上 大地上盛开着美丽的花? 我站在铁索桥上: 人民捧着美丽的鲜花,轻轻地,轻轻地洒在这英雄的土地上 为什么要扫描二维码图片;如何用手机扫描二维码。