51单片机--LED类编程技巧续

上一篇说了一点点关于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(>﹏ 其他选项 里面,软件自身也有相当详细的说明,自己看就行了。
这样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初始化问题详解:单片机贴吧”就行。
好了,这篇文章就到这里了,拜拜( ^_^ )~~

红外发射管和红外线接收头的使用方法与如何进行检测?
Xilinx如何配置BSP工程包含的的公共模块
华为存储四大举措提升EDA仿真效率
基于LabVIEW构建智能的移动机器人及无人驾驶车
基于华为云物联网平台设计的浇花神器(STM32设备)
51单片机--LED类编程技巧续
高频电路中电感与磁珠的应用
高效护牙,愉悦刷牙好物:NANK/南卡-Shiny声波电动牙刷体验评测
香橙派Orange Pi Zero Plus技术分析
钴酸锂电池正负极反应式_钴酸锂电池有毒吗
力矩电机在钢丝表面设备中的应用
防浪涌TVS:电子设备的保护盾?
数字化转型 怎能拖泥带水
高级静态分析符合基于合约的编程
又一国家针对5G开发项目,将华为直接拒之门外
如何亲手设计一个简单且有效的锂电池充电电路?
周报:前三季度前装交付超三万套 AR导航“要火”
索泰gtx1080tipgf跑分评测 高端玩家越来越有福了
如何提升无线麦克风系统的传输效果及品质
LED路灯应用的发展现状与技术分析(图)