本文硬件基于蓝桥杯嵌入式主板及其扩展板
硬件基础
该数码管模块电路图如下:
![图片[1]-蓝桥杯嵌入式国赛模块——数码管-睿冰小站](https://www.r6b.cn/wp-content/uploads/2022/05/18t01.jpg)
由电路图可知,这个数码管模块采用了三个移位数据寄存器“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