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);
}
}
网址:51单片机 LCD1602显示 https://www.yuejiaxmz.com/news/view/436408
相关内容
基于51单片机空气质量监测报警仿真LCD1602液晶显示( proteus仿真+程序+设计报告)论文选题分享及思路(二)《基于51单片机环境监测系统》
51单片机温度采集控制系统:打造智能温控解决方案
基于51单片机的智能家居系统
51单片机、DS18B20、智能窗帘控制系统
基于51单片机智能台灯节能灯热释人体自动感应照明灯设计
基于51单片机DHT11的加湿器Proteus仿真程序设计:打造智能环境控制新体验
基于51单片机的智能鞋柜 智能鞋盒 换气除湿 蓝牙传输控制 红外感应 消毒 控制系统 实物+源程序+原理图+仿真+其它资料
2023年毕业设计【基于单片机的智能鞋柜设计】有源代码和系统
基于单片机的智能鞋柜的设计与实现