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

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

3天内不再提示

Arduino篇—点阵屏动态显示

冬至子 来源:X的创客课堂 作者:MRXY 2023-11-01 15:25 次阅读

学习目标

  • 字库的创建与应用
  • 位移操作
  • 动态显示的应用

电路搭建

所需材料

ArduinoUNO * 1
8 * 8点阵屏 * 1
杜邦线若干

电路连接

图片

程序编写:

练习:点阵屏动态显示数字

通过编写程序,实现点阵屏动态显示数字0~9。本节课内容主要通过代码的方式来进行讲解,图形化由于在后续使用点阵屏模块的时候会非常容易,所以不在这里赘述。

代码方式:

/* 项目名称:动态显示数字
 * 项目时间:2022.03.04
 * 项目作者:MRX
 */
int leds[8] = {9, 14, 8, 12, 1, 7, 2, 5}; //点阵屏正极引脚
int gnds[8] = {13, 3, 4, 10, 6, 11, 15, 16}; //点阵屏负极引脚
char nums[] = {
  0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
  0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
  0x00, 0x46, 0x8A, 0x92, 0x92, 0x62, 0x00, 0x00, // -2-
  0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3-
  0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4-
  0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5-
  0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6-
  0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7-
  0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8-
  0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00, // -9-
  0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B-
  0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C-
  0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E-
  0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F-
};
void ledclean()
{
  for (int i = 0; i < 8; i++)//将点阵屏正极拉低,负极拉高,关断显示
  {
    digitalWrite(leds[i], LOW); 
    digitalWrite(gnds[i], HIGH);
  }
}
//字符显示
void ledShow(char num, char dat)
{
  digitalWrite(gnds[num], LOW);
  for (int i = 0; i < 8; i++)
  {
    digitalWrite(leds[i], dat & 0x80); // 1 0 0 0 0 0 0 0
    dat < <= 1;
  }
  delayMicroseconds(100);
  digitalWrite(gnds[num], HIGH);
  ledclean();
}
void setup() {
  for (int i = 0; i < 8; i++)
  {
    pinMode(leds[i], OUTPUT);
    pinMode(gnds[i], OUTPUT);
    digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
  }
}
void loop() {
  for (int a = 0; a < 10; a++) //控制流动显示内容
  {
    for (int i = 0 ; i < 200 ; i++)//循环显示达到延时效果
    {
      for (int c = 0; c < 8; c++) //8列循环扫描,达到点阵屏驱动效果
      {
        ledShow(c, nums[c + a*8]);
      }
    }
  }
  }

程序分析:

上面这段程序实现了在点阵屏上翻页显示数字09,虽然我们字库按照十六进制进行了定义,但是这里根据要求,只需要09就可以了。

定义一个数组用于存储需要显示的字库,每8个表示一个字符。

char nums[] = {
  0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
  0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
  0x00, 0x46, 0x8A, 0x92, 0x92, 0x62, 0x00, 0x00, // -2-
  0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3-
  0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4-
  0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5-
  0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6-
  0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7-
  0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8-
  0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00, // -9-
  0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B-
  0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C-
  0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E-
  0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F-
};

这个数组,表示的是数字的字模。以数字3对应的数据nums[0]{ 0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, },//0为例,包括有8个十六进制的数,每行一个十六进制数,并且换成二进制的表示,会是什么样的呢?

00000000 //0x00
01111100 //0x7C
10001010 //0x8A
10010010 //0x92
10100010 //0xA2
01111100 //0x7C
00000000 //0x00
00000000 //0x00

请看1出现的地方,可以借着鼠标按1出现的轨迹跟着划一划,不就是一个横着的数字0字型的轮廓么。

loop()中的三重for循环: 最里面控制8列扫描显示,中间for循环用于控制显示时间,最外层for循环用于控制流动位置。

流动效果: 依次移动需要显示的字符数据,就达到了流动显示效果。可以控制每次移动的间距,当每次移动8列就会实现整屏覆盖的效果。

字符指针数据类型char: 指向了一个char类型的内存单元,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。

dat<<=1: 即dat=dat<<1;,将dat变量左移1位后的值赋给dat,结果会改变dat变量的值。

dat & 0x80: 就是dat和10000000位相与,即把dat最高位置1,其它位不变。(这里的“&”是位逻辑运算(一位一位的运算)。)

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

    关注

    22

    文章

    1592

    浏览量

    107948
  • 十六进制
    +关注

    关注

    2

    文章

    32

    浏览量

    37731
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186942
  • 点阵屏
    +关注

    关注

    4

    文章

    71

    浏览量

    31939
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2502
收藏 人收藏

    评论

    相关推荐

    LED显示屏动态显示和远程监控的实现

    由于普通LED点阵显示屏动态显示通常采用硬件扫描驱动,这在一些需要特殊显示的场合显得不够灵活。文中提出了一种利用PC机和单片机的通讯来实现显示屏
    发表于 03-07 14:35

    protues 仿真***点阵 动态显示

    protues 仿真***点阵 动态显示
    发表于 03-19 16:09

    关于单片机点阵动态显示仿真

    我在proteus仿真,我把点阵的阴极全部接地,采用列选通的方式,也就是如果16列都同时给高电平时,整个都亮。现在想要用74hc154实现动态显示,即每个时刻只有一列亮。我把延时调大,可以看到
    发表于 07-02 13:02

    如何去实现LED显示屏动态显示和控制?

    本文介绍一种实现LED点阵显示屏动态显示和控制的解决方案。
    发表于 05-31 06:58

    LED显示屏动态显示及程序

    实现动态显示效果的方法和以上几种基本类
    发表于 07-11 10:28 181次下载

    LED点阵显示牌的设计与动态显示控制

    LED点阵显示牌的设计与动态显示控制
    发表于 10-27 16:29 75次下载
    LED<b class='flag-5'>点阵</b><b class='flag-5'>显示</b>牌的设计与<b class='flag-5'>动态显示</b>控制

    MIN数码管动态显示

    数码管动态显示,MIN数码管动态显示,MIN。
    发表于 05-03 10:48 9次下载

    LED点阵电路及其动态显示系统的设计

    LED 电子显示屏具有投影仪器、液晶显示屏无法比拟的优点:高亮度、功耗小、工作电压低、寿命长、稳定和耐冲击等优点。 本文所提出的即为一种基于 AT89C51 系列单片机的88 LED 点阵动态
    发表于 11-30 11:23 18次下载
    LED<b class='flag-5'>点阵</b>电路及其<b class='flag-5'>动态显示</b>系统的设计

    如何实现LED点阵显示屏动态显示和控制

    LED 点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多
    的头像 发表于 12-19 09:51 2.9w次阅读
    如何实现LED<b class='flag-5'>点阵</b><b class='flag-5'>显示屏</b>的<b class='flag-5'>动态显示</b>和控制

    如何实现LED显示屏动态显示和远程监控的详细资料说明

    由于普通LED 点阵显示屏动态显示通常采用硬件扫描驱动,这在一些需要特殊显示的场合显得不够灵活。文中提出了一种利用PC 机和单片机的通讯来实现显示屏
    发表于 03-14 15:22 11次下载
    如何实现LED<b class='flag-5'>显示屏</b><b class='flag-5'>动态显示</b>和远程监控的详细资料说明

    数码管的静态与动态显示和74HC138及点阵动态显示详细资料说明

    本文档的主要内容详细介绍的是数码管的静态与动态显示和74HC138及点阵动态显示详细资料说明。
    发表于 04-12 18:27 5次下载
    数码管的静态与<b class='flag-5'>动态显示</b>和74HC138及<b class='flag-5'>点阵</b>的<b class='flag-5'>动态显示</b>详细资料说明

    LED显示屏动态显示和远程监控的实现资料

    由于普通LED点阵显示屏动态显示通常采用硬件扫描驱动,这在一些需要特殊显示的场合显得不够灵活。文中提出了一种利用PC机和单片机的通讯来实现显示屏
    发表于 08-30 08:00 6次下载
    LED<b class='flag-5'>显示屏</b><b class='flag-5'>动态显示</b>和远程监控的实现资料

    如何使用单片机实现LED显示屏动态显示和远程监控详细方法说明

    由于普通LED点阵显示屏动态显示通常采用硬件扫描驱动,这在一些需要特殊显示的场合显得不够灵活。文中提出了一种利用PC机和单片机的通讯来实现显示屏
    发表于 11-20 16:56 13次下载
    如何使用单片机实现LED<b class='flag-5'>显示屏</b><b class='flag-5'>动态显示</b>和远程监控详细方法说明

    Micro LED AR显示屏是全球最小最密集的动态显示屏

    2019年6月,美国初创公司Mojo Vision推出具备14000 PPI的Micro LED显示屏,并声称是全球最小最密集的动态显示屏
    发表于 02-04 10:24 1740次阅读

    基于Proteus与汇编语言的汉字点阵动态显示

    电子发烧友网站提供《基于Proteus与汇编语言的汉字点阵动态显示.pdf》资料免费下载
    发表于 10-30 11:31 1次下载
    基于Proteus与汇编语言的汉字<b class='flag-5'>点阵</b><b class='flag-5'>动态显示</b>