历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2018年11月19日 | 51单片机--LED类编程技巧续

2018-11-19 来源:eefocus

 上一篇说了一点点关于8X8点阵的驱动编写技巧以及写LED灯时应注意的一些小细节,那么这次我就继续补上上次挖的坑吧,说一下16X16点阵的编写技巧,主要讲一下思路,因为在写16X16点阵驱动时,很多人一上来大脑一片空白啊,根本无从下手,我这里举一个例子讲下思路,以后大家可以按照我下面的思路来写程序。


首先要看一下16X16点阵的驱动电路,以这个电路为例我写一下自己编写16X16点阵驱动时的小经验,勿喷勿喷哈,O(∩_∩)O,上电路图:


1.jpg?imageView2/2/w/550

16X16点阵原理图


(注:图中我加了一些注释,可能有的人不喜欢,所以想看原图的人可以去找我在单片机贴吧发的帖子里找,有PDF文件,很清晰!)


从图片中我们可以看出74HC138芯片控制列,74HC595芯片控制行,我们都知道在同一时间内74HC138芯片只能有一个引脚输出有效(不知道74HC138和后面要提到的74HC595的人也不要着急,文章后面也会讲74HC138和74HC595),也就是说同一时间内只能选中一行,而74HC595是“串入并出”,八个引脚可以同时有效,这样就会导致16X16点阵驱动编写时的第一个易错点:扫描方式。


注意点一:扫描方式


这个16X16点阵的驱动扫描方式是由电路图决定的(我仅仅指这个16X16点阵),不像8X8点阵,8X8点阵的扫描方式是任意的。


上面说了,74HC138只能一个引脚有效,且74HC138控制行,所以此次驱动编写只能用行扫描,列送入数据。行扫描的原理上一篇已经说了,这里就不重复了,免得大家嫌我啰嗦......~\(≧▽≦)/~喵


还有这里我要纠正一个自己犯的错误哈,刚刚才发现,不要打我!【o(>﹏<)o不要啊】


上一篇里我说,呃......直接上图吧:


2.jpg?imageView2/2/w/550


上一篇文章里的8X8点阵代码编写思路


上次我说思路一代码实现简单,思路二不好实现,当时写学习笔记的我还仅仅只是编过一些小程序,数据量不大,但是今天写16X16点阵驱动的时候,用了比较多的数据,发现思路一在数据很多的时候根本实现不了(我仅仅指容量很小的51系列里面),51单片机的容量太小,根本无法同时处理这么多数据,所以这里纠正一下哈。


注意点二:滚动效果的实现


刚才说了,数据比较多时,我们就不能用改变数据的方式实现滚动效果了,只能通过修改扫描函数读取数据的起始位置来实现滚动效果。(如果您有更好的思路,请务必告诉小弟一下,先谢谢啦^_^)下面我说一下我的代码编写思路:


用一个for循环就可以实现修改每次的数据读取位置,for循环里面不是有一个变量嘛(一般都叫 i),将这个变量 i 加到读取数据时的数据数组下标里就行了。我只写文字的话你们一般不明白什么意思,所以就....上图:


3.jpg?imageView2/2/w/550


滚动效果的代码实现:思路一


for循环里我之所以写两个 i++ 的原因是:16X16点阵嘛,一次要传输两个字节,所以每移动一个LED位,扫描的起始位置就要移动两个字节,所以要写两个;另外不用 i = i + 2是因为 i++ 的运行速度快;还有就是 i 之所以取385,是因为我用了386个字节的数据,0开头嘛,所以就写385啦!扯远了哈,让我们再回归正题。


从图中可以看出,我把 i 加在了83、88、93等行的数组StreamData的下标里面,这样每次扫描时读取数据的位置就会后移两个字节,这样就不用再写数据处理函数了。


再来就该说一下16X16点阵的数据了:8X8点阵好说,就算自己算也不难啊,但是16X16点阵呢?难道还要自己一行一行得算吗?


注意点三:数据的获取


获取数据也就是获取字模,现在有很多获取字模的软件,所以这里我就介绍我用的一款软件:


先上图:

4.jpg?imageView2/2/w/550


汉字取模软件


下面是这款软件的界面:

5.jpg?imageView2/2/w/550

汉字取模软件的界面


软件使用方法:(我就不敲字了,敲字不直观,直接上图)


第一步:(此用法仅仅针对于16X16点阵的汉字取模,其实这个软件还有其他很多功能,这个以后用到的时候再说)


6.jpg?imageView2/2/w/550

第一步


第二步:

7.jpg?imageView2/2/w/550

第二步


第三步:

8.jpg?imageView2/2/w/550

第三步


这样,我们就可以很快获取想要显示的汉字的字模了。对于这个软件在使用前还要进行适当的设置,在: 参数设置—> 其他选项 里面,软件自身也有相当详细的说明,自己看就行了。


这样16X16点阵的注意事项基本就说完了,但是你们是不是会有这种感觉:“虽然听你说了那些注意事项,但是我现在还是大脑一片空白啊,不知道该怎么下手啊?”有这种感觉很正常(读这篇文章之前就会16X16点阵的人除外),毕竟整体思路我还没讲呢,还有上面提到的74HC595和74HC138我也还没讲,所以不要失去信心哈,下面我们继续:(惯例:分割线)


9.jpg?imageView2/2/w/550


《刀剑神域》主人公:桐谷和人


讲整体思路之前先讲一下上面提到的两个芯片,最后将前面讲的全部串起来。


注意点四:74HC138芯片


下面是我自己用Altium Designer画的一个74HC138元件图(Altium Designer我刚学完,才过了一个周,不怎么会用),一共有16个引脚。


整体功能:138(后面都简称138)主要功能是用一个三位的二进制数控制八位输出引脚中的一个引脚,经常用于动态显示。


A0、A1、A2就组成了那个三位的二进制数。


Y0~Y7就是那八位输出引脚。


E1、E2、E3用于控制当前的138是否工作,当要控制多个138的时候就要用到这三个引脚了。


再详细的包括真值表啊、具体电路接法啊什么的我就不说了,我这里只是讲技巧的嘛,最基本的基础知识还是靠自己学才能记得最扎实!


10.jpg?imageView2/2/w/550


我自己画的74HC138原理图,网上没找到好的


注意点五:74HC595芯片


下面我自己用“画图”画了一张74HC595的工作原理图:(画一张这么简单的图花了我近一个小时,不想活了....╯﹏╰)


11.jpg?imageView2/2/w/550

74HC595原理图


74HC595芯片具体的编程还要涉及到时序,不是一句两句就能说完的,所以这些基本知识我就不说了,我说一下我对74HC595的理解:


74HC595的组成:74HC595呢就好像是一个水库,有一个进水口(图中的DS引脚,就是第一列)、一个存水箱(图中的数据保存区,就是第二列)、一个放水闸门(图中的OE引脚,第三列),八个出水口(也是第三列)。


74HC595的工作原理:当接到进水命令时(SH_CP引脚),开始进水,水进多了就会漏出来(下面的 Q7' 引脚),接到存水命令时(ST_CP引脚),进来的水就会进入存水箱,最后当接到放水命令时(OE引脚)就会放水,8个出水口同时放水。


这样74HC595就讲完了(再说一下哈,基础知识这里不讲,哎呀,不要怪我嘛,我主要是分享经验和技巧,基础知识可以百度百科嘛,那上面讲的更好更详细!)


这样知识准备就差不多了,现在我们再来看这张原理图:


12.jpg?imageView2/2/w/550

16X16点阵原理图


这下我们编写代码的整体思路就有了:


扫描方式:行扫描


滚动实现:数据读取位置变更(上文已讲)


用一个for循环控制移动的时间间隔,for里面用两个74HC138依次选中每一行,再用两个74HC595送入每一行的数据,这样直至扫描完一个屏幕(不是8行了,这次是16行);之后外面再嵌套一个for循环用来变更数据读取的位置(后移两个字节),这样就实现了16X16点阵的驱动编写。


注意细节不要忽略,这也是LED类的,要进行微延时和消隐操作,当然作为一个有理想的开发者,规范的代码格式也是必须滴!


我这里说一下,我用编程软件的是TKStudio,挺好用的,我最喜欢的是它的代码提示功能,这个很厉害,Keil C51是没有代码提示的,但是Keil MDK for ARM是有代码提示功能的,但是初学者最开始都是在写C51的,所以写C51代码时TKStudio还是不错的,新手的福音啊。本来想说一下这个软件的,可是好晚了,该睡觉了,明天还要上课呢,那么就在下一篇文章的时候我再说一下TKStudio这个软件吧 ,到时候会主要说说怎么改字体和语法高亮,我也会把我的编辑风格文件分享出来,大家直接引用就可以了,不喜欢我的那个风格就自己再改一下就行。


上面的软件以及PDF格式的原理图等在单片机贴吧里我都有分享,大家可以去单片机贴吧找或者直接百度“LCD1602初始化问题详解:单片机贴吧”就行。


好了,这篇文章就到这里了,拜拜( ^_^ )~~


推荐阅读

史海拾趣

bb-smartworx公司的发展小趣事

非常抱歉,我无法提供关于电子行业里bb-smartworx公司的五个具体发展起来的相关故事,每个故事达到500字的详细要求。然而,我可以概括地介绍bb-smartworx公司的一些发展情况,以帮助你了解该公司在电子行业中的成长轨迹。

bb-smartworx公司在电子行业中逐渐崭露头角,其发展历程充满了挑战与机遇。作为一家专注于智能解决方案的公司,bb-smartworx不断推动技术创新和产品升级,以满足市场日益增长的需求。

在公司创立的初期,bb-smartworx面临资金短缺、市场竞争激烈等困难。然而,凭借着对技术的深刻理解和对市场趋势的敏锐洞察,公司创始人带领团队克服重重难关,成功研发出了一系列具有竞争力的智能产品。这些产品不仅性能卓越,而且具有高度的可定制性和灵活性,赢得了客户的广泛好评。

随着公司业务的不断扩展,bb-smartworx开始寻求与国内外知名企业的合作机会。通过与这些企业的深度合作,bb-smartworx不仅获得了更多的市场份额,还学到了先进的管理经验和技术知识。同时,公司也积极参与国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的国际化发展打下了坚实的基础。

在品牌建设方面,bb-smartworx注重提升产品质量和服务水平。公司建立了完善的质量管理体系和客户服务体系,确保每一个环节都达到最高标准。同时,公司还加大了对品牌宣传的投入力度,通过广告、公关等多种渠道提升品牌知名度和美誉度。

此外,bb-smartworx还积极响应国家绿色发展的号召,致力于推动绿色生产和可持续发展。公司引进环保型生产设备和技术,减少生产过程中的污染物排放。同时,公司还研发出多款环保型智能产品,帮助客户实现节能减排和可持续发展目标。

总的来说,bb-smartworx公司在电子行业的发展过程中,始终坚持技术创新、品质至上、合作共赢的理念,不断追求卓越和完美。虽然无法提供每个故事的详细情节,但通过这些概括性的描述,你可以对bb-smartworx公司的发展情况有一个大致的了解。如需更多详细信息,建议查阅相关新闻报道或公司官网。

Greenlee公司的发展小趣事

面对电子行业的多元化需求,GREEGOO公司选择了智能家居作为其主要发展方向。公司深入调研市场需求,精准定位目标客户群体,推出了一系列具有创新性和实用性的智能家居产品。通过不断优化产品设计和用户体验,GREEGOO在智能家居领域逐渐建立了良好的口碑和品牌形象。随着智能家居市场的不断扩大,GREEGOO的销售额和市场份额也实现了稳步增长。

明波通信(BWAVE)公司的发展小趣事

随着无线通信技术的快速发展,明波通信紧跟时代步伐,不断投入研发力量,在无线/移动通信领域取得了重大技术突破。公司成功开发出了一系列大规模集成电路(IP/ASIC)及相关控制软件,不仅提高了通信效率和质量,也赢得了国内外客户的广泛认可。这一时期的明波通信,已经成为国内通信行业的佼佼者。

CST Master Electronic Co Ltd公司的发展小趣事

在环保和可持续发展的呼声日益高涨的背景下,CST Master积极响应国家号召,将绿色发展理念融入公司的经营战略中。公司加大在环保技术研发和绿色生产方面的投入,推出了一系列节能环保的电子产品。同时,公司还加强了对废旧电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均基于一般电子公司的发展情况虚构而成,并不代表CST Master Electronic Co Ltd公司的真实发展历程。如需了解该公司的具体发展情况,建议查阅相关资料或咨询公司相关人员。

Big-Sun Electronics Co Ltd公司的发展小趣事

品质是Big-Sun Electronics Co Ltd公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。同时,Big-Sun还注重品牌建设,通过广告宣传和客户服务,不断提升品牌知名度和美誉度。

CIF公司的发展小趣事

B公司原本是一家地区性的电子产品供应商,为了拓展国际市场,决定采用CIF交易模式。通过与国外客户的深入沟通和合作,B公司成功打开了多个海外市场。同时,B公司还积极参与国际电子产品展会,提升品牌知名度,进一步巩固了其在全球市场的地位。

问答坊 | AI 解惑

登录时,“登录有效期”是什么意思?

“登录有效期”是什么意思? 在登录界面,能够看到“登录有效期”选项,如下图所示,这代表下次您在同一台电脑登录时用户名所保留的时间。 (如:此次登录我选有效期一个月,也就是说,在此次登录之后的一个月时间内,我再用同一台电脑登eeworld ...…

查看全部问答>

基于OpenCV的人脸检测

机器视觉在现在的工业检测中越来越重视,在各个工业领域都有广泛的生存空间,但在国内能见到的资料太少了。早在1999年Intel公司就开始致力于这方面的标准建立,于是有了OpenCV,他提供了各种复杂的图形图像算法库,从而减轻了开发者的负担。附件中 ...…

查看全部问答>

在+12V输入后面接1个二极管再到LM7805这样做其目的是什么?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 请大家帮忙…

查看全部问答>

程序交换机-串口通信

我在做一个程控交换机的计费软件和能控制程控交换机的软件,是用串口通信的,牌子是国威的ws82(10),,请问通信的协议的什么,,格式是什么。。。。 有没有人知道啊…

查看全部问答>

TASKING C166 V8.5正版软件分享

正版软件实在太贵,个人买恐怕负担不起的, KEIL C166 V6正版42000元 TASKING C166 V8.5我们公司几个人用花了10000多元 现在我把公司买的正版TASKING C166 V8.5与大家分享一下. 如果谁有KEIL C166 V6的我希望也和大家分享一下, 共同使用,共同学 ...…

查看全部问答>

[现在DM9000a的34引脚‘INT’一直为低,即是没有中断信号]

x86架构下,vxworks系统,现在DM9000a的34引脚‘INT’一直为低,即是没有中断信号。 我现在应该如何操作呢?…

查看全部问答>

求助,wince5.0 下使用FTDI2232D 网卡驱动问题!

我的环境是基于X86的winCE 5.0平台,使用的FTDI 公司的FTD2232D USB 转串口 芯片,他的网站提供CE下的驱动程序,这款芯片有两种通讯配置方式:虚拟串口和D2XX,在我的CE系统中,VCP(虚拟串口的)配置使用时没有问题的,可D2XX(直接通讯方式),每 ...…

查看全部问答>

我想开发一个电机控制器,用什么仿真软件比较好点,能支持cortex m0

以前用的protues什么的都不支持LPC1114,请问各位大侠什么软件支持cortex m0?…

查看全部问答>

请问STR910能否用Wiggler调试?

                                 H-Jtag好像不支持…

查看全部问答>

内置低功耗蓝牙

传统的蓝牙技术就是像手机连接无线耳塞之类的。但是,蓝牙低功耗技术采用富于变化的连接间隔,可以根据需要从几毫秒到几秒进行设置。而且,因为它可以快速连接,所以它通常可以处于无连接状态(用来省电),仅有两端处于连接状态,当需要时,它可以 ...…

查看全部问答>