114 lines
2.2 KiB
C++
114 lines
2.2 KiB
C++
/*Max7219_digitalLED
|
||
数码管驱动
|
||
驱动使用
|
||
引脚连接: 数据线 DI: 时钟线 CLK: 片选线 CS:
|
||
1、调用begin(brightness)初始化,参数brightness为亮度值:0-15
|
||
2、调用displayDigital(int val)可显示一个整数。
|
||
调用displayDigital(float val)可显示浮点数(带小数点)。
|
||
调用displayDigital(long val)可显示长整型数。
|
||
调用displayDigital(int val, int digital)。可显示单个数位
|
||
3、调用clearDisplay()可清除数码管。
|
||
*/
|
||
|
||
#include "DuinoplusDigitalLED.h"
|
||
|
||
DigitalLED::DigitalLED(uint16_t pinCs, uint16_t pinData, uint16_t pinClk) : Max7219(pinCs, pinData, pinClk, 1)
|
||
{
|
||
CS = pinCs;
|
||
DI = pinData;
|
||
CLK = pinClk;
|
||
pinMode(CS, OUTPUT);
|
||
pinMode(DI, OUTPUT);
|
||
pinMode(CLK, OUTPUT);
|
||
}
|
||
|
||
void DigitalLED::begin(uint8_t brightness)
|
||
{
|
||
shutdown(false);
|
||
setIntensity(brightness); //亮度
|
||
clearDisplay();
|
||
}
|
||
void DigitalLED::displayDigital(int val)
|
||
{
|
||
int ones, tens, hundreds, thousands;
|
||
int tmp;
|
||
|
||
tmp = val;
|
||
ones = tmp % 10;
|
||
tens = (tmp / 10) % 10;
|
||
hundreds = (tmp / 100) % 10;
|
||
thousands = tmp / 1000;
|
||
|
||
clearDisplay();
|
||
setDigit(0, 0, ones, 0);
|
||
if (val >= 10)
|
||
{
|
||
setDigit(0, 1, tens, 0);
|
||
if (val >= 100)
|
||
{
|
||
setDigit(0, 2, hundreds, 0);
|
||
if (val >= 1000)
|
||
setDigit(0, 3, thousands, 0);
|
||
}
|
||
}
|
||
}
|
||
void DigitalLED::displayDigital(uint8_t val)
|
||
{
|
||
int temp;
|
||
temp = (int)val;
|
||
displayDigital(temp);
|
||
}
|
||
void DigitalLED::displayDigital(uint32_t val)
|
||
{
|
||
int temp;
|
||
temp = (int)val;
|
||
displayDigital(temp);
|
||
}
|
||
void DigitalLED::displayDigital(long val)
|
||
{
|
||
int temp;
|
||
temp = (int)val;
|
||
displayDigital(temp);
|
||
}
|
||
void DigitalLED::displayDigital(float val)
|
||
{
|
||
int ones, tens, hundreds, thousands;
|
||
int tmp;
|
||
boolean tensPoint = 0;
|
||
|
||
if (val > 0)
|
||
tensPoint = 1;
|
||
tmp = (int)(val * 10);
|
||
ones = tmp % 10;
|
||
tens = (tmp / 10) % 10;
|
||
hundreds = (tmp / 100) % 10;
|
||
thousands = tmp / 1000;
|
||
|
||
clearDisplay();
|
||
setDigit(0, 0, ones, 0);
|
||
setDigit(0, 1, tens, tensPoint);
|
||
if (val >= 10)
|
||
{
|
||
setDigit(0, 2, hundreds, 0);
|
||
if (val >= 100)
|
||
setDigit(0, 3, thousands, 0);
|
||
}
|
||
}
|
||
|
||
void DigitalLED::displayDigital(double val)
|
||
{
|
||
float temp;
|
||
temp = (float)val;
|
||
displayDigital(temp);
|
||
}
|
||
|
||
void DigitalLED::displayDigital(int num, int data, boolean point)
|
||
{
|
||
if (!(data < 0) || !(data > 9))
|
||
{
|
||
setDigit(0, num - 1, data, point);
|
||
}
|
||
}
|
||
|
||
|