上一篇说了一点点关于8X8点阵的驱动编写技巧以及写LED灯时应注意的一些小细节,那么这次我就继续补上上次挖的坑吧,说一下16X16点阵的编写技巧,主要讲一下思路,因为在写16X16点阵驱动时,很多人一上来大脑一片空白啊,根本无从下手,我这里举一个例子讲下思路,以后大家可以按照我下面的思路来写程序。
首先要看一下16X16点阵的驱动电路,以这个电路为例我写一下自己编写16X16点阵驱动时的小经验,勿喷勿喷哈,O(∩_∩)O,上电路图:
16X16点阵原理图
(注:图中我加了一些注释,可能有的人不喜欢,所以想看原图的人可以去找我在单片机贴吧发的帖子里找,有PDF文件,很清晰!)
从图片中我们可以看出74HC138芯片控制列,74HC595芯片控制行,我们都知道在同一时间内74HC138芯片只能有一个引脚输出有效(不知道74HC138和后面要提到的74HC595的人也不要着急,文章后面也会讲74HC138和74HC595),也就是说同一时间内只能选中一行,而74HC595是“串入并出”,八个引脚可以同时有效,这样就会导致16X16点阵驱动编写时的第一个易错点:扫描方式。
注意点一:扫描方式
这个16X16点阵的驱动扫描方式是由电路图决定的(我仅仅指这个16X16点阵),不像8X8点阵,8X8点阵的扫描方式是任意的。
上面说了,74HC138只能一个引脚有效,且74HC138控制行,所以此次驱动编写只能用行扫描,列送入数据。行扫描的原理上一篇已经说了,这里就不重复了,免得大家嫌我啰嗦......~\(≧▽≦)/~喵
还有这里我要纠正一个自己犯的错误哈,刚刚才发现,不要打我!【o(>﹏<)o不要啊】
上一篇里我说,呃......直接上图吧:
上一篇文章里的8X8点阵代码编写思路
上次我说思路一代码实现简单,思路二不好实现,当时写学习笔记的我还仅仅只是编过一些小程序,数据量不大,但是今天写16X16点阵驱动的时候,用了比较多的数据,发现思路一在数据很多的时候根本实现不了(我仅仅指容量很小的51系列里面),51单片机的容量太小,根本无法同时处理这么多数据,所以这里纠正一下哈。
注意点二:滚动效果的实现
刚才说了,数据比较多时,我们就不能用改变数据的方式实现滚动效果了,只能通过修改扫描函数读取数据的起始位置来实现滚动效果。(如果您有更好的思路,请务必告诉小弟一下,先谢谢啦^_^)下面我说一下我的代码编写思路:
用一个for循环就可以实现修改每次的数据读取位置,for循环里面不是有一个变量嘛(一般都叫 i),将这个变量 i 加到读取数据时的数据数组下标里就行了。我只写文字的话你们一般不明白什么意思,所以就....上图:
滚动效果的代码实现:思路一
for循环里我之所以写两个 i++ 的原因是:16X16点阵嘛,一次要传输两个字节,所以每移动一个LED位,扫描的起始位置就要移动两个字节,所以要写两个;另外不用 i = i + 2是因为 i++ 的运行速度快;还有就是 i 之所以取385,是因为我用了386个字节的数据,0开头嘛,所以就写385啦!扯远了哈,让我们再回归正题。
从图中可以看出,我把 i 加在了83、88、93等行的数组StreamData的下标里面,这样每次扫描时读取数据的位置就会后移两个字节,这样就不用再写数据处理函数了。
再来就该说一下16X16点阵的数据了:8X8点阵好说,就算自己算也不难啊,但是16X16点阵呢?难道还要自己一行一行得算吗?
注意点三:数据的获取
获取数据也就是获取字模,现在有很多获取字模的软件,所以这里我就介绍我用的一款软件:
先上图:
汉字取模软件
下面是这款软件的界面:
汉字取模软件的界面
软件使用方法:(我就不敲字了,敲字不直观,直接上图)
第一步:(此用法仅仅针对于16X16点阵的汉字取模,其实这个软件还有其他很多功能,这个以后用到的时候再说)
第一步
第二步:
第二步
第三步:
第三步
这样,我们就可以很快获取想要显示的汉字的字模了。对于这个软件在使用前还要进行适当的设置,在: 参数设置—> 其他选项 里面,软件自身也有相当详细的说明,自己看就行了。
这样16X16点阵的注意事项基本就说完了,但是你们是不是会有这种感觉:“虽然听你说了那些注意事项,但是我现在还是大脑一片空白啊,不知道该怎么下手啊?”有这种感觉很正常(读这篇文章之前就会16X16点阵的人除外),毕竟整体思路我还没讲呢,还有上面提到的74HC595和74HC138我也还没讲,所以不要失去信心哈,下面我们继续:(惯例:分割线)
《刀剑神域》主人公:桐谷和人
讲整体思路之前先讲一下上面提到的两个芯片,最后将前面讲的全部串起来。
注意点四:74HC138芯片
下面是我自己用Altium Designer画的一个74HC138元件图(Altium Designer我刚学完,才过了一个周,不怎么会用),一共有16个引脚。
整体功能:138(后面都简称138)主要功能是用一个三位的二进制数控制八位输出引脚中的一个引脚,经常用于动态显示。
A0、A1、A2就组成了那个三位的二进制数。
Y0~Y7就是那八位输出引脚。
E1、E2、E3用于控制当前的138是否工作,当要控制多个138的时候就要用到这三个引脚了。
再详细的包括真值表啊、具体电路接法啊什么的我就不说了,我这里只是讲技巧的嘛,最基本的基础知识还是靠自己学才能记得最扎实!
我自己画的74HC138原理图,网上没找到好的
注意点五:74HC595芯片
下面我自己用“画图”画了一张74HC595的工作原理图:(画一张这么简单的图花了我近一个小时,不想活了....╯﹏╰)
74HC595原理图
74HC595芯片具体的编程还要涉及到时序,不是一句两句就能说完的,所以这些基本知识我就不说了,我说一下我对74HC595的理解:
74HC595的组成:74HC595呢就好像是一个水库,有一个进水口(图中的DS引脚,就是第一列)、一个存水箱(图中的数据保存区,就是第二列)、一个放水闸门(图中的OE引脚,第三列),八个出水口(也是第三列)。
74HC595的工作原理:当接到进水命令时(SH_CP引脚),开始进水,水进多了就会漏出来(下面的 Q7' 引脚),接到存水命令时(ST_CP引脚),进来的水就会进入存水箱,最后当接到放水命令时(OE引脚)就会放水,8个出水口同时放水。
这样74HC595就讲完了(再说一下哈,基础知识这里不讲,哎呀,不要怪我嘛,我主要是分享经验和技巧,基础知识可以百度百科嘛,那上面讲的更好更详细!)
这样知识准备就差不多了,现在我们再来看这张原理图:
16X16点阵原理图
这下我们编写代码的整体思路就有了:
扫描方式:行扫描
滚动实现:数据读取位置变更(上文已讲)
用一个for循环控制移动的时间间隔,for里面用两个74HC138依次选中每一行,再用两个74HC595送入每一行的数据,这样直至扫描完一个屏幕(不是8行了,这次是16行);之后外面再嵌套一个for循环用来变更数据读取的位置(后移两个字节),这样就实现了16X16点阵的驱动编写。
注意细节不要忽略,这也是LED类的,要进行微延时和消隐操作,当然作为一个有理想的开发者,规范的代码格式也是必须滴!
我这里说一下,我用编程软件的是TKStudio,挺好用的,我最喜欢的是它的代码提示功能,这个很厉害,Keil C51是没有代码提示的,但是Keil MDK for ARM是有代码提示功能的,但是初学者最开始都是在写C51的,所以写C51代码时TKStudio还是不错的,新手的福音啊。本来想说一下这个软件的,可是好晚了,该睡觉了,明天还要上课呢,那么就在下一篇文章的时候我再说一下TKStudio这个软件吧 ,到时候会主要说说怎么改字体和语法高亮,我也会把我的编辑风格文件分享出来,大家直接引用就可以了,不喜欢我的那个风格就自己再改一下就行。
上面的软件以及PDF格式的原理图等在单片机贴吧里我都有分享,大家可以去单片机贴吧找或者直接百度“LCD1602初始化问题详解:单片机贴吧”就行。
好了,这篇文章就到这里了,拜拜( ^_^ )~~
上一篇:单片机执行程序的过程,加深对51单片机指令的理解
下一篇:51单片机--LED类编程技巧
推荐阅读
史海拾趣
作为一家有社会责任感的企业,Capar Components Corp积极参与公益事业,回馈社会。公司定期组织员工参与社区服务活动,帮助困难群体解决实际问题。此外,公司还设立了奖学金和助学金,支持教育事业的发展。这些举措不仅彰显了公司的社会责任感,也为公司树立了良好的企业形象。
这些故事是基于一个虚构的电子行业公司背景编写的,您可以根据Capar Components Corp的实际情况进行调整和修改,以使其更符合该公司的历史和发展轨迹。请注意,由于我无法获取Capar Components Corp的具体信息,这些故事仅为示例性质,并非真实事件。
随着电子行业的快速发展,Capar Components Corp意识到只有不断创新才能在市场中立足。于是,公司加大了对研发的投入,引进了一批高素质的技术人才。经过数年的努力,公司成功研发出了一种新型的高性能集成电路,这一创新不仅提升了产品的性能,还降低了生产成本,使公司在市场上获得了更大的竞争优势。
随着公司实力的不断增强,C-MAC Automotive公司开始实施全球化战略。公司先后在欧美和亚洲等地设立研发中心和生产基地,以便更好地满足当地市场需求。通过全球化布局,C-MAC不仅拓宽了市场渠道,还降低了生产成本,提升了整体竞争力。此外,公司还积极参与国际技术交流和合作,不断提升自身的技术水平和创新能力。
随着公司实力的不断增强,C-MAC Automotive公司开始实施全球化战略。公司先后在欧美和亚洲等地设立研发中心和生产基地,以便更好地满足当地市场需求。通过全球化布局,C-MAC不仅拓宽了市场渠道,还降低了生产成本,提升了整体竞争力。此外,公司还积极参与国际技术交流和合作,不断提升自身的技术水平和创新能力。
随着技术的不断成熟和市场的不断扩大,Abbatron公司开始将目光投向国际市场。公司积极参与国际电子展会,与海外企业建立联系,逐渐打开了国际市场的大门。通过不断的市场拓展和国际化战略,Abbatron公司的品牌影响力逐渐提升,成为了国际电子市场上的一股重要力量。
ATS始终坚持以创新为驱动力,不断提升研发创新能力。公司设立了专门的研发团队,负责新技术和新产品的研发工作。通过与高校和研究机构的合作,ATS不断引入前沿的科技成果和人才资源,为公司的创新发展提供了有力支持。此外,ATS还建立了完善的研发流程和质量控制体系,确保每一款产品都能达到最高的性能和质量标准。
摘要:介绍基于LPC2104型CPU的汽车行驶记录仪。该记录仪采用大容量闪速存储器作为存储载体,利用定时器中断方式来实现秒间隔的数据采集与存储,用利串行口中断方式实现与微机的数据通信。 关键词:汽车行驶记录仪;LPC2104;闪 ...… 查看全部问答∨ |
在对MAX2140 SDARS接收器进行热插拔操作(接通电源或断开电源)时,可能使其内部静电放电(ESD)保护二极管失效,热插拔不是该器件的标准操作。但这种情况会发生在很多应用中,尤其是在汽车工业中,经常会进行热插拔的操作。本文分析了热插拔操作可能造 ...… 查看全部问答∨ |
一个单片机串口通信问答 问题: 我现在正搞双机通信,不过遇到一个问题,问题是这样的: 这样就可以 while(TI==0); TI=0; …… …… 这样就不行,我用以下方法不能检测到TI=1,为何呀? for(i=0;(i<10)&&(TI==0);i++); TI=0; if( ...… 查看全部问答∨ |
本人没学过avr单片机,却选了《基于TCP/IP协议的力传感器弹性体疲劳测试远程监测》这个毕业设计来做。现在一头雾水。是否有童鞋有这方面相近的资料和论文。万分感激… 查看全部问答∨ |
我想在WinCE下通过DeviceIOControl来改变LCD背光电源的状态以实现背光灯的亮灭控制。 bResult = DeviceIoControl(hDevice, // device to be queried ...… 查看全部问答∨ |
ffmpeg已变成多媒体处理领域最有影响力的开源组件,接近50万行源代码的工程对ARM模拟器来说是个巨大的挑战,但多年的稳定性给了我很大信心。整个过程比较顺利,前后大约花2个半小时,包括在ARM开发板上验证。ffmpeg0.6的移植成 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 勇闯泰克绝密黑科技实验室!
- TI圣诞狂欢:上千套CC3200开发套件免费申请(仅限在校大学生)
- 有奖直播|堵车路上听什么?新世代车载音频系统及软件定义汽车
- 2022 Digi-Key KOL 视频系列:你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍
- 提交创意【免费赢取600元DIY物料】,参赛冲击万元大奖!2022得捷创新设计大赛火热报名中
- 6月6日 Microchip 直播|利用单片机设计安全关键型应用时应采取的最佳实践方法
- 2020年全球工程师调查
- 【西门逛中发】之初识中发
- 【XILINX 主题分享月】 设计工具资料大搜集!!!
- 有奖直播 | 迈来芯为您详解:半导体研发功能安全的实现与技术支持