只需一步,快速开始
签到天数: 867 天
[LV.10]以坛为家III
废话不多说,今天我们用数码管做一个数字显示实验!
首先我们看下我们要用到的实验元件:
UNO 实验套装(UNO兼容板一块、USB数据线一根、优质面包板一块、彩色面包板线若干)
共阳极一位数码管 一枚
电阻220Ω 八枚
数码管也称LED 数码管,是一种半导体发光器件,其基本单位是发光二极管。按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1 位、2 位、4 位、7 位等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
下图为本次实验所用数码管: 登录/注册后可看大图 数码管1.jpg (70.59 KB, 下载次数: 163) 下载附件 2013-8-15 20:14 上传 LG5611BH,根据资料中命名规则可以得知,LG 公司名,56 表示0.56 英寸,1 表示1 位,1 为模具号,B 为共阳,H 为高亮红。共阳极就是把所有LED 的阳极连接到共同接点com也就是公共极这里的3、8都是公共极,而每个LED的阴极分别为a、b、c、d、e、f、g 及dp(小数点)。如下图: 登录/注册后可看大图 八段数码管.jpg (17.5 KB, 下载次数: 153) 下载附件 2013-6-8 08:28 上传 数码管在应用中应注意如下几点:a、段及小数点都要上加限流电阻(这是为了使得数码管的显示亮度一样,有的人会在公共极上加一个电阻,那样的话,虽然8个LED亮度相同,但数字2和数字8的亮度就不同了,因为他们点亮的个数不同);b、使用电压:根据发光颜色决定;c、使用电流:静态总电流80mA(每段10mA);动态平均电流4-5mA 峰值电流100mA。 介绍完数码管,我们看下电路图(电路布线有点多,但是只要仔细点,对大家来说还是小意思的): 登录/注册后可看大图 数码管.jpg (79.51 KB, 下载次数: 179) 下载附件 2013-8-15 20:15 上传 实验例程:/* 数码管显示 数码管连续显示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的亮灭来显示数字!同样将它上传到控制板中,看看效果吧!
数码管1.jpg (70.59 KB, 下载次数: 163)
下载附件
2013-8-15 20:14 上传
LG5611BH,根据资料中命名规则可以得知,LG 公司名,56 表示0.56 英寸,1 表示1 位,1 为模具号,B 为共阳,H 为高亮红。
共阳极就是把所有LED 的阳极连接到共同接点com也就是公共极这里的3、8都是公共极,而每个LED的阴极分别为a、b、c、d、e、f、g 及dp(小数点)。如下图: 登录/注册后可看大图 八段数码管.jpg (17.5 KB, 下载次数: 153) 下载附件 2013-6-8 08:28 上传 数码管在应用中应注意如下几点:a、段及小数点都要上加限流电阻(这是为了使得数码管的显示亮度一样,有的人会在公共极上加一个电阻,那样的话,虽然8个LED亮度相同,但数字2和数字8的亮度就不同了,因为他们点亮的个数不同);b、使用电压:根据发光颜色决定;c、使用电流:静态总电流80mA(每段10mA);动态平均电流4-5mA 峰值电流100mA。 介绍完数码管,我们看下电路图(电路布线有点多,但是只要仔细点,对大家来说还是小意思的): 登录/注册后可看大图 数码管.jpg (79.51 KB, 下载次数: 179) 下载附件 2013-8-15 20:15 上传 实验例程:/* 数码管显示 数码管连续显示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的亮灭来显示数字!同样将它上传到控制板中,看看效果吧!
八段数码管.jpg (17.5 KB, 下载次数: 153)
2013-6-8 08:28 上传
a、段及小数点都要上加限流电阻(这是为了使得数码管的显示亮度一样,有的人会在公共极上加一个电阻,那样的话,虽然8个LED亮度相同,但数字2和数字8的亮度就不同了,因为他们点亮的个数不同);
b、使用电压:根据发光颜色决定;
c、使用电流:静态总电流80mA(每段10mA);动态平均电流4-5mA 峰值电流100mA。 介绍完数码管,我们看下电路图(电路布线有点多,但是只要仔细点,对大家来说还是小意思的): 登录/注册后可看大图 数码管.jpg (79.51 KB, 下载次数: 179) 下载附件 2013-8-15 20:15 上传 实验例程:/* 数码管显示 数码管连续显示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的亮灭来显示数字!同样将它上传到控制板中,看看效果吧!
数码管.jpg (79.51 KB, 下载次数: 179)
2013-8-15 20:15 上传
将程序上传到UNO控制板中,可以看到数码管依次显示数字1~9!
程序有点繁琐,下面我们提供另一种显示程序,简化版:
这个程序相对上面那个很简单了,它通过定义一个数组,来控制数码管每个led的亮灭来显示数字!同样将它上传到控制板中,看看效果吧!
使用道具 举报
签到天数: 1 天
[LV.1]初来乍到
签到天数: 22 天
[LV.4]偶尔看看III
签到天数: 4 天
[LV.2]偶尔看看I
本版积分规则 发表回复 回帖后跳转到最后一页
|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2 )
GMT+8, 2024-12-4 15:49 , Processed in 1.806902 second(s), 28 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.