[应用方案] 必备的电路知识

[复制链接]
120|1
lzbf 发表于 2025-11-29 19:12 | 显示全部楼层 |阅读模式
上拉电阻的作用
什么是上拉电阻?上拉电阻就是将一个不稳定的(高或低电平)信号,通过一个电阻与电源 VCC 相接,将其固定在高电平。通常用于有按键的场景。上拉电阻的作用是让不稳定的高电平保持稳定,从而可以正确的读取状态并控制电路的其他部分。 与上拉电阻对应的还有下拉电阻。相反地,下拉电阻的一端接的是 GND ,使信号固定在低电平。
共阳极与共阴极数码管如下动图所示,总共有 7 段 LED 用于显示数字或字母的电子元件称为 7 段数码管,有时候右下角会包含显示小数点的一点 LED ,所以通常也称为 8 段数码管。






来自维基百科摘录的动图
8 段数码管分为共阴极和共阳极数码管。共阳极数码管的正极为所有发光二极管的共有正极,其他接点接负极。从下图中可以看出,当引脚为 0 时,二极管点亮;当引脚为 1 时,二极管不亮。






共阳极数码管
共阴极数码管的阴极为所有发光二极管的共有阴极,其他接点接正极。从下图可以看出,当引脚为 1 时,二极管点亮;当引脚为 0 时,二极管不亮。






共阴极数码管
下图是关于数码管各引脚的定义,需要显示什么数字只要把对应的引脚定义好就可以。但需要注意的是,共阳极与共阴极数码管的段码是不一样的。




  1. /*
  2. * 驱动一个共阳极的数码管,显示数字 0~9
  3. */

  4. // 设定控制各段的数字引脚
  5. int pin_a = 7;
  6. int pin_b = 6;
  7. int pin_c = 5;
  8. int pin_d = 10;
  9. int pin_e = 11;
  10. int pin_f = 8;
  11. int pin_g = 9;
  12. int pin_p = 4;

  13. // 根据共阳极/共阴极数码管段码表,定义 0~9 显示的各段开关状态
  14. int numTable[10][8]={
  15.   // 共阳极数码管段码,将共极接 Vcc(5v/3.3v)
  16.   // 0 为点亮,1 为关闭
  17.   // a  b  c  d  e  f  g  dp
  18.   {0, 0, 0, 0, 0, 0, 1, 1},     // 0
  19.   {1, 0, 0, 1, 1, 1, 1, 1},     // 1
  20.   {0, 0, 1, 0, 0, 1, 0, 1},     // 2
  21.   {0, 0, 0, 0, 1, 1, 0, 1},     // 3
  22.   {1, 0, 0, 1, 1, 0, 0, 1},     // 4
  23.   {0, 1, 0, 0, 1, 0, 0, 1},     // 5
  24.   {0, 1, 0, 0, 0, 0, 0, 1},     // 6
  25.   {0, 0, 0, 1, 1, 1, 1, 1},     // 7
  26.   {0, 0, 0, 0, 0, 0, 0, 1},     // 8
  27.   {0, 0, 0, 0, 1, 0, 0, 1},     // 9

  28.   
  29.   // 共阴极数码管段码,将共极接 GND
  30.   // 1 为点亮,0 为关闭
  31.   // a  b  c  d  e  f  g  dp
  32.   //{1, 1, 1, 1, 1, 1, 0, 0},     // 0
  33.   //{0, 1, 1, 0, 0, 0, 0, 0},     // 1
  34.   //{1, 1, 0, 1, 1, 0, 1, 0},     // 2
  35.   //{1, 1, 1, 1, 0, 0, 1, 0},     // 3
  36.   //{0, 1, 1, 0, 0, 1, 1, 0},     // 4
  37.   //{1, 0, 1, 1, 0, 1, 1, 0},     // 5
  38.   //{1, 0, 1, 1, 1, 1, 1, 0},     // 6
  39.   //{1, 1, 1, 0, 0, 0, 0, 0},     // 7
  40.   //{1, 1, 1, 1, 1, 1, 1, 0},     // 8
  41.   //{1, 1, 1, 1, 0, 1, 1, 0},     // 9
  42. };

  43.   
  44. void setup() {
  45.   // 设置 4~11 引脚为输出模式
  46.   for (int i=4; i<=11; i++){
  47.     pinMode(i, OUTPUT);
  48.     }
  49. }

  50. void loop() {
  51.   // 依次显示 0~9
  52.   for(int i=0; i < 10; i++){
  53.     digitalWrite(pin_a, numTable[i][0]);
  54.     digitalWrite(pin_b, numTable[i][1]);
  55.     digitalWrite(pin_c, numTable[i][2]);
  56.     digitalWrite(pin_d, numTable[i][3]);
  57.     digitalWrite(pin_e, numTable[i][4]);
  58.     digitalWrite(pin_f, numTable[i][5]);
  59.     digitalWrite(pin_g, numTable[i][6]);
  60.     digitalWrite(pin_p, numTable[i][7]);
  61.     delay(500);
  62.     }
  63.    delay(200);
  64.   // 依次显示 9~0
  65.   for(int i=9; i > 0; i--){
  66.     digitalWrite(pin_a, numTable[i][0]);
  67.     digitalWrite(pin_b, numTable[i][1]);
  68.     digitalWrite(pin_c, numTable[i][2]);
  69.     digitalWrite(pin_d, numTable[i][3]);
  70.     digitalWrite(pin_e, numTable[i][4]);
  71.     digitalWrite(pin_f, numTable[i][5]);
  72.     digitalWrite(pin_g, numTable[i][6]);
  73.     digitalWrite(pin_p, numTable[i][7]);
  74.     delay(500);
  75.     }
  76.    
  77. }





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
qintian0303 发表于 2025-11-29 21:48 | 显示全部楼层
数码管的驱动的话,是不需要加限流电阻?它一般的驱动芯片会根据需要进行输出?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

5720

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
0