?? 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 + -