YFROBOT创客社区
标题: Arduino入门教程—基础实验篇九 数码管显示实验 [打印本页]
作者: AllBlue 时间: 2013-6-9 08:40
标题: Arduino入门教程—基础实验篇九 数码管显示实验
本帖最后由 AllBlue 于 2013-8-15 20:16 编辑
数码管显示实验 废话不多说,今天我们用数码管做一个数字显示实验!
首先我们看下我们要用到的实验元件:
UNO 实验套装(UNO兼容板一块、USB数据线一根、优质面包板一块、彩色面包板线若干)
共阳极一位数码管 一枚
电阻220Ω 八枚
数码管也称LED 数码管,是一种半导体发光器件,其基本单位是发光二极管。按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1 位、2 位、4 位、7 位等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
下图为本次实验所用数码管:
[attach]481[/attach]
LG5611BH,根据资料中命名规则可以得知,LG 公司名,56 表示0.56 英寸,1 表示1 位,1 为模具号,B 为共阳,H 为高亮红。
共阳极就是把所有LED 的阳极连接到共同接点com也就是公共极这里的3、8都是公共极,而每个LED的阴极分别为a、b、c、d、e、f、g 及dp(小数点)。如下图:
[attach]353[/attach]
数码管在应用中应注意如下几点:
a、段及小数点都要上加限流电阻(这是为了使得数码管的显示亮度一样,有的人会在公共极上加一个电阻,那样的话,虽然8个LED亮度相同,但数字2和数字8的亮度就不同了,因为他们点亮的个数不同);
b、使用电压:根据发光颜色决定;
c、使用电流:静态总电流80mA(每段10mA);动态平均电流4-5mA 峰值电流100mA。
介绍完数码管,我们看下电路图(电路布线有点多,但是只要仔细点,对大家来说还是小意思的):
[attach]482[/attach]
实验例程:
- /*
- 数码管显示
- 数码管连续显示1~9
- */
- //设置控制各段的数字IO脚
- int a=7;
- int b=6;
- int c=5;
- int d=11;
- int e=10;
- int f=8;
- int g=9;
- int dp=4;
- //显示数字1
- void digital_1()
- {
- unsigned char j;
- digitalWrite(c,LOW); //给数字5引脚低电平,点亮c段
- digitalWrite(b,LOW); //点亮b段
- for(j=7;j<=11;j++) //熄灭其余段
- digitalWrite(j,HIGH);
- digitalWrite(dp,HIGH); //熄灭小数点DP段
- }
- //显示数字2
- void digital_2()
- {
- unsigned char j;
- digitalWrite(b,LOW);
- digitalWrite(a,LOW);
- for(j=9;j<=11;j++)
- digitalWrite(j,LOW);
- digitalWrite(dp,HIGH);
- digitalWrite(c,HIGH);
- digitalWrite(f,HIGH);
- }
- //显示数字3
- void digital_3()
- {
- unsigned char j;
- digitalWrite(g,LOW);
- digitalWrite(d,LOW);
- for(j=5;j<=7;j++)
- digitalWrite(j,LOW);
- digitalWrite(dp,HIGH);
- digitalWrite(f,HIGH);
- digitalWrite(e,HIGH);
- }
- //显示数字4
- void digital_4()
- {
- digitalWrite(c,LOW);
- digitalWrite(b,LOW);
- digitalWrite(f,LOW);
- digitalWrite(g,LOW);
- digitalWrite(dp,HIGH);
- digitalWrite(a,HIGH);
- digitalWrite(e,HIGH);
- digitalWrite(d,HIGH);
- } //显示数字5
- void digital_5()
- {
- unsigned char j;
- for(j=7;j<=9;j++)
- digitalWrite(j,LOW);
- digitalWrite(c,LOW);
- digitalWrite(d,LOW);
- digitalWrite(dp,HIGH);
- digitalWrite(b,HIGH);
- digitalWrite(e,HIGH);
- }
- //显示数字6
- void digital_6()
- {
- unsigned char j;
- for(j=7;j<=11;j++)
- digitalWrite(j,LOW);
- digitalWrite(c,LOW);
- digitalWrite(dp,HIGH);
- digitalWrite(b,HIGH);
- }
- //显示数字7
- void digital_7()
- {
- unsigned char j;
- for(j=5;j<=7;j++)
- digitalWrite(j,LOW);
- digitalWrite(dp,HIGH);
- for(j=8;j<=11;j++)
- digitalWrite(j,HIGH);
- }
- //显示数字8
- void digital_8()
- {
- unsigned char j;
- for(j=5;j<=11;j++)
- digitalWrite(j,LOW);
- digitalWrite(dp,HIGH);
- }
- //显示数字9
- void digital_9()
- {
- unsigned char j;
- for(j=5;j<=9;j++)
- digitalWrite(j,LOW);
- digitalWrite(e,HIGH);
- digitalWrite(dp,HIGH);
- }
- void setup() {
- int i;//定义发量
- for(i=4;i<=11;i++)
- pinMode(i,OUTPUT); //设置4~11引脚为输出模式
- }
- void loop()
- {
- while(1)
- {
- digital_1();//数字1
- delay(1000);//延时2s
- digital_2(); //数字2
- delay(1000); //延时2s
- digital_3(); //数字3
- delay(1000); //延时2s
- digital_4(); //数字4
- delay(1000); //延时2s
- digital_5(); //数字5
- delay(1000);//延时2s
- digital_6(); //数字6
- delay(1000); //延时2s
- digital_7(); //数字7
- delay(1000); //延时2s
- digital_8(); //数字8
- delay(1000);//延时2s
- digital_9(); //数字9
- delay(1000);//延时2s
- }
- }
复制代码将程序上传到UNO控制板中,可以看到数码管依次显示数字1~9!
程序有点繁琐,下面我们提供另一种显示程序,简化版:
- /*
- 数码管显示
- 数码管连续循环显示0~9
- */
- byte DIGITAL_DISPLAY[10][8] = { //设置0-9数字所对应数组
- { 1,0,0,0,0,1,0,0 }, // = 0
- { 1,0,0,1,1,1,1,1 }, // = 1
- { 1,1,0,0,1,0,0,0 }, // = 2
- { 1,0,0,0,1,0,1,0 }, // = 3
- { 1,0,0,1,0,0,1,1 }, // = 4
- { 1,0,1,0,0,0,1,0 }, // = 5
- { 1,0,1,0,0,0,0,0 }, // = 6
- { 1,0,0,0,1,1,1,1 }, // = 7
- { 1,0,0,0,0,0,0,0 }, // = 8
- { 1,0,0,0,0,0,1,0 } // = 9
- };
- void setup() { //设定4-11号数字端口为输出
- for(int i=4;i<=11;i++){
- pinMode(i, OUTPUT);
- }
- }
- void loop() {
- //0-9数字显示
- for (int k = 0; k < 10; k++) {
- int pin = 4;
- for (int s = 0; s < 8; s++)
- {
- digitalWrite(pin, DIGITAL_DISPLAY[k][s]);
- pin++;
- }
- delay(1000);
- }
- }
复制代码这个程序相对上面那个很简单了,它通过定义一个数组,来控制数码管每个led的亮灭来显示数字!同样将它上传到控制板中,看看效果吧!
作者: ziwei590 时间: 2018-6-1 07:40
牛叉的教程,我喜欢,这种基础扎实的干货
作者: tiantianyouyou 时间: 2019-5-1 20:42
Arduino入门教程—基础实验篇九 数码管显示实验
作者: lucq7896 时间: 2019-7-16 08:44
对新手很有用
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) |
Powered by Discuz! X3.1 |