PG160128A为一个有160*128点阵的lcd显示屏,它有着16个字模
相关文档在连接:
https://max.book118.com/html/2017/0702/119715409.shtm
个人硬件连接图如下
运行效果图如下
下面是代码,请结合硬件连接图来看基本操作
代码移植的时候只需更改变量 data1 wr rd cd
#include"reg52.h"
#define uchar unsigned char
sfr data1=0xA0;
//data1为P2传输数据 P2的地址为0xA0 来源于reg52.h
sbit wr=P3^6;
sbit rd=P3^7;
sbit cd=P3^5;
//写一次数据
void wrOneData(uchar data_1);
//读取状态检测
uchar lcdStatue();
//判断s0s1为高
void lcdEnable();
//发送无参命令
void postFunction0(uchar cmd);
//发送单参数命令
void postFunction1(uchar cmd, uchar data_1);
//发送双参数命令
void postFunction2(uchar cmd, uchar data_1, uchar data_2);
//判断s2s3为高
void lcdOneWrEnable();
//一次读写测试
void lcdOneWr();
void main(){
while(1){
postFunction2(0x42,0x00,0x00);
postFunction2(0x43,0x14,0x00);
postFunction0(0x44);
postFunction0(0x96);
lcdOneWr();
postFunction2(0x21,0x00,0x00);
}
}
uchar lcdStatue(){
uchar flag;
cd=1;
rd=1;
wr=1;
data1=0xff;
rd=0;
flag=data1;
rd=1;
return flag;
}
void lcdEnable(){
while(1){
if(lcdStatue()&0x03==0x03)
break;
}
}
void postFunction0(uchar cmd){
lcdEnable();
cd=1;
rd=1;
data1=cmd;
wr=0;
wr=1;
}
void postFunction1(uchar cmd,uchar data_1){
lcdEnable();
cd=0;
rd=1;
wr=1;
data1=data_1;
wr=0;
wr=1;
lcdEnable();
cd=1;
rd=1;
data1=cmd;
wr=0;
wr=1;
}
void postFunction2(uchar cmd,uchar data_1,uchar data_2){
lcdEnable();
cd=0;
rd=1;
wr=1;
data1=data_1;
wr=0;
wr=1;
lcdEnable();
cd=0;
rd=1;
wr=1;
data1=data_2;
wr=0;
wr=1;
lcdEnable();
cd=1;
rd=1;
data1=cmd;
wr=0;
wr=1;
}
void lcdOneWrEnable(){
while(1){
if(lcdStatue()&0x0c==0x0c){
break;
}
}
}
void LcdOneWr(){
int i=0;
postFunction2(0x24,0x00,0x00);
lcdOneWrEnable();
postFunction0(0xb0);
for(i=0;i<128;i++){
lcdOneWrEnable();
//这里向PG160128A发送数据使用的是字库的数据范围为0x02~0x0f
wrOneData(0x02);
}
postFunction0(0xb2);
}
void wrOneData(uchar data_1){
cd=0;
wr=1;
rd=1;
data1=data_1;
wr=0;
wr=1;
}
作者:吾非善类