51单片机 LCD1602显示

引脚图

 

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^7;
sbit RW=P2^6;
sbit E=P2^5;

void lcd_initial(void);	//LCD初始化函数
void check_busy(void);	   //检查是否忙碌函数
void write_command(uchar com);	 //写命令函数
void write_data(uchar dat);		  //写数据函数
void string(uchar ad,uchar *s);	  //显示字符串函数
void delay(uint);					//延时函数
void main(void)
	{
    lcd_initial();			 //调用初始化函数
	 while(1)
	 {
	 string(0x85,"mzf");
	 string(0xC2,"185*****5260");
	 delay(100);
	 write_command(0x01);
	 delay(100);
 
	 }
	}
void delay(uint j)	 //1ms的延时
{
	uchar i=250;
	for(;j>0;j--)
	{
		while(--i);
		i=249;
		while(--i);
		i=250;
 
	}
}
 
void check_busy(void)
{
	uchar dt;
	do
	{
		dt=0xff;	 //dt为变量单元,初值为0xff
		E=0;		  
		RS=0;		  //RS等于0,E=1时,才能够进行读忙碌状态
		RW=1;
		E=1;		 
		dt=out;		  //out为P0口,将P0口的状态送给dt;
 
	}while(dt&0x80);
		E=0;
}
void write_command(uchar com)
{
	check_busy();	  //检查是否忙碌,检查BF标志位,如果BF=1,则繁忙
	E=0;
	RS=0;			   //RS,E同时为零时,才可以写入命令;
	RW=0;
	out=com;		 	//将命令com写入P0;
	E=1;				//按规定执行命令时,E应为正脉冲,即正跳变,所以前面应该先直零
	_nop_();		//空操作给硬件反应时间,此函数包含在intrins里面
	E=0;
	delay(1);
 
}
void write_data(uchar dat)
{
	check_busy();
	E=0;
	RS=1;
	RW=0;
	out=dat;
	E=1;
	_nop_();
	E=0;
	delay(1);
 
}
void lcd_initial(void)	 //液晶显示器初始化函数
{
	write_command(0x38);  //两行显示,5x7点阵,8位数据
	write_command(0x0C);  //开整体显示,光标关,无闪烁
	write_command(0x06);  //写入一个字符后,地址指针加一
	write_command(0x01);   //清屏
	delay(1);
}
void string(uchar ad,uchar *s)
{
	write_command(ad);
	while(*s>0)
	{
		write_data(*s++);
		delay(100);
	}
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值