lcd12864液晶屏,有点复杂,只有基本的显示。
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LCD12864_READ = P0^7;
sbit LCD12864_RS = P3^5;
sbit LCD12864_RW = P3^6;
sbit LCD12864_EN = P3^4;
sbit LCD12864_RD = P3^7;
//
void Delay_Ms(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
/*******************LCD12864LCD检查忙*********************/
void LCD12864_busy()
{
LCD12864_RS = 0;
LCD12864_RW = 1;
LCD12864_EN = 1;
Delay_Ms(1);
P0 = 0xff;
while(1)
{
LCD12864_EN = 1;
if(LCD12864_READ == 0) break;
}
LCD12864_EN = 0;
}
/*******LCD12864WriteCommand要写入的命令********************/
void LCD12864_Write_Cmd(unsigned char Cmd)
{
LCD12864_busy();
LCD12864_RS = 0;
LCD12864_RW = 0;
LCD12864_EN = 0;
Delay_Ms(1);
P0 = Cmd;
Delay_Ms(1);
LCD12864_EN = 1;
Delay_Ms(1);
LCD12864_EN = 0;
}
/**************LCD12864WriteByte要写入的字节*************/
void LCD12864_Write_Date(unsigned char date)
{
LCD12864_busy();
LCD12864_RS = 1;
LCD12864_RW = 0;
LCD12864_EN = 0;
P0 = date;
Delay_Ms(1);
LCD12864_EN = 1;
Delay_Ms(1);
LCD12864_EN = 0;
}
// *******************
void LCD12864_init()
{
LCD12864_RD = 1; //并口方式
LCD12864_Write_Cmd(0x34); //扩充指令操作
LCD12864_Write_Cmd(0x30); //基本指令操作
LCD12864_Write_Cmd(0x0C); //显示开,关光标
LCD12864_Write_Cmd(0x01); //清除LCD的显示内容
}
//
void gotoxy(uchar x,uchar y)
{
if(x==1) {LCD12864_Write_Cmd(0x80+y-1);}
else if(x==2) {LCD12864_Write_Cmd(0x90+y-1);}
else if(x==3) {LCD12864_Write_Cmd(0x88+y-1);}
else if(x==4) {LCD12864_Write_Cmd(0x98+y-1);}
}
//
void LCD_write_zifu(uchar *p)
{
while(*p!=0)
{
LCD12864_Write_Date(*p);
p++;
}
}
/*****主程序*****************************/
void main()
{
LCD12864_init();
gotoxy(1,1);
LCD_write_zifu("LCD 液晶,带字库");
gotoxy(2,1);
LCD_write_zifu("LCD 液晶,带字库");
gotoxy(3,1);
LCD_write_zifu("LCD 液晶,带字库");
gotoxy(4,1);
LCD_write_zifu("LCD 液晶,带字库");
while(1);
}
个人见解,感谢阅读。