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

    文章

    1554

    浏览量

    107030
  • 十六进制
    +关注

    关注

    2

    文章

    31

    浏览量

    36676
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184833
  • 点阵屏
    +关注

    关注

    4

    文章

    71

    浏览量

    31811
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2420
收藏 人收藏

    评论

    相关推荐

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

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

    16*16LED点阵动态显示屏,proteus仿真+源程序

    自己画的一个16*16LED显示屏,可编程动态显示字符,拿出来分享一哈{:3:}
    发表于 04-30 20:11

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

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

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

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

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

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

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

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

    双色8×8点阵LED的动态显示

    以8031单片机为核心, MAX7219作为行、列驱动器, 完成了双色8 8点阵LED矩阵发光屏驱动板设计与制作, 实现了LED显示器件的动态驱动。通过对驱动波形的测试与分析,加深了学生对显示
    发表于 03-07 14:36 402次下载
    双色8×8<b class='flag-5'>点阵</b>LED的<b class='flag-5'>动态显示</b>

    数码管(动态显示)【C语言版】

    数码管(动态显示)【C语言版】数码管(动态显示)【C语言版】数码管(动态显示)【C语言版】数码管(动态显示)【C语言版】
    发表于 12-29 15:51 0次下载

    动态显示-译码器片选实现【汇编版】

    动态显示-译码器片选实现【汇编版】动态显示-译码器片选实现【汇编版】动态显示-译码器片选实现【汇编版】
    发表于 12-29 15:51 0次下载

    动态显示-译码器片选实现【C语言】

    动态显示-译码器片选实现【C语言】动态显示-译码器片选实现【C语言】动态显示-译码器片选实现【C语言】动态显示-译码器片选实现【C语言】
    发表于 12-29 15:51 0次下载

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

    LED 电子显示屏具有投影仪器、液晶显示屏无法比拟的优点:高亮度、功耗小、工作电压低、寿命长、稳定和耐冲击等优点。 本文所提出的即为一种基于 AT89C51 系列单片机的88 LED 点阵动态
    发表于 11-30 11:23 18次下载
    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>和远程监控的实现资料

    使用单片机实现双色点阵双色交替动态显示的C语言程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现双色点阵双色交替动态显示的C语言程序免费下载。
    发表于 03-27 10:59 25次下载

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

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