蓝桥杯嵌入式国赛模块——数码管

本文硬件基于蓝桥杯嵌入式主板及其扩展板

硬件基础

该数码管模块电路图如下:

图片[1]-蓝桥杯嵌入式国赛模块——数码管-睿冰小站

由电路图可知,这个数码管模块采用了三个移位数据寄存器“SN74LS595N” ,采用此设计可以一次点亮三个数码管,而不需要位选操作。此芯片的主要工作流程如下:

  • 数据从SER进入,在SCK的时钟触发下,上升沿数据移位,下降沿数据保持。当数据移动8次之后,即SCK发生8次高低电平的翻转。8bit的数据已经完全输入到移位数据寄存器。
  • 之后给RCLK 一个上升沿,595移位数据寄存器的数据全部输入到数据寄存器进行输出。

这是一个595芯片,将三个595,联结到一起,进行拓展。控制三个数码管,本来是八位,拓展后,变成24位,即SER不断输入数据,然后SCK共翻转24次,将24bit的数据输入到移位数据寄存器。之后RCLK的一个上升沿,使得数据输出到数据寄存器,三位数码管显示。

代码编写

uint8_t Seg7[17] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};
void shumaguan(uint8_t bit1,uint8_t bit2,uint8_t bit3){
	uint8_t i=0;
	uint8_t temp=0;
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
	temp=Seg7[bit3];
	for(i=0;i<8;i++){
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		if(temp&0x80){
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		}
		else{
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
		}
		temp=temp<<1;
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
	}
	temp=Seg7[bit2];
	for(i=0;i<8;i++){
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		if(temp&0x80){
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		}
		else{
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
		}
		temp=temp<<1;
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
	}
	temp=Seg7[bit1];
	for(i=0;i<8;i++){
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		if(temp&0x80){
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		}
		else{
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
		}
		temp=temp<<1;
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
	}
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
}
© 版权声明
THE END
喜欢就支持以下吧
点赞14 分享
相关推荐