数码管段选码表,你值得get

单片机接法为:Px.0~Px.7——a~h

  • 共阴数码管段选表,无小数点:

unsigned char code distab[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  • 共阴数码管段选表,有小数点:

unsigned char code distab[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

  • 共阳数码管段选码表,无小数点:

unsigned char code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

  • 共阳数码管段选码表,有小数点:

unsigned char code distab[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

STM32控制数码管通常需要对每一位(称为位选)和每一(称为段选)分别进行操作。这里是一个基本的示例,假设我们使用GPIO作为数码管的数据线和位/段选择信号: ```c #include "stm32f10x.h" // 包含STM32的头文件 // 数码管的配置 #define LCD_RS GPIO_Pin_0 // 段选信号,连接到数码管的RS引脚 #define LCD_D4 GPIO_Pin_1 // 数据线D4 #define LCD_D5 GPIO_Pin_2 #define LCD_D6 GPIO_Pin_3 #define LCD_D7 GPIO_Pin_4 #define LCD_A0 GPIO_Pin_5 // 位选A0 #define LCD_A1 GPIO_Pin_6 #define LCD_A2 GPIO_Pin_7 // 初始化函数 void LCD_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); // 启动GPIOA和GPIOB时钟 GPIO_InitStructure.GPIO_Pin = LCD_RS | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7 | LCD_A0 | LCD_A1 | LCD_A2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } // 显示某一位 void LCD送出一位(uint8_t digit) { for(int i = 0; i < 8; ++i) { // 8位数码管,从左到右 if(digit & (1 << i)) { // 如果第i位为1,则点亮对应的LED GPIO_SetBits(GPIOA, LCD_D4 + (LCD_A0 * 8) + i); // D4-D7分别对应A0-A7的组合 } else { GPIO_ResetBits(GPIOA, LCD_D4 + (LCD_A0 * 8) + i); } } } // 功能函数,设置显示数字和位置 void LCD_Display(uint8_t num, uint8_t pos) { LCD_Init(); // 先初始化 // 位选 GPIO_ResetBits(GPIOA, LCD_A0 | LCD_A1 | LCD_A2); if(pos == 0) { // 高位(最左边) GPIO_SetBits(GPIOA, LCD_A2); } else if(pos == 1) { GPIO_SetBits(GPIOA, LCD_A1); } else { // 中低位 GPIO_SetBits(GPIOA, LCD_A0); } // 段选 switch(num) { // 根据数字显示不同的 case '0': LCD送出(0b00000111); // 显示数字0 break; // 添加其他数字的处理... } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值