您现在的位置是:首页 > 生活消费网站首页生活消费
lcd1602显示程序包括初始化和数据显示
- 生活消费
- 2022-09-20 20:10:23
- 来源:
大家好,小必来为大家解答以上的问题。lcd1602显示程序包括初始化和数据显示这个很多人还不知道,现在让我们一起来看看吧!
1、①问,RS,RW,E 的设置为 读状态时序 的过程,读出来的数据(数据口P1) 的最高位 刚好即为 液晶的 忙碌 标志位。
2、②问,writecontrol(unsigned condata) 函数 是个 写指令 函数;③问,空操作 是为了让数据稳定后,才使能 液晶接收数据;④问,写指令有时间 间隔要求,太频繁的读写会丢码,所以要加延时,三条38指令,是因为安全起见,上电后马上初始化会出现液晶电源不稳而丢码;⑤问,液晶显示 只在 更新数据 的时候刷新一次即可,液晶会维持内容,无需重复刷新。
3、⑥附送,③和④问,都是驱动太恶心而造成的结果,好的驱动程序不需如此操作。
4、液晶的时序要求为ns级,单片机的指令周期普遍为us级,根本不需过多累赘。
5、#include"reg52.h"//包含52头文件#include"SMC1602A.h"//包含SMC1602A宏定义文件#define BusyReadCount10//读忙标志等待次数#define SMC1602_DataP0//定义 数据接口//sbit SMC1602_VO=P2^4;//定义 VO对比度接口sbit SMC1602_RW=P2^5;//定义 R/W接口25sbit SMC1602_RS=P2^6;//定义 RS接口26sbit SMC1602_E=P2^7;//定义 E接口27#define SMC1602_EnSMC1602_E=1//使能#define SMC1602_DisSMC1602_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(;i;i--);//延时操作,为写操作预留回复时间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_addrfor(j=0;j 本文到此分享完毕,希望对大家有所帮助。