#C0103
沧海茫茫千钟粟,且拾吾昧一微尘
——《沧海拾昧集》@CuPhoenix
【阅前敬告】
沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系
如有问题必是本集记录有谬,切勿深究
一、多位七段数码管
1、共阴管是CC,共阳管是CA,对应的译码表如下。
![](https://img-blog.csdnimg.cn/img_convert/efd813240f11f6dd1107d0db030c2655.jpeg)
2、输入信号A~G、DP的有效信号看是共阴还是共阳,共阴管对应的片选信号1~4是低电平有效,从左到右依次为第1位至第4位。
片选位数 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
片选码 | 0x0e00 | 0x0d00 | 0x0b00 | 0x0700 |
3、输出的示例。数字码0x6f,片选码0x0e00,输出码即二者相加0x0e6f。
GPIO_Write(GPIOC, 0x0e6f );
![](https://img-blog.csdnimg.cn/452a1bba5e504514a8f3a7f67a137aae.png)
4、输出用的函数GPIO_Write的原型如下,适用于对统一端口的多个引脚的写入。
void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t ProtVal)
5、多位七段管输出的方法是动态扫描,即逐位输出。在每位输出前面加一个短暂的延时函数,然后清零引脚,动态扫描输出就不会闪烁了。示例如下(在第一位片选码使用0x0e80,加了个小数点)。
先定义好译码表待查。
const uint16_t SegmentCodes[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
const uint16_t SegmentBit[]={0x0e80,0x0d00,0x0b00,0x0700};
输出内容。
uint16_t temp = 1234;
// 输出内容:1234
uint16_t unit[4];
unit[0] = temp / 1000;
unit[1] = temp % 1000 / 100;
unit[2] = temp % 100 / 10;
unit[3] = temp % 10;
// 位数拆分
int i = 0;
for(i=0;i<4;i++){
delay();
GPIO_Write(GPIOC, 0x0f00 );
GPIO_Write(GPIOC, SegmentCodes[unit[i]]+SegmentBit[i] );
}
// 循环输出各位
短暂的延时。
void delay(){
int i=0,j=0;
for(i=0;i<5;i++){
for(j=0;j<100;j++){}
}
}
仿真结果。
![](https://img-blog.csdnimg.cn/550a16d1c79446f68d12e3353960bc3e.png)
敬谢诸君。
京华西山之巅。