基础认识

1.5英寸LED点阵管数码管8*8红色16pin

有如下两种型号:

共阳1588BS

共阴1588AS

共阴1588AS

共阳1588BS

编程导向

共阴和共阳其编程思路基本类似,只是对应IO引脚电平相反而已

测试的单片机是:STM32F103C8T6

模块为:共阳1588BS

接线:

           

STM32接线:

点阵屏1-8:A0、A1、A2、A3、A4、A5、A6、A7

点阵屏9-16:B0、B1、B10、B11、B12、B13、B14、B15

点阵屏点亮电平分析

正极:9、14、8、12、1、7、2、5

负极:13、3、4、10、6、11、15、16

点亮电平引脚

高电平:B0 B13 A7 B11 A0 A6 A1 A4
低电平:B12 A2 A3 B1 A5 B10
B14 B15

端口初始化:

将使用到的IO口均设置为输出即可

行列控制

因为面板是正方形,所以这里所谓的行/列都是自己定义的,

设置高电平脚为行,低电平脚为列

 //行控制
void R88_row_control(u8 i,BitAction c){
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_0,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_13,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_7,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_11,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_0,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_6,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_1,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_4,c); //
} //列控制
void R88_col_control(u8 i,BitAction c){
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_12,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_2,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_3,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_1,c); //
if(i==) GPIO_WriteBit(GPIOA,GPIO_Pin_5,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_10,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_14,c); //
if(i==) GPIO_WriteBit(GPIOB,GPIO_Pin_15,c); // }

关闭所有点阵

使得所有发光二极管截止则可达到目的,即所有高电平引脚变成低电平,所有低电平引脚变成高电平

void R88_off(){
u8 i=;
for( i=;i<;i++)
{
R88_row_control(i,);
R88_col_control(i,);
}
}

点亮所有点阵

使得所有发光二极管导通即可,即高电平引脚输出高电平,低电平引脚输出低电平

void R88_on(){
u8 i=;
for( i=;i<;i++)
{
R88_row_control(i,);
R88_col_control(i,);
}
}

行刷新

每移动一行,所有列刷新一次

void R88_row_flush(){
u8 i,j,n;
R88_off();//关闭所有
for(i=;i<;i++){
for(n=;n<;n++) R88_row_control(n,);//关闭所有行
R88_row_control(i,);//行移动
for(j=;j<;j++){
for(n=;n<;n++) R88_col_control(n,);//关闭所有列
R88_col_control(j,);//列移动
delay_ms();
}
}
}

列刷新

每移动一列,所有行刷新一次

void R88_col_flush(){
u8 i,j,n;
R88_off();//关闭所有
for(i=;i<;i++){
for(n=;n<;n++) R88_col_control(n,);//关闭所有列
R88_col_control(i,);//列移动
for(j=;j<;j++){
for(n=;n<;n++) R88_row_control(n,);//关闭所有行
R88_row_control(j,);//行移动
delay_ms();
}
}
}

表情/图像显示

视频展示:https://www.bilibili.com/video/av75504969

          

基于列刷新,每移动一列,都会刷新全部行

第0列:0000 0100    0x04

第1列:0000 0010    0x02

第2列:0010 0100    0x24

第3列:0100 0000    0x40

第4列:0100 0000    0x40

第5列:0010 0100    0x24

第6列:0000 0010    0x02

第7列:0000 0100    0x04

u8 Small_Arr1[]={0x04,0x02,0x24,0x40,0x40,0x24,0x02,0x04};
u8 Small_Arr2[]={0x06,0x02,0x22,0x40,0x40,0x26,0x02,0x02};
void R88_show_img(u8 arr[]){
u8 i,j,n;
for(i=;i<;i++){
R88_off();//关闭所有
R88_col_control(i,);//列移动¯
//行控制
if(arr[i]&0x01) R88_row_control(,);
if(arr[i]&0x02) R88_row_control(,);
if(arr[i]&0x04) R88_row_control(,);
if(arr[i]&0x08) R88_row_control(,);
if(arr[i]&0x10) R88_row_control(,);
if(arr[i]&0x20) R88_row_control(,);
if(arr[i]&0x40) R88_row_control(,);
if(arr[i]&0x80) R88_row_control(,);
}
}

Main函数部分调用

LED_Init();//初始化GPIO,均为输出
R88_row_flush();//刷新行
R88_col_flush();//刷新列
while(){
R88_show_img(Small_Arr1);//显示表情,需持续刷新
//R88_show_img(Small_Arr2); //显示表情,需持续刷新
}
}

扩展导向

1、 真实使用时,需要通过定时器中断刷新,典型值为1ms,需要更改显示时直接更改数组的数据即可,点阵屏将会在下一次刷新时更改为正确的显示。

2、 点阵屏所占用的单片机引脚太多了,有点杀鸡用牛刀了,可以考虑使用74HC595进行扩展IO输出,以减少单片机引脚资源的占用。

参考:http://arduino.nxez.com/2018/12/09/arduino-drivers-8x8-matrix.html

8*8LED点阵的更多相关文章

  1. MicroPython:基于TPYBoard集合MAX7219点阵模块制作表白女神神器

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 又是一年毕业季,只有到了毕业季才会意识到自己又 ...

  2. arduino之16*16点阵庆祝祖国70周年

    之前电脑上存了很多自己写的关于arduino的有趣的小demo,因为重装了系统,不小心误删了所有的文件(气的半死),所以现在准备一有空就重写一下之前写过的东东,顺带再温习一次,这次总不能再删了吧,嘿嘿 ...

  3. LED点阵显示

    /*********************************************************** 8*8LED点阵---显示数字实验 实现现象:下载程序后点阵上显示数字0 注意 ...

  4. 单片机与控制实验(2)——LED点阵显示屏

    一.实验目的和要求 了解LED点阵显示的基本原理和实现方法.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法. 二.实验设备 单片机测控实验系统 LED点阵显示器实验模块 Keil开发环境 STC ...

  5. 基于Proteus仿真的Arduino学习(2)——LED点阵探究A(LED点阵基础)

    一.前言: 随着LED的普及,以LED点阵为基础的显示设置层出不穷.例如,公交车的线路提示牌.高速公路的信息提示牌,安装在大楼上的广告屏幕等.下面,我们将由简单到复杂地探索各种LED点阵的使用方法,同 ...

  6. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  7. 如何为编程爱好者设计一款好玩的智能硬件(八)——LCD1602点阵字符型液晶显示模块驱动封装(中)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  8. 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

    当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...

  9. Windows7 系统 CMD命令行,点阵字体不能改变大小以及中文乱码的问题

    之前装了oracle 11g后,发现开机速度竟然奇葩的达到了3分钟.经过旁边大神指点,说是因为oracle某个(具体不清楚)服务,在断网的时候会不断的ping网络,导致速度变慢.然后就关服务呗,然后一 ...

随机推荐

  1. Java字段初始化规律

    首先先附上一段代码:public class InitializeBlockDemo { public static void main(String[] args) { InitializeBloc ...

  2. Git版本控制之ubuntu搭建Git服务器

    Git是一个开源的分布式版本控制系统,可以有效.高效的处理从很小到非常大的项目版本管理.使得开发者可以通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库,也可以将代码提交到Git服务 ...

  3. Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行

    本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...

  4. 编译 lame for iOS

    网上找了许多编译lame的教程,结果都是编译失败,多次尝试后发现是编译脚本放错路径了,记录下编译的过程,把编译脚本放到源码文件夹中和修改编译脚本中的目录是关键: 一.首先去Lame官网 http:// ...

  5. Map集合(双列集合)

    Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...

  6. 利用pyecharts将数据可视化

    可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ...

  7. Hibernate HQL注入与防御(ctf实例)

    遇到一个hql注入ctf题    这里总结下java中Hibernate HQL的注入问题. 0x01 关于HQL注入 Hibernate是一种ORM框架,用来映射与tables相关的类定义(代码) ...

  8. PHP array_fill_keys

    1.函数的作用:将一个数组的元素分别作为键值和一个指定的值组成新的数组: 2.函数的参数: @params array  $array @params mixed $values 3.例子: < ...

  9. 对新手严重不友好的强者——Nginx那些俯拾皆是的坑

    1.if和后边的括号要隔一个空格,变量后面也要有空格. 2.location / 和location = / 的意味不一样.前面的是通用匹配,后面的匹配根节点访问请求,前面的使用不好很容易引发重定向过 ...

  10. Redis中是如何实现分布式锁的?

    分布式锁常见的三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 本地面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的. 要点 Red ...