关于指针和1602液晶屏的知识讲解我们就不赘述了,《手把手教你学51单片机》文档第12,13章有很详细的讲解,我们也不用再自己搞些与众不同的驱动代码,没必要再“重新发明轮子”,只需直接移植使用宋老师为我们写好的代码就好。那么宋老师的液晶屏代码原理他也在文档详细讲解了,大家只需反复细读都会掌握的了的,这里笔者只对部分代码做出一些解释。打开宋老师的代码lesson12_4。
如果我们需要在液晶屏上显示下图的内容
那么在代码上需要一步步地操作来完成。
首先设置好液晶屏的使用指标,比如需要“16*2显示,5*7点阵”、“显示器开,光标关闭”、“文字不动,地址自动+1”,这些叫做液晶屏的初始化,表明液晶屏要正常显示内容就需要提前配置好这些工作。
比如我们要设置液晶屏“显示器开,光标关闭”的功能,需要给液晶屏写入命令的字节为0x0C。在写入之前要读出液晶屏的状态是否在忙,也就是“sta = LCD1602_DB;”读取整个P0端口的8个位的状态,而“while (sta & 0x80);”就是只要P0.7为高电平状态,证明液晶屏在忙,不能写入0x0C这个字节给液晶屏,等到P0.7被液晶屏输出低电平拉低引脚之后,证明液晶屏不忙了,可以允许写入命令字节了,“void LcdWaitReady()”函数分析完毕。
“void LcdWriteCmd(unsigned char cmd)”就是要写入命令的字节,前面的
LCD1602_RS = 0;
LCD1602_RW = 0;
是令液晶屏接收命令做准备,然后使”P0= cmd;”输出相关的高低电平,再让LCD1602_E 完成一个高脉冲,这样当“cmd=0x0C;”时,液晶屏就接收了这个命令,让显示功能为“显示器开,光标关闭”。
然后我们再说说,要显示的内容从哪个格子显示应该怎么去实现代码,如果要在第二行第一个格子显示一个字符,那么光标要设置在这个位置上,也就是写命令给液晶屏的字节为“0x80|0x40”,设置坐标的命令字节最高位要为1。在哪个位置显示就写入哪个地址。
最后就是“void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)”函数的讲解了。
设置地址在哪显示的函数已经讲过。我们看到“LcdWriteDat(*str++);”,这个函数的意思是把一个数组或者一个字符串里的字符数据写进上图的显示位置的地址里让相应的地方显示字符。
在初始化函数里“LcdWriteCmd(0x06);”的设置是令地址自动加1,假如在液晶屏第二行的第一个位置(也就是地址为0x40)不停写数据,那么写完一个数据之后,再写下一个数据,写进去的地址就是0x41的位置了,后面再写就是0x41的位置。
液晶屏的代码我们就简略讲完了,如果理解上还存在疑惑,我们也许掌握的理论知识还有所欠缺,这是需要慢慢消化的。
当然我们也可以不用去深究每一个细节,后面我们教会大家怎么去使用这些函数就可以了。
本文固定URL:https://www.dotcpp.com/course/388
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程