SPI实验 LED数码管

LED数码管(LED Segment Displays)是由8个发光二极管构成,并按照一定的图形及排列封装在一起的显示器件。其中7个LED构成7笔字形,1个LED构成小数点(固有时成为八段数码管)。

LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是7段的显示字码共用一个电源的负极,是高电平点亮 ,共阳极就是7段的显示字码共用一个电源的正极,是低电平点亮

我们对数码管所要显示的每个数字和字母进行编码,然后在编程时,将编码放在一个数组上,需要显示什么数字或者字母,从数组里面提取相应的编码就可显示所要显示的字符了。

如图,要显示数字"5"时,编码为0x6D。如果数码管为共阳极,只需要对共阴极的编码做一个取反操作即可。


1、 原理图分析

视觉暂留

级联

(注:图中SPI4对应的即为SPI2)

由于数码管所需的管脚较多,我们使用SPI总线+74HC595芯片实现对数码管的控制。

74HC595是一款8位串行输入、并行输出的位移寄存器,在本次项目中,使用其将SPI串行传递过来的数据并行发送给对应数码管与显示位。SER为数据输入引脚。

我们本次所使用的是一款四段共阴极八位数码管,每个数码管的使能相对独立,各个数码管使用对应的三极管(NPN)进行使能控制。


2、手册分析

查看sn74hc595芯片手册可以得知,我们在SPI设置时需要设置的模式为极性0相位0


3、STM32CubeMX配置


代码:

cpp 复制代码
void nixie_tube(){
	const uint8_t num1[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9
	const uint8_t num2[] = {0x01,0x02,0x04,0x08}; // 对应4位数码管
	int i = 0,j = 0;
	uint8_t temp[2] = {0};

	for(i = 3;i >= 0;i--){ // 0-4位数码管
        temp[0] = num2[i];
		for(j = 0;j < 10;j++){ // 数字0-9
			HAL_GPIO_WritePin(spi2_ss_GPIO_Port,spi2_ss_Pin,GPIO_PIN_RESET);
			temp[1] = num1[j];
			HAL_SPI_Transmit(&hspi2,temp,2,200);
			HAL_GPIO_WritePin(spi2_ss_GPIO_Port,spi2_ss_Pin,GPIO_PIN_SET);
			HAL_Delay(1000); // delay
		}
	}
}
cpp 复制代码
/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		nixie_tube();
  }
  /* USER CODE END 3 */

实现0-9循环,4位数码管循环


效果:

1

相关推荐
国科安芯1 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao3 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉6 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者7 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间8 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious8 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng12 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计13 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu13 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu14 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32