【沧海拾昧】Proteus8仿真stm32:七段数码管显示

#C0103


沧海茫茫千钟粟,且拾吾昧一微尘

——《沧海拾昧集》@CuPhoenix


【阅前敬告】

沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系

如有问题必是本集记录有谬,切勿深究


一、多位七段数码管

 1、共阴管是CC,共阳管是CA,对应的译码表如下。

数码管译码表

2、输入信号A~G、DP的有效信号看是共阴还是共阳,共阴管对应的片选信号1~4是低电平有效,从左到右依次为第1位至第4位。

片选位数1234
片选码0x0e000x0d000x0b000x0700


3、输出的示例。数字码0x6f,片选码0x0e00,输出码即二者相加0x0e6f。

GPIO_Write(GPIOC, 0x0e6f );
在第1位输出“9”

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++){}
	}
}

仿真结果。 

动态扫描输出四位

敬谢诸君。


京华西山之巅。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值