📄 lcd1602.c
字号:
/********************************************************
液晶显示器说明
1、8位传输数据 LCD_DATA = P0
2、控制端口 RS=P2^0 RW=P2^1 EN=P2^2
********************************************************/
/********************************************************
函数说明
1、LCD_init();//初始化
2、LCD_CLR();//清屏函数
3、printf_dat(uchar row,uchar col,uchar count,uint dat)
//在第row行 第col位开始显示count个数据(dat)
4、printf_char(uchar row,uchar col,uchar Inbuffer[31])
//在第row行 第col位开始显示 字符串Inbuffer[]
********************************************************/
#include<reg51.H>
#define uchar unsigned char
#define uint unsigned int
//********************************************************//
// 1602所用端口 *//
//********************************************************//
#define LCD_DATA P0//1602数据端口
sbit RS=P2^7;
sbit RW=P2^6;
sbit EN=P2^5;
/*sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2; */
//********************************************************//
//* 函数声明 *//
//********************************************************//
void delay(uint a);
void write_adr(uchar adr) ;
void write_data(uchar dat);
void LCD_init(void);
void LCD_CLR(void);
void printf_data(uchar row,uchar col,uchar count,uint dat);
void printf_char(uchar row,uchar col,uchar Inbuffer[31]);
//********************************************************//
//* 1602 函数段 *//
//********************************************************//
//延时函数
void delay(uint a)
{
while(a--);
}
//写指令
void write_adr(uchar adr)
{
RS=RW=0;
LCD_DATA=adr;
delay(1);
EN=1;
delay(5);
EN=0;
delay(500);
}
//写数据
void write_data(uchar dat)
{
RS=1;RW=0;
LCD_DATA=dat;
delay(1);
EN=1;
delay(5);
EN=0;
delay(500);
}
//初始化
void LCD_init(void)
{
write_adr(0x38);
write_adr(0x80);
}
//清屏函数
void LCD_CLR(void)
{
LCD_init();
write_adr(0x01);
delay(500);
}
//写数 (5位数据)
void printf_data(uchar row,uchar col,uchar count,uint dat)
{
uchar sh1,sh2,sh3,sh4,sh5;
sh5=dat/10000;
sh4=dat%10000/1000;
sh3=dat%1000/100;
sh2=dat%100/10;
sh1=dat%10;
write_adr(0x0c);
switch(row)
{
case 1:row=0x80;break;
case 2:row=0xc0;break;
default:break;
}
write_adr(row+col-1);
delay(500);
if(count>=5)
write_data(sh5+48);
if(count>=4)
write_data(sh4+48);
if(count>=3)
write_data(sh3+48);
if(count>=2)
write_data(sh2+48);
if(count>=1)
write_data(sh1+48);
}
//写一段字符
void printf_char(uchar row,uchar col,uchar Inbuffer[31])
{
uchar i;
write_adr(0x0c);
switch(row)
{
case 1:row=0x80;break;
case 2:row=0xc0;break;
default:break;
}
write_adr(row+col-1);
delay(500);
for(i=0;i<31;i++)
{
if(Inbuffer[i]=='%'&&Inbuffer[i+1]=='d')
break;
if(col+i==16&&row==0x80)
write_adr(0xc0);
write_data(Inbuffer[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -