你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【年中粉丝节】+基于STM32LO31驱动矩阵

[复制链接]
养乐多 发布时间:2021-6-30 14:57
在分享一篇,这几天突发奇想,搞了搞几个模块,给大家搞个基础一点的分享,8X8点阵模块,这个对大学生应该是还是比较实用的。
11.png
一、设备
本次以用的是STM32L031(当然其他的也可以)
模块:8X8点阵模块
12.png
13.png
话不多说开始介绍:

二话不说,我们来看一下点阵模块。从下到上一共有两组8位接口和GND、VCC接口。所以不难想到每个点由两个接口控制,理论有了,直接接线看效果。
在是跳线的时候我的想法是两组要么都是低电平有效,要么都是高电平有效,结果试了都没亮,当时就疑惑了。可能是惯性思维的原因,一直没想到一个是低电平有效,一个是高电平有效,为此我还纠结了好久。
直接看图
14.png
紫色和橙色接3.3v,蓝色和黄色接GND。
分析:
自左往右数第五列,自上往下数第倒数二行;
P23和P17。
得:
P2控制垂直与接口方向(低电平有效),P1控制平行接口方向(高电平有效)。
文字不好理解直接上图:
15.png
以右上角为坐标原点建立坐标轴:
x轴由P1控制(高电平有效),y轴由P2控制(低电平有效)。


设计问题
知道了工作原理,那就玩点花样,先设计一个静态图案实现一下。
心形图案
如图:
16.png
三、设计解决方案
思路:
通过定时扫描实现图案显示。
按x轴进行扫描,从x=1开始,打开P1口,将y轴的显示数据输入,x++,重复y轴输入,从而达到显示效果。
流程图:
17.png
初始化GPIO
输入y轴数据
打开对应x轴
关闭x轴
清空y轴数据
理论存在,开始编程


四、程序代码
  1. #include "lled.h"

  2. uchar L_heart[]={0x1e,0x21,0x41,0x82,0x82,0x41,0x21,0x1e};
  3. //用数组储存y轴输出的数据

  4. void led_init(void)        //初始化端口
  5. {
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  8.         GPIO_InitTypeDef gpio_ad;
  9.         gpio_ad.GPIO_Pin        =        0xff;
  10.         gpio_ad.GPIO_Mode        =        GPIO_Mode_Out_PP;
  11.         gpio_ad.GPIO_Speed        =        GPIO_Speed_50MHz;
  12.         GPIO_Init(GPIOA,&gpio_ad);//A[7:0]->x,low PA01~PA07控制x轴,低电平有效
  13.         gpio_ad.GPIO_Pin        =        0xff;
  14.         gpio_ad.GPIO_Mode        =        GPIO_Mode_Out_PP;
  15.         gpio_ad.GPIO_Speed        =        GPIO_Speed_50MHz;
  16.         GPIO_Init(GPIOD,&gpio_ad);//D[7:0]->y,high PD01~PD07控制y轴,高电平有效
  17.        
  18.         GPIO_ResetBits(GPIOD,0xff);
  19.         GPIO_SetBits(GPIOA,0xff);//关闭x轴,y轴输出
  20. }

  21. void led_display(void)
  22. {
  23.         static int i=0;
  24.         static uint n=0x01;
  25.        
  26.         GPIO_SetBits(GPIOD,L_heart[i]);//输入y轴数据
  27.         GPIO_ResetBits(GPIOA,n);//打开x轴
  28.         delay_ms(10);
  29.         GPIO_SetBits(GPIOA,0xff);//关闭x轴
  30.         GPIO_ResetBits(GPIOD,0xff);//清空y轴数据
  31.        
  32.         n=n<<1;
  33.         i++;
  34.        
  35.         if(i==8)
  36.                 i=0;
  37.        
  38.         if(n==0x100)
  39.                 n=0x01;
  40.        
  41. }

  42. void led_off(void)
  43. {
  44.         GPIO_ResetBits(GPIOD,0xff);
  45.         GPIO_SetBits(GPIOA,0xff);
  46.        
  47. }
复制代码
效果图如下:
18.png



收藏 评论2 发布时间:2021-6-30 14:57

举报

2个回答
STMCU-管管 回答时间:2021-6-30 15:34:22
你这个头像有点意思
子曰好人2号 回答时间:2021-7-1 16:42:41
拓展一下就是刷动图了,什么时候安排《bad apple》呢

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版