📄 lcd.c
字号:
#include <AT89X52.H>
#include <lcd.h>
#include <intrins.h>
void delay(unsigned char ms)
{
unsigned char i,j;
for(i=ms;i>0;i--)
for(j=100;j>0;j--);
}
void WriteCommandLCM(unsigned char comm,unsigned char bank)
{
while (checkbusy(bank));
RW = 0;
RS = 0;
if(1==bank) {CS1=0; CS2=1;}
if(2==bank) {CS1=1; CS2=0;}
if(3==bank) {CS1=0; CS2=0;}
P0 = comm;
EN = 1;
EN = 0;
}
void WriteDataLCM(unsigned char Data,unsigned char bank)
{
while (checkbusy(bank));
RS=1;
RW=0;
if(1==bank) {CS1=0; CS2=1;}
if(2==bank) {CS1=1; CS2=0;}
if(3==bank) {CS1=0; CS2=0;}
P0=Data;
EN=1;
EN=0;
}
void LCMInit(void)
{
RST = 0;
EN =0;
delay(10);
RST = 1;
delay(10);
CS1=0;
CS2=0;
WriteCommandLCM(0x3f,3);//打开显示功能;
WriteCommandLCM(0x40,3);//设置Y地址为0;
WriteCommandLCM(0xb8,3);//设置行地址为0;
WriteCommandLCM(0xc0,3);//设置显示起始行为0;
}
unsigned char ReadStatusLCM(unsigned char bank)
{
unsigned char sta;
RS=0;
RW=1;
if(1==bank) {CS1=0; CS2=1;}
if(2==bank) {CS1=1; CS2=0;}
if(3==bank) {CS1=0; CS2=0;}
P0=0xff;
EN=1;
EN=0;
sta=P0;
return sta;
}
unsigned char checkbusy(unsigned char bank)
{
return (ReadStatusLCM(bank)&0x80);
}
void writelcd(unsigned char x,unsigned char y,unsigned char *p)
{
unsigned char bank=1,row,i;
row=y;
if(y>4) {bank=2;row=y-4;}
WriteCommandLCM(0xb6+x*2,bank);//设置行地址为X;
WriteCommandLCM(0x30+row*16,bank);//设置列地址为y;
for(i=0;i<16;i++) WriteDataLCM(p[i],bank);
WriteCommandLCM(0xb7+x*2,bank);
WriteCommandLCM(0x30+row*16,bank);
for(i=0;i<16;i++) WriteDataLCM(p[i+16],bank);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -