当前位置: 首页 > news >正文

【嵌入式协议外设篇】-8×8 点阵屏

一、适用场景
适用场景:字符/图形显示教学、滚动字幕、小游戏(贪吃蛇、贪吃蛇小屏版)、电子徽章、表盘/动画演示等。8×8 点阵是入门图形显示和扫描驱动的经典硬件平台,便于理解多路复用与显示驱动原理。

二、器材清单

8*8点阵屏模块 ×1

STM32F103VET6 ×1

若干杜邦线(母对母/公对公,根据引脚)

5V/3.3V电源

三、工作原理(要点)

数据实际上是写入到MAX7219芯片中,写入的流程是,先将CS设置为低电平表示写入开始,然后将要发送的数据输入一位到DIN引脚中,然后CLK产生一个下降沿,最后CS设置为高点平表示写入结束。

四、接线示意

VCC → +5V

GND → GND

标准库

DIN→ PA0

CS→ PA1

CLK→ PA4

HAL库

DIN→ PA0

CS→ PA1

CLK→ PA2

五、示例代码

//标准库
int buffer[8]={0x00,0x66,0xff,0xff,0xff,0x7e,0x3c,0x18};
int buffer1[8]={0x18,0x18,0xff,0x99,0x99,0xff,0x18,0x18};
int buffer2[8]={0x7E,0x7E,0x5A,0x7E,0x7E,0x5E,0x7E,0x7E};
int buffer3[8]={0x7E,0x10,0x10,0x1C,0x24,0x4C,0x84,0x00};
int buffer4[8]={0x2A,0x2A,0x3E,0x08,0x0E,0x12,0x26,0x42};void gpio_init()
{GPIO_InitTypeDef PA;//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);PA.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_4;PA.GPIO_Mode = GPIO_Mode_Out_PP;PA.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&PA);}void send_num(int bytedata)//写入数据到DIN
{int i;for(i=0;i<8;i++)  //将数据一位一位发送出去{if(bytedata & 0x80)GPIO_SetBits(GPIOA,GPIO_Pin_0);elseGPIO_ResetBits(GPIOA,GPIO_Pin_0);bytedata=bytedata<<1;GPIO_SetBits(GPIOA,GPIO_Pin_4);  //CLK产生下降沿表示此数据有效GPIO_ResetBits(GPIOA,GPIO_Pin_4);}
}void write_news(int address,int num)//写入数据
{GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_ResetBits(GPIOA,GPIO_Pin_4);//提前拉低CLK,防止在后面造成干扰send_num(address);send_num(num);GPIO_SetBits(GPIOA,GPIO_Pin_1);
}void show_num(char num)//显示数字
{int j;for(j=0;j<8;j++){switch(num){case 'x':write_news(j+1,buffer[j]);break;case 'z':write_news(j+1,buffer1[j]);break;case 'g':write_news(j+1,buffer2[j]);break;case 'w':write_news(j+1,buffer3[j]);break;case 's':write_news(j+1,buffer4[j]);break;}}Delay_us(1000000);
}int main(void)
{	SysTick_Init();	    	 //延时函数初始化	  gpio_init();	  		//初始化与LED连接的硬件接口write_news(0x09,0x00);write_news(0x0a,0x03);write_news(0x0b,0x07);write_news(0x0c,0x01);write_news(0xff,0x00);while(1){ show_num('x');show_num('z');show_num('g');show_num('w');show_num('s');}
}

//HAL库
int buffer[8]={0x00,0x66,0xff,0xff,0xff,0x7e,0x3c,0x18};
int buffer1[8]={0x18,0x18,0xff,0x99,0x99,0xff,0x18,0x18};
int buffer2[8]={0x7E,0x7E,0x5A,0x7E,0x7E,0x5E,0x7E,0x7E};
int buffer3[8]={0x7E,0x10,0x10,0x1C,0x24,0x4C,0x84,0x00};
int buffer4[8]={0x2A,0x2A,0x3E,0x08,0x0E,0x12,0x26,0x42};void send_num(int bytedata)
{int i;for(i=0;i<8;i++)  //将数据一位一位发送出去{if(bytedata & 0x80)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);elseHAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);bytedata=bytedata<<1;HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);}
}void write_news(int address,int num)
{
//	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);send_num(address);send_num(num);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
}void show_num(char num)
{int j;for(j=0;j<8;j++){switch(num){case 'x':write_news(j+1,buffer[j]);break;case 'z':write_news(j+1,buffer1[j]);break;case 'g':write_news(j+1,buffer2[j]);break;case 'w':write_news(j+1,buffer3[j]);break;case 's':write_news(j+1,buffer4[j]);break;}}HAL_Delay(1000);
}void led_init()
{write_news(0x09,0x00);write_news(0x0a,0x03);write_news(0x0b,0x07);write_news(0x0c,0x01);write_news(0x0f,0x00);
}
while (1){show_num('x');show_num('z');show_num('g');show_num('w');show_num('s');/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

六、讲解视频

https://www.bilibili.com/video/BV1JXpczjEyo/?spm_id_from=333.1387.search.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

https://www.bilibili.com/video/BV1kmpczUEW3/?spm_id_from=333.1387.search.video_card.click

https://www.bilibili.com/video/BV1A2pcznEJQ/?spm_id_from=333.1387.search.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

http://www.dtcms.com/a/393625.html

相关文章:

  • 【C++:STL】深入详解string类(一):从读文档开始
  • 电商项目实战总结
  • 22.元类、静态鸭子类型、抽象基类
  • 【论文速递】2025年第21周(May-18-24)(Robotics/Embodied AI/LLM)
  • Android 自定义电池组件(BatteryView)
  • 基于 Stripe/Metering 的用量计费:从 SLO 指标到账单流水
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘fastapi’ 问题
  • 论文阅读——隧道中毫米波MIMO信道特性的实验研究
  • The Library: 1靶场渗透
  • 23种设计模式之【装饰器模式】-核心原理与 Java实践
  • 动态规划中的背包问题:0/1 背包与完全背包的核心解析
  • PHP应用-组件框架前端模版渲染三方插件富文本编辑器CVE审计(2024小迪安全DAY30笔记)
  • uniapp 如何判断发的请求是网络异常uni.request
  • 学习:uniapp全栈微信小程序vue3后台 (25)
  • 23种设计模式之【原型模式】-核心原理与 Java实践
  • Netty 重放解码器ReplayingDecoder揭秘:重写轻量异常机制 和 ConstantPool
  • getgeo 生物信息 R语言 表型信息表”“样本信息表”或“临床信息表 phenodata phenotype data
  • OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG
  • Linux文件打包压缩与软件安装管理完全指南
  • KingbaseES数据备份操作详解(图文教程)
  • 中断屏蔽实现方法-ARM内核
  • Kotlin 协程之 SharedFlow 与 StateFlow 深度解析
  • python爬虫(请求+解析+案例)
  • 111-Christopher-Dall_Arm-Timers-and-Fire:Arm架构计时器与半虚拟化时间
  • switch缺少break出现bug
  • 【自然语言处理】(3) --RNN循环神经网络
  • C# 中的 ReferenceEquals 方法
  • BERT:用于语言理解的深度双向Transformer预训练【简单分析】
  • 力扣hot100:两数相加(模拟竖式加法详解)(2)
  • Zotero + Word 插件管理参考文献的引用