⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602.h

📁 智能电动小车的程序
💻 H
字号:
#define uchar unsigned char
#define uint unsigned int
#define delay5ms() Delayms(5 ms)
sfr lcdport=0x80;
//unsigned char xdata * lcdport=(unsigned char xdata *)0x8000;//使用指针
//unsigned char xdata lcdport _at_ 0x8000;//使用绝对变量
//#define lcdport 0x8000;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
void writecmd(uchar cmd,uchar i);//写入命令rs=0,rw=0 E高脉冲有效
void writedata(uchar ddata);//写入数据rs=1,rw=0 E高脉冲有效
uchar rdsta();//读取状态信息,rs=0,rw=1,e=1
uchar rddata();//读取数据,rs=1,rw=1,e=1
void Lcd_Initial();//初始化液晶显示器
void locatexy(uchar px,uchar py);//定位光标到x,y处
void row00(uchar y);//y行清空,显示空白
void one_displ(uchar x,uchar y,uchar ddata);//显示一个字符
void Lcd_Puts(uchar x,uchar y,uchar str[]);//从x,y处开始显示字符串以'/0'结尾,若字符长度过长则有覆盖现象
void Lcd_Initial()//初始化液晶显示器
{
	delay5ms();delay5ms();delay5ms();//延时15ms
	writecmd(0x38,0);//写38H指令
	delay5ms();	
	writecmd(0x38,0);//写38H指令
	delay5ms();	
	writecmd(0x38,0);//写38H指令
	delay5ms();	
	writecmd(0x38,1);//显示模式设置
	writecmd(0x08,1);//关显示
	writecmd(0x01,1);//清屏
	writecmd(0x06,1);//光标移动设置
	writecmd(0x0c,1);//开显示,光标闪烁
}
void writecmd(uchar cmd,uchar i)//写入命令
{
	if(i)while(rdsta()&0x80);//读忙判断,忙,等
	lcdport=cmd;//写命令
	RS=0;
	RW=0;
	E=0;
	_nop_();
	E=1;//E高脉冲有效
	_nop_();
	lcdport=0xff;
	E=0;
}
void writedata(uchar ddata)//写入数据rs=1,rw=0 E高脉冲有效
{
	while(rdsta()&0x80);//读忙等待
	lcdport=ddata;//写数据
	RS=1;
	RW=0;
	E=0;
	_nop_();
	E=1;//E高脉冲有效
	_nop_();
	E=0;
	lcdport=0xff;
}
uchar rdsta()//读取状态信息,rs=0,rw=1,e=1
{
	uchar temp;
	lcdport=0xff;
	RS=0;
	RW=1;
	E=1;
	temp=lcdport;
	//E=0;
	return temp;
}
uchar rddata()//读取数据,rs=1,rw=1,e=1
{
	uchar temp;
	while(rdsta()&0x80);//读忙等待
	lcdport=0xff;
	RS=1;
	RW=1;
	E=1;
	temp=lcdport;
	//E=0;
	return temp;
}
void Lcd_Clr()//清屏
{
	writecmd(0x01,1);//清屏
}
void one_displ(uchar x,uchar y,uchar ddata)//显示一个字符
{
	if((x>15)||(y>1))return;//坐标错误,不显示
	locatexy(x,y);//定位光标
	writedata(ddata);//写数据
}
void locatexy(uchar px,uchar py)//定位光标到x,y处
{
	uchar addr;
	addr=px&0x0f;
	if(py)addr=addr|0x40;
	addr|=0x80;
	writecmd(addr,1);//写入光标地址
}
void row00(uchar y)//y行清空,显示空白
{
	uchar i;
	for(i=0;i<16;i++)
	{
		one_displ(i,y,0x20);
	}
}
void Lcd_Puts(uchar x,uchar y,uchar str[])//从x,y处开始显示字符串以'/0'结尾,若字符长度过长则有覆盖现象
{
	uchar i,j;
	for(i=0;str[i]!=0x00;++i)
	{
			one_displ(x++,y,str[i]);
			if(x==16)//行满
			{	
				for(j=0;j<100;j++)delay5ms();//延时500ms
				x=0;
				y=y^0x01;//换行
				if(str[i+1]!=0x00)row00(y);//此行清空
			}
	}
}
void Lcd_Putint(unsigned char x,unsigned char y,unsigned char i,unsigned int num)
								//x y为起始坐标,num是要显示的数,i是要显示的位数
{
	unsigned char bcd[8];
	unsigned int temp;
	bcd[i--]=0x00;
	temp=num;
	for(;(i>=0)&&(i<8);i--)
	{
		bcd[i]=temp%10+0x30;
		temp=temp/10;
	}
	Lcd_Puts(x,y,bcd);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -