0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机的LED类编程技巧分享

GReq_mcu168 来源:未知 作者:steve 2018-04-21 14:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

8X8点阵

个人感觉点阵需要注意的地方有:

第一个就是驱动点阵的方式

我认为8X8点阵的驱动程序分为行扫描和列扫描两种。

比如行扫描就是用一层for循环:

先选中第一行,然后送入这一行的数据,再选择第二行,然后送入第二行数据,如此循环下去,直至显示完一个屏幕(即8行),同时记得要消隐和微延时(后面会说消隐和微延时),列扫描同理。如图是代码示例:

基于51单片机的LED类编程技巧分享

8X8点阵,无滚动效果

第二个就是滚动效果的实现。

思路是:

一:扫描函数不变,每扫描一个屏幕,所有数据移动一位;(代码实现简单)

二:数据不变,每次读取数据的起始位置移动一位。(代码实现有点难,反正我不会╮(╯▽╰)╭)

以第一种为例:

代码实现:实现滚动效果的基础是一个扫描函数和一个数据处理函数,扫描函数有两层for循环组成:第一层for循环控制图像每移动一次的时间间隔,然后第二层for循环显示整个屏幕。

如图扫描函数:

基于51单片机的LED类编程技巧分享

扫描函数

滚动的重点是数据循环函数的写法,我觉得数据处理分两种:(仅个人愚见,新手)

第一种:

如果显示的内容整个点阵足以显示(这样的情况一般没有),那么就不用另外写数据处理函数,直接用 intrins.h里面的 _cror_(*,*) 函数或者 _crol_(*,*)函数对数据进行循环处理就可以了.不用 <<和 >>是因为后面两个的左右移无法循环,会丢失数据。

第二种:

自然就是指显示的数据在一张屏幕上显示不了,从而导致需要滚动显示。

此时就要另外写一个数据处理函数,原理很简单,比如StreamData[80]这个数组里面存着数据,那么只需将数据中的每一个数据往前(或者往后)移一位就可以了,最后将StreamData[0]移至StreamData[79]的位置就大功告成了。

注:以上两种的扫描还是只扫描一个屏幕(当然最大就只能扫描一个屏幕嘛),每当扫描完一个屏幕,接着进行数据处理就行了。

如图为第二种的数据处理函数:

基于51单片机的LED类编程技巧分享

注:但是我这种方法比较麻烦,但是我也没有想到其他比较好的方法,所以如果读者有比较好的方法的话,希望可以分享一下。

对于LED灯的显示,点亮LED的原理我就不说了,大家都懂,我说几个小细节吧:(补上上面挖的坑)

1、微延时。

当对动态数码管进行操作时,每点亮一位数码管,在点亮下一个数码管之前要进行微延时,这样可以提高亮度,延时太久的话整体效果会大打折扣(俗称:晃眼),但是不延时的话,亮度会很低,所以到底延时多久就取决于处理速度啦,其实到头来还是取决于你的眼睛啦。

(不晃眼的延时就是好延时!)

2、消隐。(就是消除隐约的光,也就是重影)

消隐就是说在所有的灯写完一次数据进行下一次数据刷新的之前要先把所有的灯灭掉,不然的话就会出现重影。记得我刚学的时候就总是出现重影,然后就改延时时间(当时不会嘛,不知道消隐这回事),怎么改都不对,直到最后找回原来的视频、例程又看了一遍才知道要消隐。

下面是我刚开始学单片机时自己做的:

我自己做的心形灯,当时更新手,更菜,大家不要笑哈

(做那个灯的时候刚刚开始学,电阻接小了,导致太亮,眼都快瞎了....)

16X16点阵一般会用74HC595驱动,所以要涉及到其他的知识,所以这里就先不说了,下次再说。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24789

    浏览量

    693620
  • 单片机
    +关注

    关注

    6078

    文章

    45633

    浏览量

    675697
  • 编程
    +关注

    关注

    90

    文章

    3729

    浏览量

    97538

原文标题:51单片机--LED类编程技巧(1)

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    8XC51FX:高性能8位单片机的全方位解析

    8XC51FX:高性能8位单片机的全方位解析 在单片机的世界里,8XC51FX系列以其卓越的性能和丰富的功能脱颖而出,成为众多电子工程师在设计项目时的热门选择。今天,我们就来深入探讨一
    的头像 发表于 03-29 13:15 444次阅读

    手把手教你学51单片机-C语言版

    更多信息),手把手地带领大家来学习单片机技术,给单片机初学者带来福音,让大家一步一个脚印的掌握单片机技术。 《手把手教你学51单片机-C语
    发表于 03-05 11:47

    小白也能听懂的单片机知识路径

    。 为什么从51单片机开始? 51单片机以其结构简单、学习资源丰富、易于上手的特点,成为单片机学习的理想起点。通过学习
    发表于 02-04 16:44

    学习单片机快速方法

    的很不错了。告诉大家我学51单片机只用了两个星期。普通的应用差不多都会了,可以自己设计一个国旗升降系统、温度自动控制系统之类的电路和程序。当然想要这么短的时间内精通是不可能的。 学习单片机是有捷径可走
    发表于 01-14 07:42

    单片机解密是什么?

    芯片的其中一个单片机(MCU)一般都有内部程序区和数据区(或者其一)供用户存放程序和工作数据(或者其一)。为了防止未经授访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定
    发表于 12-30 08:19

    怎么学好单片机

    单片机编程和纯软件的编程,除了编程思想和大部分语法可以沿用之外,其他的,寄存器配置和部分语法都有针对性,要花点时间去学的。学会了51之后
    发表于 12-04 07:16

    为什么单片机还在用C语言编程

    说起单片机我们就会想到C语言,单片机为什么还在用C语言编程?现在有很多很好用的高级语言,如VC、PYTHON、PHP等等,为什么这些语言不能用来编写单片机程序呢?我个人觉得不是这些语言
    发表于 11-28 07:37

    C语言和单片机C语言有什么差异

    区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。 3、单片机c语言编程是基于C语言的单片机编程单片机
    发表于 11-14 07:55

    51单片机RS485编程实例资料

    详细介绍51单片机RS485通信接线和编程代码
    发表于 10-20 14:57 8次下载

    开发单片机需要学习什么?软件编程的 4 个关键层次

                        开发单片机需要学习什么?软件编程的 4 个关键层次 单片机的 “智能” 全靠软件实现,编程技能需从基础语法逐步进阶到复杂逻辑,每个层次对应不同的
    的头像 发表于 08-25 11:32 1156次阅读

    单片机怎么烧程序

    骤,才能让单片机发挥作用。 烧程序前的准备工作 单片机烧程序前,需要做好硬件和软件两方面的准备。硬件方面,核心设备包括目标单片机编程器(或下载器)、电脑以及连接导线。
    的头像 发表于 07-23 11:47 2285次阅读

    大一暑假适合学51单片机吗?

    大一暑假学 51 单片机,简直是老天爷赏饭吃的黄金窗口。我当时就是靠着这两个月,把从课本上看来的 C 语言指针、循环语句,变成了能让 LED 按节奏跳舞的真本事。
    的头像 发表于 07-16 11:42 874次阅读
    大一暑假适合学<b class='flag-5'>51</b><b class='flag-5'>单片机</b>吗?

    AT89C51 单片机中文资料

    电子发烧友网站提供《AT89C51 单片机中文资料.pdf》资料免费下载
    发表于 06-24 15:29 1次下载

    图解单片机功能与应用(完整版)

    从基础知识的介绍出发,图文并茂,直观、系统地介绍了单片机的内部结构、工作原理和应用技巧。全书分为10章,内容包括51单片机编程资源图解、51
    发表于 06-16 16:52

    2.4寸TFT彩屏配套测试程序-51单片机

    如题,2.4寸TFT彩屏配套测试程序-51单片机
    发表于 06-04 16:26 0次下载