学过 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);
}
}