51单片机 LCD1602显示

发布时间:2024-12-10 19:34

正确连接显示器和主机可以改善显示效果 #生活常识# #电脑#

引脚图

 

#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年毕业设计【基于单片机的智能鞋柜设计】有源代码和系统
基于单片机的智能鞋柜的设计与实现

随便看看