一些必备的电路知识

学过 STM,51单片机 ,嵌入式系统开发,但还是记不住一些必备的电路知识,每次应用的时候都得东查西查一遍。目前正在学 Arduino 简单的硬件开发,趁此机会,把一些必备的电路知识汇总记录一下。

上拉电阻的作用

什么是上拉电阻?上拉电阻就是将一个不稳定的(高或低电平)信号,通过一个电阻与电源 VCC 相接,将其固定在高电平。通常用于有按键的场景。上拉电阻的作用是让不稳定的高电平保持稳定,从而可以正确的读取状态并控制电路的其他部分。 与上拉电阻对应的还有下拉电阻。相反地,下拉电阻的一端接的是 GND ,使信号固定在低电平。

共阳极与共阴极数码管

如下动图所示,总共有 7 段 LED 用于显示数字或字母的电子元件称为 7 段数码管,有时候右下角会包含显示小数点的一点 LED ,所以通常也称为 8 段数码管。

来自维基百科摘录的动图

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

共阳极数码管

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

共阴极数码管

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

摘自维基百科

  • 示例代码
/*
 * 驱动一个共阳极的数码管,显示数字 0~9 
 */

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

// 根据共阳极/共阴极数码管段码表,定义 0~9 显示的各段开关状态
int numTable[10][8]={
  // 共阳极数码管段码,将共极接 Vcc(5v/3.3v)
  // 0 为点亮,1 为关闭
  // a  b  c  d  e  f  g  dp
  {0, 0, 0, 0, 0, 0, 1, 1},     // 0
  {1, 0, 0, 1, 1, 1, 1, 1},     // 1
  {0, 0, 1, 0, 0, 1, 0, 1},     // 2
  {0, 0, 0, 0, 1, 1, 0, 1},     // 3
  {1, 0, 0, 1, 1, 0, 0, 1},     // 4
  {0, 1, 0, 0, 1, 0, 0, 1},     // 5
  {0, 1, 0, 0, 0, 0, 0, 1},     // 6
  {0, 0, 0, 1, 1, 1, 1, 1},     // 7
  {0, 0, 0, 0, 0, 0, 0, 1},     // 8
  {0, 0, 0, 0, 1, 0, 0, 1},     // 9

  
  // 共阴极数码管段码,将共极接 GND 
  // 1 为点亮,0 为关闭
  // a  b  c  d  e  f  g  dp
  //{1, 1, 1, 1, 1, 1, 0, 0},     // 0
  //{0, 1, 1, 0, 0, 0, 0, 0},     // 1
  //{1, 1, 0, 1, 1, 0, 1, 0},     // 2
  //{1, 1, 1, 1, 0, 0, 1, 0},     // 3
  //{0, 1, 1, 0, 0, 1, 1, 0},     // 4
  //{1, 0, 1, 1, 0, 1, 1, 0},     // 5
  //{1, 0, 1, 1, 1, 1, 1, 0},     // 6
  //{1, 1, 1, 0, 0, 0, 0, 0},     // 7
  //{1, 1, 1, 1, 1, 1, 1, 0},     // 8
  //{1, 1, 1, 1, 0, 1, 1, 0},     // 9
};

  
void setup() {
  // 设置 4~11 引脚为输出模式
  for (int i=4; i<=11; i++){
    pinMode(i, OUTPUT);
    }
}

void loop() {
  // 依次显示 0~9 
  for(int i=0; i < 10; i++){
    digitalWrite(pin_a, numTable[i][0]);
    digitalWrite(pin_b, numTable[i][1]);
    digitalWrite(pin_c, numTable[i][2]);
    digitalWrite(pin_d, numTable[i][3]);
    digitalWrite(pin_e, numTable[i][4]);
    digitalWrite(pin_f, numTable[i][5]);
    digitalWrite(pin_g, numTable[i][6]);
    digitalWrite(pin_p, numTable[i][7]);
    delay(500);
    }
   delay(200);
  // 依次显示 9~0
  for(int i=9; i > 0; i--){
    digitalWrite(pin_a, numTable[i][0]);
    digitalWrite(pin_b, numTable[i][1]);
    digitalWrite(pin_c, numTable[i][2]);
    digitalWrite(pin_d, numTable[i][3]);
    digitalWrite(pin_e, numTable[i][4]);
    digitalWrite(pin_f, numTable[i][5]);
    digitalWrite(pin_g, numTable[i][6]);
    digitalWrite(pin_p, numTable[i][7]);
    delay(500);
    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券