📄 lcd_driver.c
字号:
#include <c8051f020.h>
#include "lcd_driver.h"
#include "delay.h"
//#include <intrins.h>
//---------------------------------
#define uchar unsigned char
#define uint unsigned int
//--------------------------------
//-----------------------------------
uchar a=0x80;
//检查忙信号 -------------------------
check_busy(void)
{
uchar i,bf,temp;
P5=0xff;
temp=P5;
temp=temp&0x80;
bf=0x80&&temp;
for(i=0;i<5;i++)
{
if(bf==0)
{
P4 &=~0x04;
break;
}
delay(1,10);
}
P4 &=~0x04;
}
void LCD_data(uchar y)
{
check_busy();
delay(100,100);
P4=0x01; /*RS=1,RW=0*/
P5=y;
delay(1,1);
P4 |=0x04; /*EN=1*/
delay(1,1);
P4 &=~0x04; /*EN=0*/
a++;
dispmove();
}
void LCD_string(uchar row,uchar column,uchar *dis_buffer) //发送一串字符
{
uchar i=0;
a=(row+1)*0x40+column-0x01;
LCD_cmd(a);
while(dis_buffer[i]!='\0')
{
LCD_data(dis_buffer[i]);
i++;
}
}
void LCD_clear_line(uchar line)
{
uchar i;
a=(line+1)*0x40;
LCD_cmd(a);
for(i=0;i<16;i++)
LCD_data(0x20);
}
//写控制命令-----------------------------
void LCD_cmd(uchar z)
{
check_busy();
delay(100,100);
P4=0x00; //RS=0,RW=0
P5=z;
delay(10,1);
P4 |=0x04; //EN=1
delay(1,1);
P4 &=~0x04; //EN=0
}
//换行函数----------------------------
void dispmove()
{
if(a==0x90) //换到下行
{
a=0x0C0;
LCD_cmd(0xC0);
}
if(a==0xd1) //回首行
{
a=0x080;
LCD_cmd(0x01);
LCD_cmd(0x80); //写首地址
}
}
//lcd的初始化---------------------------
void LCD_Init()
{
LCD_cmd(0x01);
LCD_cmd(0x38);
LCD_cmd(0x0c); //显示光标并闪烁
LCD_cmd(0x01);
LCD_cmd(0x06);
LCD_cmd(0x80);
LCD_cmd(0x02);
}
//////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -