嵌入式

Arduino 数码管

2022-07-01  本文已影响0人  Charles2018

数码管参考

一位数码管 四位数码管

实验一

通过调节电位器(RP)在一位数码管上显示0~9的数字

电路图.jpg

代码

#include<SevSeg.h>

SevSeg sevseg;
byte numDigits = 1;
// 数码管公共引脚接Arduino引脚
byte digitPins[] = { 12,1,1,1 };
// 数码管段码a、b、c、d、e、f、g、h对应的Arduino主板引脚
byte segmentPins[] = { PD3,PD4,5,6,7,8,9,10};
// 共阳极数码管
byte hardwareConfig = COMMON_ANODE;
void setup()
{
    // 初始化数码管
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins);
}

void loop()
{
    int val = analogRead(PIN_A0);             // 读取电位器模拟值
    int numToShow = map(val, 0, 1023, 0, 9);  // 将0~1023之间的数字映射成0~9之间的数字
    sevseg.setNumber(numToShow,-1);   // 数码管显示数据
    sevseg.refreshDisplay();                  // 刷新显示
}

演示


演示.jpg

重点说明sevseg.setNumber(numToShow,decPlaces);数码管显示函数 numToShow;要显示的数据可以是整数,浮点数。 decPlaces; 小数点显示的位置从最低有效位开始计算,若省略或设置为-1,则表示不显示小数点。

实验二

自动增减数字并在一位数码管上显示。

代码

#include<SevSeg.h>

SevSeg sevseg;
byte numDigits = 1;
// 数码管公共引脚接Arduino引脚
byte digitPins[] = { 12,1,1,1 };
// 数码管段码a、b、c、d、e、f、g、h对应的Arduino主板引脚
byte segmentPins[] = { PD3,PD4,5,6,7,8,9,10};
// 共阳极数码管
byte hardwareConfig = COMMON_ANODE;
void setup()
{
    // 初始化数码管
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins);
}

int numToShow, count;
void loop()
{
    count++;
    // 通过变量自增来达到自增效果,
    // 如果使用delay来实现延时则会打断数码管显示
    if (count == 5000)
    {
        count = 0;
        numToShow++;
    }
    if (numToShow > 9)
    {
        numToShow = 0;
    }
    
    // 仅显示数字不显示小数点
    sevseg.setNumber(numToShow,-1);
    sevseg.refreshDisplay();
}

实验三

记录按键次数并在4位数码管上显示。

电路图.jpg

代码

#include<SevSeg.h>

SevSeg sevseg;
int button = 11;
byte numDigits = 4; // 数码管数
byte digitPins[] = { A1,A2,A3,A4 };         // 数码管公共极
byte segmentPins[] = { 3,4,5,6,7,8,9,10 };  // 数码管段码a,b,c,d,e,f,g,h对应的引脚
byte hardwareConfig = COMMON_ANODE;         // 共阳极数码管

int numToShow;
void setup()
{
    pinMode(button, INPUT_PULLUP);
    // 初始化数码管
    sevseg.begin(hardwareConfig,numDigits,digitPins,segmentPins);
}

void loop()
{
    if (digitalRead(button) == LOW)
    {
        delay(20);
        if (digitalRead(button) == LOW)
        {
            numToShow++;
            while (digitalRead(button) == LOW);
        }
    }
    if (numToShow > 9999)
    {
        numToShow = 0;
    }
    sevseg.setNumber(numToShow,-1);
    sevseg.refreshDisplay();
}

演示


演示.jpg

程序解密
byte digitPins[] = { 15,16,17,18 };是数码管公共极连接引脚 数码管位码选取的是四个模拟接口模拟接口也可以当作数字代替只不过15对应的是A1、16对应A2依次类推。学过C/C++的伙计们 应该很好理解在Arduino库代码中实际上就是个宏定义#define A0 15像这样

上一篇 下一篇

猜你喜欢

热点阅读