电路如下所示,编写程序,实现第一位数码管显示'5'。
1个回答
关注
展开全部
// 设置第三位数码管显示数字5 GPIO_ResetBits(GPIOC, digitPins[2]); // 先选中第三位数码管 for (int i = 0; i < 4; i++) { if (digitValues[5][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } // 设置第四位数码管显示数字1 GPIO_ResetBits(GPIOC, digitPins[3]); // 先选中第四位数码管 for (int i = 0; i < 4; i++) { if (digitValues[1][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } while (1); return 0;}
咨询记录 · 回答于2023-05-09
电路如下所示,编写程序,实现第一位数码管显示'5'。
下面提供一个STM32F103C8T6单片机使用GPIO驱动数码管的示例程序,可以参考一下:
可以用stm32板,就是51单片机库函数语言写吗
不可以。STM32与51单片机的架构和指令集不同,不能直接使用51单片机的库函数语言进行编程。STM32使用的是C语言进行编程,并且需要使用STM32的开发工具进行开发,如Keil、IAR等。如果您有51单片机的开发经验,需要学习一些新的知识才能进行STM32的开发。
#include "stm32f10x.h"#define DIGIT1_Pin GPIO_Pin_0#define DIGIT2_Pin GPIO_Pin_1#define DIGIT3_Pin GPIO_Pin_2#define DIGIT4_Pin GPIO_Pin_3#define SEG_A_Pin GPIO_Pin_4#define SEG_B_Pin GPIO_Pin_5#define SEG_C_Pin GPIO_Pin_6#define SEG_D_Pin GPIO_Pin_7#define SEG_E_Pin GPIO_Pin_8#define SEG_F_Pin GPIO_Pin_9#define SEG_G_Pin GPIO_Pin_10#define SEG_DP_Pin GPIO_Pin_11void delay_ms(uint32_t ms) { uint32_t i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 1000; j++); }}void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = DIGIT1_Pin | DIGIT2_Pin | DIGIT3_Pin | DIGIT4_Pin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SEG_A_Pin | SEG_B_Pin | SEG_C_Pin | SEG_D_Pin | SEG_E_Pin | SEG_F_Pin
请问这是第几题的内容可以把两道题的答案发一下吗
#include "stm32f10x.h"int main(void){ // 使能GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 配置PC0-PC7引脚为推挽输出模式 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); // 数码管的引脚控制 uint16_t digitPins[4] = {GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11}; uint8_t digitValues[10][4] = { {1, 1, 1, 0}, // 显示数字0 {0, 1, 1, 0}, // 显示数字1 {1, 0, 1, 0}, // 显示数字2 {0, 0, 1, 0}, // 显示数字3 {1, 1, 0, 0}, // 显示数字4 {0, 1, 0, 0}, // 显示数字5 {1, 0, 0, 0}, // 显示数字6 {0, 0, 0, 0}, // 显示数字7 {1, 1, 1, 1}, // 显示数字8 {0, 1, 1, 1} // 显示数字9 }; // 设置第一位数码管显示数字5 GPIO_ResetBits(GPIOC, digitPins[0]); // 先选中第一位数码管
for (int i = 0; i < 4; i++) { if (digitValues[5][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } while (1); return 0;}
以上是第一题
下面是第二题
#include "stm32f10x.h"int main(void){ // 使能GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 配置PC0-PC7引脚为推挽输出模式 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); // 数码管的引脚控制 uint16_t digitPins[4] = {GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11}; uint8_t digitValues[10][4] = { {1, 1, 1, 0}, // 显示数字0 {0, 1, 1, 0}, // 显示数字1 {1, 0, 1, 0}, // 显示数字2 {0, 0, 1, 0}, // 显示数字3 {1, 1, 0, 0}, // 显示数字4 {0, 1, 0, 0}, // 显示数字5 {1, 0, 0, 0}, // 显示数字6 {0, 0, 0, 0}, // 显示数字7 {1, 1, 1, 1}, // 显示数字8 {0, 1, 1, 1} // 显示数字9 }; // 设置第一位数码管显示数字8 GPIO_ResetBits(GPIOC, digitPins[0]); // 先选中第一位数码管
for (int i = 0; i < 4; i++) { if (digitValues[8][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } // 设置第二位数码管显示数字0 GPIO_ResetBits(GPIOC, digitPins[1]); // 先选中第二位数码管 for (int i = 0; i < 4; i++) { if (digitValues[0][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } }
// 设置第三位数码管显示数字5 GPIO_ResetBits(GPIOC, digitPins[2]); // 先选中第三位数码管 for (int i = 0; i < 4; i++) { if (digitValues[5][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } // 设置第四位数码管显示数字1 GPIO_ResetBits(GPIOC, digitPins[3]); // 先选中第四位数码管 for (int i = 0; i < 4; i++) { if (digitValues[1][i]) { GPIO_SetBits(GPIOC, GPIO_Pin_0 + i); // 开启该位数码管的对应段 } else { GPIO_ResetBits(GPIOC, GPIO_Pin_0 + i); // 关闭该位数码管的对应段 } } while (1); return 0;}