浏览量: 38 次浏览

arduino 数码管使用

2020年2月2日 0 作者 Nie Hen

数码管是一个很常用也很常见的器件,在一些应用场景下显示一些特定的数值来传达一些信息
下面讲一下TM1637以及普通数码管在arduino中的使用

数码管我所知道的有两种
– 有一种 是封装了一下 有个计数器控制只有四个引脚的数码管(如TM1637)
– 另一种是是所有引脚都给出来的数码管

TM1637

enter description here
使用库文件 SevenSegmentTM1637.h
用于控制基于TM163x的7段显示模块

  • 下载链接下载后 将所有文件放在的目录xxxx/libraries/SevenSegmentTM1637/中
  • 也可以在arduino IDE中搜索安装
连接电路

enter description here

基本使用方法

SevenSegmentTM1637(clkPin, dioPin)创建一个显示对象
init() 初始化显示
print(value) 将任何内容打印到显示屏上(例如,字符串,数字..)
clear() 清除显示(并重置光标)
home() 重置光标
setCursor(row, col) 将光标设置到指定位置
setBacklight(value) 设置显示屏的亮度
on() 打开显示屏(将亮度设置为默认值)
off() 关闭显示屏(将亮度设置为零)
blink() 闪烁显示屏上显示的内容
setColonOn(bool) 将冒号设置在显示的中间
setPrintDelay(time) 设置打印四个以上字符时的延迟

参考链接

数码管原理

stm32的时候学过这个 所以原理还是大概了解的
就是看原理图 写出段码 来控制

原理图

我们使用数码管型号是msqc6412c-3749ke (非常的不好找)
最终从淘宝商家那里找到了原理图
enter description here

按照原理图连接电路,可以先在面包板上把练好线。然后根据代码中使用的GPIO口再进行连线。

arduino控制数码管

(第一种)
共阳极
参考代码


int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h int pinWei = 10; void setup() { for(int x=0; x<4; x++) { pinMode(pinWei+x, OUTPUT); //设置各脚为输出状态 digitalWrite(pinWei+x, HIGH);// } for(int x=0; x<8; x++) { pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态 } } //在数码管中显示数字的函数 void displayDigit(unsigned char digit) { //定义一个数组表:不同数字的abcdefgh各段的取值 unsigned char abcdefgh[][8] = { {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 {1,1,1,0,1,1,1,0}, //A {0,0,1,1,1,1,1,0}, //b {1,0,0,1,1,1,0,0}, //C {0,1,1,1,1,0,1,0}, //d {1,0,0,1,1,1,1,0}, //E {1,0,0,0,1,1,1,0}, //F {0,0,0,0,0,0,0,1}, //DOT = 16 {0,0,0,0,0,0,0,0}, //BLANK = 17 {1,1,1,1,1,1,1,1}, //MINUS= 18 }; if ( digit > 18 ) return; for (unsigned char x=0; x<8; x++) digitalWrite( pinDigitron + x, !abcdefgh[digit][x] ); } //在指定的位,显示指定的数字 void display(unsigned char wei, unsigned char digit) { #define BLANK 17 for(int x=0; x<4; x++) { if ( x != wei- 1) digitalWrite(pinWei + x, LOW); } displayDigit(BLANK);//擦除 digitalWrite(pinWei + wei- 1 , HIGH);//位选 delay(1); displayDigit(digit);//显示数字 delay(3); } void loop() { display(1, 1);//在第1位显示数字3 display(2, 7);//在第2位显示数字2 display(3, 2);//在第3位显示数字 b display(4, 18);//在第4位显示数字 F }

遇到的第一个问题 亮度太小
最初怀疑数码管坏了或者是arduino提供电流小。
但是换太麻烦了,就试试把电阻换了下来,果然是电阻的问题。
虽然是1k的电阻但是还是影响电流,应该是内部有电阻。

参考代码
参考代码是共阴极,然后改了一下,我用的是共阳极数码管。

enter description here
最终上传显示就可以了。