12864如何初始化?

2025-02-22 23:13:20
推荐回答(1个)
回答1:

#include //包含头文件
#include

#define uchar unsigned char //简化整型,字符型变量书写
#define uint unsigned int

#define LCD_data P0 // 引脚定义
sbit LCD_RS = P2^2;
sbit LCD_RW = P2^3;
sbit LCD_EN = P2^4;
sbit LCD_PSB = P2^5;

void delay_ms(unsigned int ms) //延时函数 1ms
{
unsigned int i,j;
for(j=0;j<=ms;j++)
{
for(i=0;i<=120;i++)
{}
}
}

void delay4us() //延时函数 4Us
{
_nop_();
_nop_();
_nop_();
_nop_();
}

void lcd_checkBusy(void) //检测忙标志
{
unsigned char busy;
do{
LCD_EN = 0;
LCD_RS = 0;
LCD_RW = 1;
delay4us();
LCD_EN = 1; //在使能端的一个上升沿读取LCD数据
busy = P0;
delay4us();
LCD_EN = 0;
}
while(busy&0x80); //判断最高位是否为0,为0则处于空闲状态
}

void lcd_wcmd(uchar cmd) //写指令函数
{
lcd_checkBusy(); //检测忙碌状态
LCD_RS = 0; //RS至低,指令操作
LCD_RW = 0; //RW至低,写操作
LCD_EN = 0;
delay4us();
P0 = cmd; //指令数据
delay4us();
LCD_EN = 1; //给使能端一个上升沿保存数据
delay4us();
LCD_EN = 0;
}

void lcd_wdat(uchar dat) //写数据函数
{
lcd_checkBusy(); //检测忙碌状态
LCD_RS = 1; //RS至高,数据操作
LCD_RW = 0;
LCD_EN = 0;
P0 = dat; //给LCD要显示的数据
delay4us();
LCD_EN = 1; //给使能端一个上升沿保存数据
delay4us();
LCD_EN = 0;
}

void lcd_init() //初始化LCD
{
LCD_PSB = 1; //选择并行模式
lcd_wcmd(0x30); //初级指令集
delay_ms(5);
lcd_wcmd(0x0C); //开显示
delay_ms(5);
lcd_wcmd(0x01); //清屏
delay_ms(5);
}

在主函数中调用即可。(这个初始化函数设定屏为文本格式)