历史上的今天

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

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

发布者:WhisperingWaves 来源: eefocus关键字:51单片机  LED  编程技巧 手机看文章 扫描二维码
随时随地手机看文章

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


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


1.jpg

16X16点阵原理图


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


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


注意点一:扫描方式


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


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


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


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


2.jpg


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


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


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


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


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


3.jpg


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


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


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


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


注意点三:数据的获取


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


先上图:

4.jpg


汉字取模软件


下面是这款软件的界面:

5.jpg

汉字取模软件的界面


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


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


6.jpg

第一步


第二步:

7.jpg

第二步


第三步:

8.jpg

第三步


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


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


9.jpg


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


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


注意点四:74HC138芯片


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


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


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


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


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


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


10.jpg


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


注意点五:74HC595芯片


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


11.jpg

74HC595原理图


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


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


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


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


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


12.jpg

16X16点阵原理图


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


扫描方式:行扫描


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


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


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


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


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


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


关键字:51单片机  LED  编程技巧 引用地址:51单片机--LED类编程技巧续

上一篇:单片机执行程序的过程,加深对51单片机指令的理解
下一篇:51单片机--LED类编程技巧

推荐阅读

中国的互联网和家电企业相继进入半导体业务领域。百度在推进人工智慧(AI)的半导体开发,珠海格力电器将自主开发空调用半导体。由于与美国的高科技摩擦,对于确保尖端设备不可或缺的半导体,中国企业的不安声出现升温。中国国家主席习近平提出「自力更生」方针,提倡减少对海外技术的依赖程度,中国企业将加速推进自主开发。 因无法采购到半导体,中兴直...
如今所有的工业制造商,无论规模大小,都在升级生产设施、制造能力和工程服务,向工业 4.0 概念或智能工业转型。 目前有许多技术可以促进这种转型,使工作环境变得更安全,网络安全性和覆盖率更高,提高能源利用率,这些是新工厂概念的热点趋势,将其变为现实需要巨大的投入,其中包括旧设备智能升级改造工程(例如,使用新的变频解决方案改造旧电机,最...
近日,山东晶导微电子5G应用新型元器件项目传来新进展。据曲阜头条消息显示,5G应用新型元器件项目新上200台套设备,目前已进入安装、调试阶段,标志着该项目正式按下投产运营“启动键”。据介绍,在晶导微电子5G应用新型元器件项目施工现场,施工人员正在对1100平方米的展示中心进行装修扫尾工作;1万级净化车间和10万级注塑净化车间装修、楼顶动力机房、...
  2021年11月17日,广东水电二局股份有限公司(以下简称“公司”)与广东省珠海市富山工业园管理委员会(以下简称“富山管委会”)签订《富山工业园源网荷储一体化综合能源管理项目投资框架协议》。富山管委会同意公司在富山工业园区内投资建设源网荷储一体化综合能源管理项目,具体建设内容为分布式光伏项目、储能项目、综合能源管理中心、智慧停车场...

史海拾趣

问答坊 | AI 解惑

基于LPC2104型CPU的汽车行使记录仪

摘要:介绍基于LPC2104型CPU的汽车行驶记录仪。该记录仪采用大容量闪速存储器作为存储载体,利用定时器中断方式来实现秒间隔的数据采集与存储,用利串行口中断方式实现与微机的数据通信。     关键词:汽车行驶记录仪;LPC2104;闪 ...…

查看全部问答∨

MAX2140内部ESD二极管的保护电路设计

在对MAX2140 SDARS接收器进行热插拔操作(接通电源或断开电源)时,可能使其内部静电放电(ESD)保护二极管失效,热插拔不是该器件的标准操作。但这种情况会发生在很多应用中,尤其是在汽车工业中,经常会进行热插拔的操作。本文分析了热插拔操作可能造 ...…

查看全部问答∨

用过PIC的请进

谁有PIC的学习群呀?说一下进去一起讨论一下吧…

查看全部问答∨

FPGA板的usb口与上位机的连接问题

FPGA板的usb口与上位机的连接问题:我买的FPGA开发板上,usb输出口是由引脚输出D+、D-信号直接到电脑的usb口上,可以吗?请指教…

查看全部问答∨

一个单片机串口通信问答

一个单片机串口通信问答 问题: 我现在正搞双机通信,不过遇到一个问题,问题是这样的: 这样就可以 while(TI==0); TI=0; …… …… 这样就不行,我用以下方法不能检测到TI=1,为何呀? for(i=0;(i<10)&&(TI==0);i++); TI=0; if( ...…

查看全部问答∨

求关于avr和tcp网络编程

本人没学过avr单片机,却选了《基于TCP/IP协议的力传感器弹性体疲劳测试远程监测》这个毕业设计来做。现在一头雾水。是否有童鞋有这方面相近的资料和论文。万分感激…

查看全部问答∨

急求电脑配置

要求能够安装VMWARE ESXI4.0软件; 使用起来不会出问题; 价格在4000左右; 急!!!!!!!!! 麻烦各位大侠提供一个详细的参考,辛苦了!…

查看全部问答∨

高价求购 Tornado V 2.2.1的序列号

高价求购 Tornado V 2.2.1的序列号 联系方式:站内消息.…

查看全部问答∨

如何改变设备电源状态

我想在WinCE下通过DeviceIOControl来改变LCD背光电源的状态以实现背光灯的亮灭控制。 bResult = DeviceIoControl(hDevice,  // device to be queried                    ...…

查看全部问答∨

成功移植ffmpeg 0.6到ARM平台

    ffmpeg已变成多媒体处理领域最有影响力的开源组件,接近50万行源代码的工程对ARM模拟器来说是个巨大的挑战,但多年的稳定性给了我很大信心。整个过程比较顺利,前后大约花2个半小时,包括在ARM开发板上验证。ffmpeg0.6的移植成 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved