📄 lcd.c
字号:
//RS (CS) O H: Data L: Instruction Code
//R/W (SID) O H: Read L: Write
#include"reg51.h"
#define unchar unsigned char
#define unint unsigned int
#define LCDDATA P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
//sbit EN=P1^7;
//extern void disp_graphic(unsigned int ru_kou);
void delay20us(void)
{
unchar n;
for(n=0;n<15;n++);
}
void delay15ms(void)
{
unint n;
for(n=0;n<4800;n++);
}
void delay125us(void)
{
unchar n;
for(n=0;n<100;n++);
}
//EN下降沿写入数据
void lcd_write_command(unchar c) //向LCD模块的命令寄存器写一个字节c。
{
RS=0;
RW=0;
EN=0;
delay20us();
EN=1;
delay20us();
LCDDATA=c;
delay20us();
EN=0;
delay20us();
}
void lcd_write_data(unchar ddata) //向LCD模块的字符发生器或显存写一个字节data。
{
RS=1;
RW=0;
EN=0;
delay20us();
EN=1;
delay20us();
LCDDATA=ddata;
delay20us();
EN=0;
delay20us();
RS=0;
}
unchar lcd_read_style()// 从LCD模块读取忙碌标志(BF)可以确认内部动作是否完成,
// 同时可以读出地址计数器(AC)的值
{
unchar style;
RS=0;
RW=1;
EN=0;
delay20us();
EN=1;
delay20us();
style=LCDDATA;
delay20us();
EN=0;
delay20us();
RS=0;
RW=0;
return(style);
}
unchar lcd_read_data(unchar addr)// 从LCD模块的字符发生器或显存读出一个字节
{
unchar in;
lcd_write_command(addr);
RS=1;
RW=1;
EN=0;
delay20us();
EN=1;
delay20us();
in=LCDDATA;
delay20us();
EN=0;
delay20us();
RS=0;
RW=0;
return(in);
}
void lcd_init() //初始化LCD模块。
{
lcd_write_command(0x30); //基本命令集
delay125us();
lcd_write_command(0x0c); //整体开显示,游标关闭
delay125us();
lcd_write_command(0x01); //清除显示
delay15ms();
lcd_write_command(0x06); //游标方向设定
delay125us();
}
void lcd_graphic_init()
{
lcd_write_command(0x01);
delay15ms();
lcd_write_command(0x32);
delay125us();
lcd_write_command(0x36);
delay125us();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -