MCU之进阶12864图形液晶------简易显示汉字(基础篇)
0赞
经过看资料手册,也经过几天的努力,自己写完了基础部分,暂时用延时,学了结构体之后在用状态机,请高手指教
#include <reg52.h>
#include <intrins.h>
typedef unsigned char Uint8;
typedef unsigned int Uint16;
#define Pro0 P0
Uint8 code zimo[] = "我爱MCU-51单片机";
Uint8 code zimo1[] = "AI智能MCU-机器人";
Uint8 code zimo2[] = " I LOVE GOOD ";
Uint8 code zimo3[] = "128-64图形液晶屏";
sbit LCD_RS = P3^5;
sbit LCD_RW = P3^4;
sbit LCD_EN = P3^3;
void LCD_Init();
void Read_BF();
void Write_Com(Uint8 Com);
void Write_Dat(Uint8 Dat);
void delay(Uint16 a);
void Write_ComDat(Uint8 Comt,Uint8 *Date);
Uint8 i = 0;
void main()
{
LCD_Init();
delay(2);
Write_ComDat(0x80,zimo);
delay(2);
Write_ComDat(0x90,zimo1);
delay(2);
Write_ComDat(0x88,zimo2);
delay(2);
Write_ComDat(0x98,zimo3);
delay(2);
while(1);
}
void delay(Uint16 a)
{
Uint16 m,j;
for(m = a; m > 0; m--)
for(j = 0; j > 1000; j--)
_nop_();
}
void LCD_Init() //初始化
{
Pro0 = 0xff;
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
delay(2);
Write_Com(0x30);
delay(2);
Write_Com(0x0c);
delay(2);
Write_Com(0x01);
delay(2);
}
void Read_BF() //忙检测
{
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delay(2);
while(Pro0 & 0x80);
LCD_EN = 0;
delay(2);
}
void Write_Com(Uint8 Com) //写指令
{
LCD_EN = 0;
Read_BF();
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
delay(2);
Pro0 = Com;
LCD_EN = 0;
delay(2);
}
void Write_Dat(Uint8 Dat) //写数据
{
LCD_EN = 0;
Read_BF();
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
delay(2);
Pro0 = Dat;
LCD_EN = 0;
delay(2);
}
void Write_ComDat(Uint8 Comt,Uint8 *Date)
{
Write_Com(Comt);
delay(2);
while(*Date != '\0')
{
Write_Dat(*Date++);
delay(2);
}
}

