网站说建设中,qq是哪家公司运营的,直播系统平台,网站怎么做出来的本文为博主 日月同辉#xff0c;与我共生#xff0c;csdn原创首发。希望看完后能对你有所帮助#xff0c;不足之处请指正#xff01;一起交流学习#xff0c;共同进步#xff01; 发布人#xff1a;日月同辉,与我共生_单片机-CSDN博客 欢迎你为独创博主日月同… 本文为博主 日月同辉与我共生csdn原创首发。希望看完后能对你有所帮助不足之处请指正一起交流学习共同进步 发布人日月同辉,与我共生_单片机-CSDN博客 欢迎你为独创博主日月同辉与我共生点赞❤❤❤关注收藏评论☺。 系列专栏 CSDN-单片机串口通信学习系列 我的格言是“尽最大努力做最好的自己 要转载请提前告知 版权声明本文为CSDN博主「日月同辉与我共生」的原创文章CSDN独一份。 目录
一、前言
二、系统设计思路
2.1硬件设计
2.2软件设计
三、硬件设计接线
四、项目代码
4.1命令模块
4.2读忙指令
4.3写命令
4.4写数据
4.5初始化
4.6位置函数
4.7显示字符
五、结果展示 一、前言
LCD1602是一种常见的液晶显示模块它能够显示两行字符。在实际应用中我们经常需要使用LCD1602来显示一些信息例如温度、湿度、时间等。为了实现这个功能我们需要编写相应的程序来控制LCD1602的显示。本文将介绍如何控制LCD1602显示两行字符的方法。
二、系统设计思路
系统设计思路可以分为硬件设计和软件设计。
LCD1602在指定位置显示字符串hello world
2.1硬件设计
主控芯片选择选择STC89C51作为主控芯片由于其较高的性能和稳定性适合用于控制和数据处理。
显示屏选择LCD1602用于传输字符数据和控制信号。
2.2软件设计
(1)LCD1602初始化(可以在游览器中下载LCD1602数据手册查看初始化步骤)。
(2)LCD1602读写时序用于读写数据或数据。
(3)在LCD1602屏中显示字符。
三、硬件设计接线
RS接P2^5 口用于选择数据/命令寄存器。RS0时使用命令寄存器RS1时使用数据寄存器。
RW接P2^6 口用于选择读写寄存器。RW0时使用写寄存器RW1时使用读寄存器。
使能端E接P2^7口。
传输数据/命令(8位二进制)DB0-DB7接P0口。
Vss接5电源VDD接地GNDVEE先接变阻器后接到地。 四、项目代码
不懂如何看读写时序图的可以看LCD1602设计(3)-读写时序
4.1命令模块
LCD1602.h
对LCD1602引脚接的I/O口宏定义并对LCD1602的所有指令进行宏定义。
#ifndef __LCD1602_H__
#define __LCD1602_H__#include reg51.h
#include lcd1602.h//IO口宏定义
sbit LCD1602_RSP2^5;
sbit LCD1602_RWP2^6;
sbit LCD1602_EP2^7;
#define LCD1602_DB P1//命令宏定义
#define LCD_SCREEN_CLR 0x01 //清屏
#define LCD_CURSOR_RST 0x02 //光标复位//显示开关控制指令
#define LCD_OFF 0x08 //显示关光标关不闪烁
#define LCD_FLI 0x09 //显示关光标关闪烁开
#define LCD_CUR 0x0A //显示关光标开不闪烁
#define LCD_CUR_FLI 0x0B //显示关光标开闪烁开
#define LCD_BIS 0x0C //显示开光标关不闪烁
#define LCD_BIS_FLI 0x0D //显示开光标关闪烁开
#define LCD_BIS_CUR 0x0E //显示开光标开不闪烁
#define LCD_ON 0x0F //显示开光标开闪烁开//显示模式控制
#define LCD_AC_ADD_MOVE 0x07 //数据读写操作后AC自动加1画面平移
#define LCD_AC_ADD 0x06 //数据读写操作后AC自动加1画面不平移
#define LCD_AC_RED_MOVE 0x05 //数据读写操作后AC自动减1画面平移
#define LCD_AC_RED 0x04 //数据读写操作后AC自动减1画面不平移//光标移动指令
#define SUR_LEFT 0x10 //光标左移画面显示不移动
#define SUR_RIGHT 0x14 //光标右移画面显示不移动
#define LCD_DIS_FRA_LEFT 0x18 //光标不移动画面显示左移操作后AC自增
#define LCD_DIS_FRA_RIGHT 0x1C //光标不移动画面显示右移操作后AC自减//功能设置
#define EDI4_DISONE_57 0x20 //4位数据接口1行显示5*7点阵
#define EDI4_DISONE_510 0x24 //4位数据接口1行显示5*10点阵
#define EDI4_DISTWO_57 0x28 //4位数据接口2行显示5*7点阵
#define EDI4_DISTWO_510 0x2C //4位数据接口2行显示5*10点阵
#define EDI8_DISONE_57 0x30 //8位数据接口1行显示5*7点阵
#define EDI8_DISONE_510 0x34 //8位数据接口1行显示5*10点阵
#define EDI8_DISTWO_57 0x38 //8位数据接口2行显示5*7点阵
#define EDI8_DISTWO_510 0x3C //8位数据接口2行显示5*10点阵//函数声明
void LCDReadBF();//读忙检测
void LCDWriteCmd(unsigned char cmd);//写命令
void LCDWritedata(unsigned char dat);//写数据
void LCDInit();//初始化
void LCDSetPosition(unsigned char x,unsigned char y);//位置函数
void LCDShowStr(unsigned char x,unsigned char y,unsigned char *str);//字符串位置显示函数#endif
4.2读忙指令 读时序图 void LCDReadBF() //读忙检测(读命令)
{unsigned char i;unsigned char state;LCD1602_DB0XFF;LCD1602_RS0;LCD1602_RW1;do{LCD1602_E1;stateLCD1602_DB;//将LCD1602的数据给主机单片机LCD1602_E0;i;if(i200)break;//防止忙过头卡死}while(state0x80); //判断忙不忙
}
4.3写命令 写时序图: void LCDWriteCmd(unsigned char cmd) //写命令
{LCDReadBF();//读忙检测确保LCD1602此刻不在工作LCD1602_RS0;LCD1602_RW0;LCD1602_DBcmd;//将命令dat给LCD1602LCD1602_E1;LCD1602_E0;
}
4.4写数据 写时序图 void LCDWritedata(unsigned char dat) //写数据
{LCDReadBF();//读忙检测确保LCD1602此刻不在工作LCD1602_RS1;LCD1602_RW0;LCD1602_DBdat;//将数据dat给LCD1602LCD1602_E1;LCD1602_E0;
}
4.5初始化 初始化步骤功能设置显示开关控制指令光标移动指令/显示模式控制 功能设置接口位数(4位/8位)、显示多少行(1行/2行)、点阵类型(5*7点阵/5*10点阵)。 显示开关控制指令是否显示字符、光标是否关闭、光标是否闪烁。 光标移动指令光标不动/左移/右移、画面不动/左移/右移。 显示模式控制光标左移/右移、画面左移/右移。 光标移动指令和显示模式控制有和区别请关注我下回出解析。
void LCDInit()
{LCDWriteCmd(EDI8_DISTWO_57);//8位数据接口2行显示5*7点阵LCDWriteCmd(LCD_BIS);//显示开光标关不闪烁LCDWriteCmd(SUR_RIGHT);//光标右移画面显示不移动
}
4.6位置函数 每个位置对应一个DDRAM地址LCD1602两行显示1行最大显示16字符。 第一行DDRAM地址为00H~0FH第二行DDRAM地址为40H~4FH。 字符要在某个位置显示并不是直接调用DDRAM地址而是用通过写命令的方式完成。 通过LCD1602命令表格可以看出位置显示命令DDRAM的8个二进制的最高位为1其他位不变。 void LCDSetPosition(unsigned char x,unsigned char y) //位置函数 y行 0-1
{ // x列 0-15if(y0){LCDWriteCmd(0x80|x);}else{LCDWriteCmd(0x80|(x0x40));}
}4.7显示字符
显示hello world
#include lcd1602.hvoid main()
{unsigned char str[]hello world;LCDInit();//初始化while(1){LCDShowStr(0,0,str);//在第0行第0列显示hello world//LCDShowStr(0,1,hello world);}
}
五、结果展示
在第0行第0列开始显示字符串hello world显示一切正确。 下一文将着重 LCD1602四位接口亲爱的读者敬请期待下一文更精彩
一日不读书胸臆无佳想。我叫不白吃喜欢我的可以支持我博主名叫日月同辉,与我共生
日月同辉,与我共生_单片机基础,单片机串口通信-CSDN博客日月同辉,与我共生擅长单片机基础,单片机串口通信,等方面的知识,日月同辉,与我共生关注stm32,c语言,51单片机,proteus,单片机领域.https://blog.csdn.net/LIN___IT?spm1000.2115.3001.5343