lcd1602显示流程图

lcd1602显示流程图,第1张

lcd1602显示流程图:

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。

不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。

扩展资料:

LCD1602与单片机的连接有两种方式,一种是直接控制方式,另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同,其他都一样。

1、直接控制方式

LCD1602的8根数据线和3根控制线E,RS和R/W与单片机相连后即可正常工作。一般应用中只须往LCD1602中写入命令和数据,因此,可将LCD1602的R/W读/写选择控制端直接接地,这样可节省1根数据线。

VO引脚是液晶对比度调试端,通常连接一个10kΩ的电位器即可实现对比度的调整;也可采用将一个适当大小的电阻从该引脚接地的方法进行调整,不过电阻的大小应通过调试决定。

2、间接控制方式

间接控制方式也称为四线制工作方式,是利用HD44780所具有的4位数据总线的功能,将电路接口简化的一种方式。为了减少接线数量,只采用引脚DB4~DB7与单片机进行通信,先传数据或命令的高4位,再传低4位。

采用四线并口通信,可以减少对微控制器I/O的需求,当设计产品过程中单片机的I/O资源紧张时,可以考虑使用此方法。

参考资料来源:百度百科-LCD1602

①问,RS,RW,E 的设置为 读状态时序 的过程,读出来的数据(数据口P1) 的最高位 刚好即为 液晶的 忙碌 标志位。

②问,writecontrol(unsigned condata) 函数 是个 写指令 函数;

③问,空 *** 作 是为了让数据稳定后,才使能 液晶接收数据;

④问,写指令有时间 间隔要求,太频繁的读写会丢码,所以要加延时,三条38指令,是因为安全起见,上电后马上初始化会出现液晶电源不稳而丢码;

⑤问,液晶显示 只在 更新数据 的时候刷新一次即可,液晶会维持内容,无需重复刷新。

⑥附送,③和④问,都是驱动太恶心而造成的结果,好的驱动程序不需如此 *** 作。液晶的时序要求为ns级,单片机的指令周期普遍为us级,根本不需过多累赘。

#include"reg52.h" //包含52头文件

#include"SMC1602A.h" //包含SMC1602A宏定义文件

#define BusyReadCount 10 //读忙标志等待次数

#define SMC1602_Data P0 //定义 数据接口

//sbit SMC1602_VO=P2^4 //定义 VO对比度接口

sbit SMC1602_RW=P2^5 //定义 R/W接口25

sbit SMC1602_RS=P2^6 //定义 RS接口26

sbit SMC1602_E=P2^7 //定义 E接口27

#define SMC1602_En SMC1602_E=1 //使能

#define SMC1602_Dis SMC1602_E=0 //禁止

uchar SMC1602_Read(bit read_type) //1602液晶屏读函数

{

uchar read_data

SMC1602_Dis //禁止使能

SMC1602_RW=ReadOperate //读 *** 作

SMC1602_RS=read_type //读类型:0状态,1数据

SMC1602_En //开启使能

read_data=SMC1602_Data //存储结果

SMC1602_Dis //禁止使能

return read_data //返回结果

}

void SMC1602_WriteByte(bit write_type,uchar write_data) //1602液晶屏读函数

{

uchar i=BusyReadCount

for(ii--) //延时 *** 作,为写 *** 作预留回复时间

while((SMC1602_Read(CommOperate)&BusyState) &&(++i<=BusyReadCount)) //读取忙标志(BusyReadCount次),若均忙中,则不再读取忙标志,直接执行写 *** 作

//while(SMC1602_Read(CommOperate)&BusyState) if(++i>BusyReadCount) return //读取忙标志,若BusyReadCount次均忙中,则不进行写 *** 作

//while(SMC1602_Read(CommOperate)&BusyState) //等待空闲(死等)

SMC1602_Dis //禁止使能

SMC1602_RW=WriteOperate //写 *** 作

SMC1602_RS=write_type //写类型:0指令,1数据

SMC1602_Data=write_data //写 *** 作,将 *** 作数送的数据口

SMC1602_En //开启使能

SMC1602_Dis //禁止使能

}

void SMC1602_WriteCGRAM(uchar *write_buf,uchar start_loca,uchar word_num,uchar start_addr) //SMC1602写CGRAM函数,用于自定义字符

{

uchar i,j

write_buf+=start_loca //指向"需写入数据数组"的起始位置

SMC1602_WriteByte(CommOperate,CGRAMAddr|start_addr<<3) //写CGRAM *** 作,并将CGRAM起始地址设为 start_addr

for(j=0j<word_numj++) //自定义字符数量

for(i=0i<8i++) SMC1602_WriteByte(DataOperate,*write_buf++) //写入一个自定义字符8个字节数据

}

void SMC1602_Init() //1602液晶屏初始化函数

{

uint i

SMC1602_WriteByte(CommOperate,DisplayMode) //显示模式设置:16×2显示,5×7点阵,8位数据接口

SMC1602_WriteByte(CommOperate,ScreenMode|ScreenOn) //光标模式设置:开启整体显示,开启光标显示,开启光标闪烁

SMC1602_WriteByte(CommOperate,InputMode) //输入方式设置:关闭整屏移动,开启光标正移动(+1)

SMC1602_WriteByte(CommOperate,CleanLCD) //清屏,复位光标

SMC1602_WriteByte(CommOperate,FirstCol) //定位第一行

for(i=150ii--) //等待电源稳定,否则写CGRAM数据(自定义字符)时容易丢失,uint执行周期长,用uchar将会缩短时间,不足以稳定LCD

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/10945803.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存