历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2021年03月02日 | 51单片机对LCD1602液晶的驱动设计

2021-03-02 来源:eefocus

51单片机——LCD1602


1、1602液晶读写时序


(1)、读状态


RS=L,R/W=H,E=H。(判断忙完毕后释放总线)


(2)、读数据


RS=H,R/W=H,E=H。


(3)、写指令


RS=L,R/W=L,D0~D7=指令码,E=高脉冲


(4)、写数据


RS=H,R/W=L,D0~D7=数据,E=高脉冲



2、液晶显示驱动文件


#include


#define LCD1602_DB P0


sbit LCD1602_RS = P1 ^ 0;


sbit LCD1602_RW = P1 ^ 1;


sbit LCD1602_E = P1 ^ 5;


/* 等待液晶准备好 */


void LcdWaitReady()


{


unsigned char sta;


LCD1602_DB = 0xFF;


LCD1602_RS = 0;


LCD1602_RW = 1;


do


{


LCD1602_E = 1;


sta = LCD1602_DB; //读取状态字


LCD1602_E = 0;


}


while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止


}


/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */


void LcdWriteCmd(unsigned char cmd)


{


LcdWaitReady();


LCD1602_RS = 0;


LCD1602_RW = 0;


LCD1602_DB = cmd;


LCD1602_E = 1;


LCD1602_E = 0;


}


/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */


void LcdWriteDat(unsigned char dat)


{


LcdWaitReady();


LCD1602_RS = 1;


LCD1602_RW = 0;


LCD1602_DB = dat;


LCD1602_E = 1;


LCD1602_E = 0;


}


/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */


void LcdSetCursor(unsigned char x, unsigned char y)


{


unsigned char addr;


if(y == 0) //由输入的屏幕坐标计算显示RAM的地址


{


addr = 0x00 + x; //第一行字符地址从0x00起始


}


else


{


addr = 0x40 + x; //第二行字符地址从0x40起始


}


LcdWriteCmd(addr | 0x80); //设置RAM地址


}


/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */


void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)


{


LcdSetCursor(x, y); //设置起始地址


while (*str != ‘’) //连续写入字符串数据,直到检测到结束符


{


LcdWriteDat(*str++);


}


}


/* 初始化1602液晶 */


void InitLcd1602()


{


LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口


LcdWriteCmd(0x0C); //显示器开,光标关闭


LcdWriteCmd(0x06); //文字不动,地址自动+1


LcdWriteCmd(0x01); //清屏


}


推荐阅读

史海拾趣

All Sensors公司的发展小趣事

近年来,All Sensors通过与深圳电通纬创微电子股份有限公司的合作,成立了中美合资企业——深圳华美澳通传感器有限公司。这一合资企业的成立,不仅加强了All Sensors在中国市场的地位,也为其在全球范围内的业务拓展提供了有力支持。华美澳通公司利用All Sensors的专利技术,专业从事MEMS压力传感器及应用模组的研发、生产及销售,为电子行业提供了更多优质的产品和服务。

AEMC Instruments公司的发展小趣事

AEMC Instruments公司成立于1976年,隶属于Chauvin Arnoux集团。这个新成立的公司在电子行业中崭露头角,凭借其在电气测试和测量领域的专业知识和技术,迅速获得了市场的认可。初创时期,AEMC Instruments公司以研发和生产电流测量探头、电能质量分析仪等核心产品为主,这些产品凭借其准确性和稳定性,为公司的快速发展奠定了坚实的基础。

Chip Supply Micro Devices公司的发展小趣事

为了进一步扩大市场份额,Chip Supply Micro Devices制定了国际化战略。公司积极开拓海外市场,通过参加国际电子展会、建立海外销售网络等方式,将产品推向全球。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品解决方案。这些努力使得Chip Supply Micro Devices在国际市场上获得了良好的口碑和业绩。

Diodes公司的发展小趣事

Diodes公司积极实施全球化战略,不断拓展海外市场。公司在以色列、加利福尼亚、得克萨斯和日本等地设立了制造工厂,形成了覆盖全球的生产和销售网络。这些工厂不仅为Diodes提供了充足的产能支持,也为公司赢得了更多国际客户的青睐。同时,Diodes还积极参加国际展会和交流活动,加强与国际同行的合作与交流,不断提升公司的国际化水平。

FerriShield公司的发展小趣事

随着技术的成熟和市场的认可,FerriShield开始拓展产品线。公司研发团队不断改进和优化原始的铁磁屏蔽材料,并推出了针对不同应用场景的系列产品。例如,针对智能手机和平板电脑的轻薄型电磁屏蔽膜,以及针对大型数据中心的高效电磁屏蔽板。这些新产品的推出,使得FerriShield的市场份额逐步扩大。

Brilliance公司的发展小趣事

在快速发展的同时,Brilliance公司始终关注社会责任和可持续发展。公司积极参与公益事业,为社会做出贡献。同时,公司还注重环保和节能减排,努力降低生产过程中的环境影响。这种积极履行社会责任的态度也赢得了社会各界的广泛认可。

通过以上五个故事,我们可以看到Brilliance公司在电子行业发展中的艰辛与辉煌。凭借技术创新、市场拓展、产业链整合以及社会责任等方面的努力,Brilliance成功地在电子行业中树立了自己的品牌形象,并为未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

HT48CAx/HT48RAx 软件应用要点

HT48CAx/HT48RAx  软件应用要点…

查看全部问答>

诺基亚5110LCD 驱动 字体放大

5110LCD邮购回来了,经过一个晚上的研究算是可以点亮了,但是我用的16f84a,程序存储器不是非常大,但是我想显示大一些的字符,没办法只好自己研究了,经过好几个夜晚的调试修改终于可以正常显示了,今天过来显摆下。呵呵! 大家注意第一行的三个 ...…

查看全部问答>

嵌入式技术

安徽省信息产业厅唯一指定的嵌入式实训基地坐落在合肥,其培训的课程体系主要是 ARM+Linux课程体系 嵌入式系统的基本概念及软硬件开发过程 ARM体系结构及指令 嵌入式集成开发工具ADS的集成开发 LPC2000系列原理及基于LPC2000系列的系统构成 ...…

查看全部问答>

请各位大哥帮忙看一下build编译驱动的问题

近日才学驱动 在build环境下编译驱动一直不成功,请大家帮忙看一下 C:\\WINDDK\\2600>build -0 BUILD: Object root set to: ==> objchk BUILD: Adding /Y to COPYCMD so xcopy ops won\'t hang. BUILD: /i switch ignored BUILD: Compile a ...…

查看全部问答>

请问ic卡于银行间通信的问题。

现在手上有个单子,是要将煤气购买ic卡能够通过银行atm来购买的,不知道这个需要从哪里入手?具体过程是怎样的?难不难啊?…

查看全部问答>

IAR 限制问题

现在用IAR运行自带程序的时候提示程序超过32K,无法装载。论坛的高手有没有谁可以发个破解的方法给我呀,限制得很是郁闷....…

查看全部问答>

ab 1769 L32e CPU 通讯问题?

用RSLINX 连接ab 1769 L32e CPU 通讯不上,用工业以太网, 拼地址拼不通,无网络连接,计算机加网线上网正常,连接其他ab通讯模块正常,rslinx显示不识别硬件,cpu还挂着ab panel view plus 1000 连接正常 麻烦各位给分析分析什么原因。…

查看全部问答>

电路分析

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 当拿到一个电路,我们应该从哪里开始分析,应当注意哪些特征?期待您的好的方法和思路或感悟。  …

查看全部问答>

Lm8962,UDP同时接收、发送数据,UDP接收会丢包,请问下各位大侠是什么原因?

我创建了一个UDP socket,来实现对数据的收发。   我用PC机周期性地通过UDP给lm3s8962发数据,lm3s8962处理完后,再通过UDP发送给PC机。 无论PC机的周期设为多大,发现lm3s8962只能收到一半pc机发送的数据。   假如我分别创建两个U ...…

查看全部问答>

做的流水灯程序,要求从右到做两次就停下来,可是不行?

#include #include #define uint unsigned int #define uchar unsigned char uchar temp,b; void delay(uint z); void main() {              temp=0xfe;       &nbs ...…

查看全部问答>