本帖最后由 AllBlue 于 2013-9-2 08:30 编辑
驱动4位数码管
之前教大家使用过数码管显示0~9数字,今天我们要使用一个4位数码管做个实验。 所使用的实验元件: UNO控制板 一块
4位数码管 一个 限流电阻 220欧姆 八个
导线若干 首先,我们要认识一下4位数码管,我手中的数码管标的是XD3641BS,可以参照一下下面的引脚含义图(图为佳美光电电子有限公司数码管命名规则,适用于大部分数码管,但是由于厂商太多命名规则也相对杂乱。):
由上图可知,我手中的数码管为4位共阳极数码管的,其他参数对我们来说不太重要,大家有兴趣可以看下。 下面我们就了解下数码管的引脚功能,我们看下图:
图中我们可以知道,将数码管正对着我们,左下角为第一脚,逆时针分别为1~12引脚,其中12、9、8、6为公共脚。 为了更方便的控制4位数码管,我们从网上找到了数码管的库文件:
连接示意图:
连接方法我列出了如下表格: 公共极:
Arduino引脚号 | 数码管引脚号 | 5 | 6(个位) | 4 | 8(十位) | 3 | 9(百位) | 2 | 12(千位) | 其他引脚(要使用限流电阻):
Arduino引脚号 | 数码管引脚号 | 6 | A (11) | 7 | B (7) | 8 | C (4) | 9 | D (2) | 10 | E (1) | 11 | F (10) | 12 | G (5) | 13 | DP (3) |
将电路连接好之后,运行如下程序: - #include "SevSeg.h"
- //Create an instance of the object.
- SevSeg sevseg;
- //Create global variables
- unsigned long timer;
- int CentSec=0;
- void setup() {
- //I am using a common anode display, with the digit pins connected
- //from 2-5 and the segment pins connected from 6-13
- sevseg.Begin(1,2,3,4,5,6,7,8,9,10,11,12,13);
- timer=millis();
- }
- void loop() {
- //Produce an output on the display
- sevseg.PrintOutput();
- //Check if 10ms has elapsed
- unsigned long mils=millis();
- if (mils-timer>=10) {
- timer=mils;
- CentSec++;
- if (CentSec==10000) { // Reset to 0 after counting for 100 seconds.
- CentSec=0;
- }
- //Update the number to be displayed, with a decimal
- //place in the correct position.
- sevseg.NewNum(CentSec,(byte) 2);
- }
- }
复制代码运行程序后,显示效果为秒表,能计数99秒!!!用户还可以使用按钮来控制秒表~~~
|