实验内容:
编写程序,在数码管上显示自己的学号。
数码管相关电路:
PA7对应的应该是段码,上面的图写错了。
注意:选中数码管是低电平选中;并且用74HC595模块驱动输出的段码,
这个模块的学习可以参考:https://blog.csdn.net/qq_44881094/article/details/123212973
简单总结就是串行输入,并行输出,高位先行。他不是像一些模块并行输入再并行输出,而是一位一位(高位先输入,因为移位寄存器每次接收数据都是左移)地输入到移位寄存器,然后再存储寄存器里,作为输出。
PA5对应的SCK,上升沿时,移位寄存器左移一位,接收从PA7输入的数据,段码的8位输入完毕后,PA8对应的RCK,来一个上升沿,将移位寄存器里的值锁存到存储寄存器,QA-QH并行输出。
代码部分:
table段码表,s你要显示的八个数字。注意位码每次置0后记得要置1,延时时间不要太长,否则会闪烁。
void write_byte(unsigned char date){
unsigned char i;
for(i=0;i<8;i++){
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,(date>>(7-i))&0x01);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,1);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,0);
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,1);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,0);
}
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char s[]={2,1,3,4,5,6,7,8};
for(int i=8;i<16;i++){
write_byte(table[s[15-i]]);
HAL_GPIO_WritePin(GPIOF,0x01<<i,0);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOF,0x01<<i,1);
}