十三、LCD1602液晶屏驱动
本次实验实现了通过RL78/G13的P1口作为数据Data的输入输出端口--共八位,分别与LCD1602的DB0--DB7相连,即P1n---DBn ;P7.0、P7.1、P7.2分别用于LCD1602的三个控制线RS、R/W、E,即P7.0--RS,P7.1--R/W,P7.2--E相连接。
这其中还用到了一个4ms的延时程序,这是因为,用RL78/G13不是直接控制的液晶点,而是通过控制LCD1602上的芯片来控制液晶屏的,这就涉及到芯片间通信的问题,这当然就离不开时序了,这个延时程序就是用来维持每个信号的,使其能够持续一段时间,等待着LCD1602上的芯片处理完成。这里的延时程序不是采用的循环等待的方式,而是增加了一个Timer工具箱,在其中设定一个标志位,有其来判断延时的中止,从而达到定时的目的。
好了,别的不多说了,上图先:
先来个函数架构:
主函数:
初始化函数和LCD写命令函数:
LCD写数据和整合写字符函数:
中断延时函数:
Timer的中断函数:
再来张LCD1602功能分布图,科普一下,嘿嘿:
最后,上效果图了:
呵呵!效果看上去有点问题,是的,不是别的,是我的LCD1602的RAM地址有点错误,才显示成这样,原本要显示成: I LOVE EEPW ^_^ 的,可惜LCD不给力啊,不过仔细看看那个笑脸还是正确的啊,哈哈,歪好!歪好!高兴就好!
EEPW友们,还等什么,还不快快试试自己板子,做个更有创意的,期待着你们。。。
视频链接:
http://v.youku.com/v_show/id_XNDQyNjgxMzYw.html


虽已深夜,但毫无困意,不为别的,只为成功调试成功一个bug,大家还记得我在
十三、LCD1602液晶屏驱动
中提到LCD1602显示不正常的现象,我当时真以为是我的LCD坏了,因为当时我知道,我写的程序是正确的,由于准备做温度和A/D转换的实验,就需要一个显示数据的地方,可是我认为我的LCD是坏的,不能正常显示,所以我就打算先做一个8段LED数码管显示的程序,以备显示数据用,可谁曾想,在做8段LED数码管显示实验时,其也不能正常显示,同样出现乱码,起初我以为是我的大块开发板坏了,后来我就一个个引脚用万用表进行测试,并没有发现什么异常,最后,我才把注意力放到了RL78/G13的开发板上,用万用表一测发现P1.4和P1.5的管脚是连在一起的,难怪总出现乱码呢,因为我总是用P1口作为数据的输出端口。接着我就去翻查资料,最终找到了问题的答案:
大家请看下图:
看到上图中的NF2处的锡桥了,答案在下图:
看到了吗,NF2默认情况下是连接着的,而其连接的正是P1.4和P1.6管脚,这也就是我用P1口作为数据接口总出现乱码的真正原因。
解决方法:
1:将NF2锡桥断开(用小刀轻轻一划即可),这样P1.4和P1.6管脚就不在连接了
2:改用P2口(也是8个口)作为数据端口
在这里我不建议采用第一种方法,因为,这个锡桥NF2在以后的低功耗模式---STOP模式下还要用到,这里我采用的是第2种方法。
重新对程序做了一些简单的修改,结果正如我所料,LCD液晶屏正常显示了,显示的内容为:
I LOVE EEPW ^_^
andery88
Hello everyone
0123456789ABCDEF
Thank you
very much
心里别提有多欢喜了,赶紧上几张图,快乐与大家一起分享:
I LOVE EEPW ^_^
andery88
Hello everyone
0123456789ABCDEF
Thank you
very much
最后,来个视频链接,里面可是动态显示滴哦!
http://v.youku.com/v_show/id_XNDQyOTM3MzEy.html

正如我在45楼所说,解决了LCD1602乱码问题之后,要做的实验就是AD模数转换实验,实验的工作过程大致如下:
首先,RL78/G13开发板上的10K可变电阻的可调头与P2.2口相连(即ANI2),通过ANI2口进入内部的AD转换器进行模数转换,转换后的结构放在变量ADCR中,然后用十三节LCD1602液晶屏驱动的方法将ADCR的结构显示在LCD1602的液晶显示屏上。
这其中有几个关键的地方,用图来详细说明:
首先是本实验用到的工具箱:

关键的AD转换器的设置:


下面上具体函数了,由于LCD1602显示部分的函数大家可以参考十三、LCD1602液晶屏驱动
所以在这里这部分程序就不再赘述,直接上与AD有关的程序:
先来张主函数的程序图:

再来张AD转换结束后的中断函数图:

下面开始上图了哦:
刚开始时接入P2.2口的电阻为0:

通过调节10K可变电阻,接入P2.2口的电阻越来越大,LCD1602上显示的数值也随之增加:




最后,达到了最大值10k,LCD1602也大致同步显示为:10.025K。

最后,上视频哦:
http://v.youku.com/v_show/id_XNDQzNDExMDE2.html

本次实验是在十三、LCD1602液晶屏驱动的基础上进行的功能扩展而成的,其工作的基本流程为:
外部RTC晶振32.768kHz的XT1和XT2通过RL78/G13的P12.3和P12.4管脚输入至RTC内作为RTC的工作时钟fRTC,这需要对外部RTC时钟做专门的设置,而这在前期的多个实验中都未曾用到,因此,这个地方也是最容易出错的地方,特专门对此用图来详解:
下面来上图,首先这张图是时钟Clock Generate工具箱关于Clock Setting的设置:

接下来这张图片是用来验证,你所设置的时钟是否正确,如果不是这样,就说明fSUB时钟选错了,应选择XT1 oscillation(fXT)。

接下来要上主函数图了,这个很关键,不要忘了启动固定时间中断,不然的话无法实时更新时间数据,如图所示:

接着是LCD读取时间数据的程序,这里采用了自动生成软件里定义的时间格式数据结构,这样调用起来比较方便,如图所示:

最后,是关键的实时时间数据更新的中断驱动程序,这里是使用固定时间中断的产生来实时更新时间数据显示的,如图所示:

最后来上图喽:




最后,再来个动态显示的视频:
http://v.youku.com/v_show/id_XNDQ0MzUyMjg0.html

十六、基于IICA0的EEPROM读和写
我的帖子有几天没有更新了,不是在忙别的,而是在忙着给自己充电,最近几天一直在学习IIC协议、RL78/G13中关于IICA0的Datasheet部分、EEPROM的读写等,在充分了解了它们的工作原理之后,这才通过编写程序,将其在硬件上实现出来,下面将关键的地方分享出来,希望能给EEPW友们以帮助,在这里仅起到抛砖引玉的作用。。。
本次实验的主要内容是通过RL78/G13内部的16位单片机控制其内部的IICA0(完全版的IIC)模块来实现对外部8KByte(1024个字节)的EEPROM进行读写实验。
首先,必备的知识是IIC总线传输协议,下图列出其工作时序图,供大家参考:
下一张是IIC协议外部接口SCL和SDA两个管脚与EEPROM的相应管脚连接是要注意接上拉电阻,如下图所示:
下图为RL78/G13datasheet中关于IIC协议(结合IICA0硬件电路)的时序流程图:
将以上三张图片结合起来看就是一个完整的发送(接收)流程图:由Start Condition~address~data~data~Stop Condition。
详细内容还请参考RL78/G13的datasheet的P770~P775,这上面对每一个过程都有详细的讲解,关键的难理解的地方还有详细的注释,这是进行本次试验要必看的。。。
下面要说的就是关于外部存储器EEPROM的基于IIC的具体是如何工作的,我本次试验采用的EEPROM的类型是:ATMEL113--24C08AN,其内部存储容量为8KByte(1024个字节),其写时序如下图:
读时序如下图:
还有一个很关键的地方,那就是当EEPROM通过IIC总线接收到来自RL78/G13传来的数据后,并不能瞬间就将数据存到其内部ROM里的,而是需要一定的操作时间,下表就给出了最小写周期,这在程序的编写过程中会有具体的体现。。。
有了这些基础知识做铺垫,接下来我们就可以顺利地进行基于软件CubeSuite+的编程了,首先来看一看自动代码生成器是如何设置的,具体设置如下图所示:
这一张是说明采用IICA0的完全版IIC的单主模式,设置如下图所示:
接下来这张图是关于IICA0的详细配置,具体设置如下图:
至于其它的工具箱和前面的几个实验用到的都没有太大的区别,这里仅给出一个用到的工具箱图:
好了,至此关于IICA0的设置基本已经完成,接下来要做的就是在自动生成的代码上添加程序即可,一些关键的代码如下图所示:
首先,帖出来一下有自动代码生成器自动生成的关于发送和接收两个函数的函数名,之所以在这里将其贴出,是因为,函数很容易理解,而关键在于如何给这两个函数赋值一直是一个很容易出错的地方(特别对C语言的指针理解不到的EEPW友们)。。。
这两个函数的函数名如下:
这里我们着重看那两个固定值指针,想想如何定义这两个指针呢,这使我想到了数组,还记得当时老师讲过,数组的数组名是可以退化为指针的,其就指向数组的起始地址,因此可以先定义一个含有若干元素的一维数组,然后就将数组名赋值给声明的指针即可(因为有const的存在,所以赋值要在变量声明中完成),具体的变量声明见下图:
接下来列出需要再serial函数中需要更改的地方,就是在发送和接收结束的函数中分别增加一个标志变量,以用来在主函数中判断读写状态十分完成,具体更改如下图所示:
下面就来张关键的主函数中是如何实现对外部EEPROM的读和写的,具体程序如下图所示:
这张是向EEPROM写数据的写函数:
具体过程是这样的,首先通过一个do--while循环来确保将数据send出去,然后紧接着判断标准位来确保数据发送完毕,最后是将发送的数据及其存储地址显示在LCD1602的第一行,具体的显示效果见后续的附图。
这是读函数的过程,看上去比写函数的过程要来的复杂,实际上也确实如此,因为要想从EEPROM读数据,首先就要先向EEPROM写数据以便告知EEPROM准备要从哪个地址开始读数据,但大原理与写过程类似,这里就不赘述了。。。
最后来张本实验用到的工具箱图,因为其它工具箱的使用在前面已有详细的介绍,这里也就不赘述了。。。
最后要上图了,接下来的两张图是演示,先通过IIC总线向EEPROM的00地址单元写入数据111,并通过IIC总线将其读出显示在LCD1602上的过程。。。
接下来的两张图是演示,通过更改源程序中的数据通过IIC总线向EEPROM的地址025单元写入数据236,并通过IIC总线将其读出显示在LCD1602上的过程。。。
上视频链接喽。。。
http://v.youku.com/v_show/id_XNDQ3MjA4Mjg0.html
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |