数码管动态显示



蓝桥杯开发板原理图

图1
对硬件基础知识可参考前文:蓝桥杯单片机组硬件原理


一、实验原理

数码管
7段显示译码器是纯组合电路,一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如上图所示。

设输入的4位码为A[3:0],不考虑表示小数点的发光管,输出控制7段共阳数码管的7位数据为LED7S[6:0],输出信号LED7S的7位分别接上图(b)中共阳数码管的7个段,控制端置0使数码管点亮,控制端置1使数码管不亮。

字型输入Agfedcba
000001000000
100011111001
200100100100
300110110000
401000011001
501010010010
601100000010
701111111000
810000000000
910010010000
A10100001000
B10110000011
C11001000110
D11010000110
E11100001110
F11111000000

高位在左,低位在右,例如当LED7S输出“0010010”时,数码管的7个段g、f、e、d、c、b、a分别接0、0、1、0、0、1、0;接有低电平的段发亮,如下图2所示,于是数码管显示“5”.
5

1.共阳极数码管编码表:

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

2.共阴极数码管编码表:

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

二、蓝桥杯数码管

共阳接法-高电平是暗、低电平是亮hgfedcba-显示C则11000110*0xc6

代码如下(示例):

uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
uchar code dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uchar shu[8] = {0,0,0,0,11,11,11,11};
uchar num;

void display(void)
{
    P2 = (P2&0x1f|0xe0);P0 = 0xff;P2 &= 0x1f; //数码管消隐
    P2 = (P2 & 0x1f|0xc0);
    P0 = (1<<num);P2 &= 0x1f; //位选控制
    P2 = (P2 & 0x1f|0xe0);
    P0 = tab[shu[num]];P2 &= 0x1f; //段选输入
    num++;if(num==8)num=0;
}

void timer0() interrupt 1
{
	display();
}

注:后面加using 1会报错


总结

后续再对数码管基本原理进行补充,本文主要针对蓝桥杯重点知识论述,如有疑问可联系小编^ o_o ^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你有一个 4 数码管共阴极的 C 语言代码,要将它改成 4 数码管共阳极的代码,你需要做以下几个步骤: 1. 将共阴极改成共阳极 共阴极的数码管是在数字显示时将某一的引脚拉低(接地),这样这一就会亮起来。而共阳极的数码管则是在数字显示时将某一的引脚拉高(接电源),这样这一就会亮起来。因此,你需要将原来的共阴极数码管改为共阳极数码管,即将原来连接到 GND 的引脚改为连接到 VCC。 2. 改变数码管的驱动方式 共阴极的数码管在显示数字时需要将某一的引脚拉低,其他的引脚保持高电平。而共阳极的数码管则需要将某一的引脚拉高,其他的引脚保持低电平。因此,你需要将原来的数码管驱动方式改为共阳极数码管的驱动方式。 下面是一个将 4 数码管共阴极的 C 语言代码改为共阳极的示例: ```c #include <stdio.h> #include <wiringPi.h> //定义每个数字的段码 const int SEGMENTS[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1}, // 2 {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 1}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 {1, 1, 1, 0, 0, 0, 0}, // 7 {1, 1, 1, 1, 1, 1, 1}, // 8 {1, 1, 1, 1, 0, 1, 1} // 9 }; //定义每个数码管的引脚 const int PINS[4][7] = { {0, 1, 2, 3, 4, 5, 6}, // 第一数码管 {7, 8, 9, 10, 11, 12, 13}, // 第二数码管 {14, 15, 16, 17, 18, 19, 20}, // 第三数码管 {21, 22, 23, 24, 25, 26, 27} // 第四数码管 }; void setup() { //初始化 GPIO 引脚 wiringPiSetup(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { pinMode(PINS[i][j], OUTPUT); } } } void loop() { //显示 1234 showDigit(1, 2); showDigit(2, 3); showDigit(3, 4); showDigit(4, 0); } void showDigit(int digit, int number) { //设置每个数码管的段码 for (int i = 0; i < 7; i++) { digitalWrite(PINS[digit - 1][i], !SEGMENTS[number][i]); } //设置要显示的数码管的引脚为高电平 digitalWrite(PINS[digit - 1][6], HIGH); } ``` 这个程序使用了树莓派的 GPIO 引脚和常见的共阳极数码管来实现。程序定义了每个数字的段码和每个数码管的引脚,然后通过循环设置每个数码管的段码来显示一个四数。在 `loop()` 函数中,程序显示了数字 1234,你可以根据需要修改这个数字来显示其他的数字。在 `showDigit()` 函数中,程序设置要显示的数码管的引脚为高电平(原来是低电平),这样这一就会亮起来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诊断协议那些事儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值