3461bs-1 stm32
时间: 2023-11-13 21:49:25 浏览: 125
引用提到了STM32实时时钟(RTC)的功能和特点,它是一个独立的BCD定时器/计数器,提供日历时钟、报警中断和定期唤醒标志等功能。它使用二进制十进制(BCD)格式来表示秒、分、小时、星期、日期、月份和年份,并提供亚秒值。此外,它还可以自动调整每个月的天数、提供夏令时补偿,并具备数字校准功能。RTC寄存器在上电复位后会被保护,只有在电源电压在工作范围内时才会继续工作。
引用是一段代码,用于在四位数码管上显示数字。它包含了延时函数和显示函数,可以根据传入的数字和形参来显示相应的数码管显示效果。
引用提到了市面上常见的3641BS数码管都是集成了74HC595移位寄存器芯片的PCB板。但是作者手头只有最原始的12引脚版本,因此在博客中讲解了使用12引脚版本的3641BS数码管驱动的方法。
回答完问题后的
相关问题
用stm32f103c8t6写一个3461BS1-7.3显示单独控制四个数字的代码
下面是使用STM32F103C8T6控制3461BS1-7.3显示单独控制四个数字的简单代码示例:
```c
#include "stm32f10x.h"
// 定义数码管控制端口
#define DIG_PORT GPIOB
#define DIG_PIN_1 GPIO_Pin_0
#define DIG_PIN_2 GPIO_Pin_1
#define DIG_PIN_3 GPIO_Pin_10
#define DIG_PIN_4 GPIO_Pin_11
// 定义数码管显示端口
#define SEG_PORT GPIOC
#define SEG_PIN_A GPIO_Pin_0
#define SEG_PIN_B GPIO_Pin_1
#define SEG_PIN_C GPIO_Pin_2
#define SEG_PIN_D GPIO_Pin_3
#define SEG_PIN_E GPIO_Pin_4
#define SEG_PIN_F GPIO_Pin_5
#define SEG_PIN_G GPIO_Pin_6
#define SEG_PIN_DP GPIO_Pin_7
// 数码管显示字形表
const uint8_t DIG_TABLE[] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f, // 9
};
// 数码管显示缓存
uint8_t DIG_CACHE[] = {
0xff, // 数码管1
0xff, // 数码管2
0xff, // 数码管3
0xff, // 数码管4
};
// 数码管显示控制
uint8_t DIG_CTRL[] = {
0, // 数码管1
0, // 数码管2
0, // 数码管3
0, // 数码管4
};
// 数码管位选函数
void dig_select(uint8_t idx) {
switch (idx) {
case 0:
GPIO_WriteBit(DIG_PORT, DIG_PIN_1, Bit_RESET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_2, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_3, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_4, Bit_SET);
break;
case 1:
GPIO_WriteBit(DIG_PORT, DIG_PIN_1, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_2, Bit_RESET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_3, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_4, Bit_SET);
break;
case 2:
GPIO_WriteBit(DIG_PORT, DIG_PIN_1, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_2, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_3, Bit_RESET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_4, Bit_SET);
break;
case 3:
GPIO_WriteBit(DIG_PORT, DIG_PIN_1, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_2, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_3, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_4, Bit_RESET);
break;
default:
GPIO_WriteBit(DIG_PORT, DIG_PIN_1, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_2, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_3, Bit_SET);
GPIO_WriteBit(DIG_PORT, DIG_PIN_4, Bit_SET);
break;
}
}
// 数码管显示函数
void dig_display(uint8_t idx, uint8_t val) {
DIG_CTRL[idx] = val;
DIG_CACHE[idx] = DIG_TABLE[val];
}
// 数码管显示初始化函数
void dig_init() {
// 数码管控制端口初始化
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = DIG_PIN_1 | DIG_PIN_2 | DIG_PIN_3 | DIG_PIN_4;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DIG_PORT, &GPIO_InitStruct);
// 数码管显示端口初始化
GPIO_InitStruct.GPIO_Pin = SEG_PIN_A | SEG_PIN_B | SEG_PIN_C | SEG_PIN_D | SEG_PIN_E | SEG_PIN_F | SEG_PIN_G | SEG_PIN_DP;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(SEG_PORT, &GPIO_InitStruct);
// 数码管显示缓存清零
for (int i = 0; i < 4; i++) {
DIG_CACHE[i] = 0xff;
}
}
int main(void) {
// 数码管显示初始化
dig_init();
// 数码管显示测试
uint8_t cnt = 0;
while (1) {
for (int i = 0; i < 4; i++) {
dig_select(i);
GPIO_Write(SEG_PORT, DIG_CACHE[i]);
DIG_CTRL[i] = (DIG_CTRL[i] + 1) % 10;
dig_display(i, DIG_CTRL[i]);
for (int j = 0; j < 1000; j++);
}
}
}
```
在这个代码示例中,我们使用了STM32F103C8T6的GPIO模块来控制四个3461BS1-7.3数码管的显示。我们首先定义了数码管控制端口和数码管显示端口,然后定义了数码管显示字形表和显示缓存。在初始化函数中,我们初始化了数码管控制端口和数码管显示端口,并将显示缓存清零。在主函数中,我们循环遍历四个数码管,依次将其选中并显示对应的数字。在每次循环中,我们还将对应数码管的数字加1,以便在下次循环中显示下一个数字。
需要注意的是,这个代码示例只是一个简单的数码管显示程序,如果需要实现更复杂的功能,比如显示实时时间、温度等,需要根据具体的需求进行修改。
stm32 bs8116
STM32是一系列由意法半导体(STMicroelectronics)开发的32位微控制器。它们广泛应用于各种嵌入式系统中,具有高性能、低功耗和丰富的外设特点。BS8116是一种电容按键对应的按键码,在STM32单片机板子上可以通过观察电容按键的状态来确定按键码的值。在给定的代码中,通过I2C总线通信来读取BS8116的按键值。首先,发送器件地址0xA0作为写地址,然后发送字地址0x08,接下来再发送器件地址0xA1作为读地址,最后通过ATIIC_Rev_Data函数读取按键值。通过比较读取的按键值和预定义的键值可以得到具体的按键结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文