历史上的今天
今天是:2024年08月26日(星期一)
2021年08月26日 | 51单片机-液晶屏代码讲解
2021-08-26 来源:eefocus
关于指针和1602液晶屏的知识讲解我们就不赘述了,《手把手教你学51单片机》文档第12,13章有很详细的讲解,我们也不用再自己搞些与众不同的驱动代码,没必要再“重新发明轮子”,只需直接移植使用宋老师为我们写好的代码就好。那么宋老师的液晶屏代码原理他也在文档详细讲解了,大家只需反复细读都会掌握的了的,这里笔者只对部分代码做出一些解释。打开宋老师的代码lesson12_4。
1.显示字符的执行操作
如果我们需要在液晶屏上显示下图的内容

那么在代码上需要一步步地操作来完成。
首先设置好液晶屏的使用指标,比如需要“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的位置。
液晶屏的代码我们就简略讲完了,如果理解上还存在疑惑,我们也许掌握的理论知识还有所欠缺,这是需要慢慢消化的。
当然我们也可以不用去深究每一个细节,后面我们教会大家怎么去使用这些函数就可以了。
下一篇:51单片机-指向数组的指针
史海拾趣
|
第1讲:电容的特性(隔直通交) 电容器是一种能储存电荷的容器.它是由两片靠得较近的金属片,中间再隔以绝缘物质而组成的.按绝缘材料不同,可制成各种各样的电容器.如:云母.瓷介.纸介,电解电容器等.在构造上,又分 ...… 查看全部问答> |
|
在实际工程中,选用何种传输方式需要结合工程的具体情况和工程预算来综合考虑。对于传输距离超过2Km的监控网络,应该考虑选用光纤和光端机。如果传输距离达到数公里或者几十公里,就只有使用光纤了。另外,在一些干扰很强的场合,比如受到工业干扰 ...… 查看全部问答> |
|
CE printf不能用咋办啊??CE 提示建议使用StringCchVPrintfA函数?? 最近移植个库,库以前是在PC上编译的,都是用多字节的printf,在CE下报错, 情况如下: error C2065: \'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA\' : undeclared identifier 然后我就按它的提示使用StringCchPrintfA; 定义了 ...… 查看全部问答> |
|
按开机电源启动不了,要再按重启或者再按几次电源键才能启动 机子去年十一配的,原来也有类似问题,后来换了一个电源就没这种情况了,现在又出现这种情况,难道又是电源问题?哪位达人帮解决一下~… 查看全部问答> |
|
这个问题非常基础但是有几个地方不是很明白: 在画原理图时,大部分需要自己画芯片,一些主要的芯片,库里面总是没有 在画芯片时,关于芯片引脚习惯上都是定义成什么? 我看芯片引脚有:3 state、Bidirectional 、 Input 、Open Collector &nbs ...… 查看全部问答> |
|
在FPGA中遇到的一个奇怪的问题!我在Stratix II GX 中要实现这样一个功能:用20M时钟采集120路数据,然后将这些数据组成每字节10bit,每11字节一帧的数据,其中包括一个帧头。这帧数据每字节速率是260M(因为加了10位的帧头),通过一个GXB将这帧数据 ...… 查看全部问答> |
|
如果我给串口调试助手发送一个字符串“zhangkai”,如果勾上16进制显示,是不是就是串口调试助手把字符串转换为7A 68 61 6E 67 6B 61 69这个了? 在串口调试助手给单片机发数据时,如果选上16进制发送和不选16进制发送有啥区别?发送区填 ...… 查看全部问答> |
|
一般是刚开始入门会遇到的问题: 1、 接上仿真器,发现不能下载,这个问题想必大家都有遇到过,IAR提示找不到目标? 可能的原因:A、 并口驱动能力不足,在电脑的BIOS界面下设置成ECP或者ECP+EPP模式B、 JTAG线太长,一般超过20CM不推荐,而且这个线最好不 ...… 查看全部问答> |




