数码管实验改成红外控制显示数字 - /*
- 实验器件:
- ocrobot mango控制板(Arduino兼容) 一块
- 面包板跳线 一盒
- 面包板 一块
- 红外接收器 一个
- 红外遥控器 一个
- 一位共阳数码管 一个
- USB数据连接线 一根
- 实验电路:
- 本实验使用的元件是ocrobot mango控制板套件
- 数字针口2至9接共阳数码管,数字针口11接红外接收器VOUT,GND接控制板的GND,VCC接+5V
- */
-
- 实物图
-
- /*
- *程序目的,用遥控器控制一位数码管的显示,如果是0至9的数字,则显示对应的数字
- *如果是其它的,则点闪烁
- *达到程序的目的,只是如果对数字键按的时间久了点,常用数字闪烁,或停下按键时数码管不显示的小缺憾
- *原因在于,按的时间久了,会产生一个FFFFFFFF的代码,根据程序它会调用点闪烁造成的.
- */
- 感谢迷你强提供的数码管实验,红外部分遥控引用Irremote\irremoteDemo的范例代码.
- /*作者:tom
- 时间:2012年11月01日
- IDE版本号:1.0.1
- 发布地址:[url]www.geek-workshop.com[/url]
- 作用:遥控器控制一位数码管的显示,如果是0至9的数字,则显示对应的数字
- */
- #include <IRremote.h>
- int map_led[8]={
- 7,6,4,2,1,9,1,5};
- int RECV_PIN = 11;//定义红外接收器的引脚为11
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- void digital_0(void)
- {
- /*==============显示数字0==========*/
- int n0[8]={
- 0,0,0,0,0,0,1,1 };
- //定义数组通过0,1定义各数码管的明灭.
- int z=0;
- for (int x=2;x<=9;x++)
- //采用循环方式方式点亮指定的数码管Led(数级中0为点亮),单位时间只点亮1个led
- {
- digitalWrite(x,n0[z]);
- z++;
- //点亮led语句,X为引脚数 n0[z]为数组z为0--8的变量,来依次读取数组中的值z++
- if (z>=9) //防止变量z累加超过了8
- z=0;
- }
- }
- void digital_1(void)
- {
- /*=============display 1=========*/
- int n1[8]={
- 1,0,0,1,1,1,1,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n1[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_2(void)
- {
- /*============display 2==========*/
- int n2[8]={
- 0,0,1,0,0,1,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n2[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_3()
- {
- /*============dispaly 3=======*/
- int n3[8]={
- 0,0,0,0,1,1,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n3[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_4()
- {
- /*=========display 4======*/
- int n4[8]={
- 1,0,0,1,1,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n4[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_5()
- {
- /*=========display 5======*/
- int n5[8]={
- 0,1,0,0,1,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n5[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_6()
- {
- /*=========display 6======*/
- int n6[8]={
- 0,1,0,0,0,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n6[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_7()
- {
- /*=========display 7======*/
- int n7[8]={
- 0,0,0,1,1,1,1,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n7[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_8()
- {
- /*=========display 8======*/
- int n8[8]={
- 0,0,0,0,0,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n8[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_9()
- {
- /*=========display 9======*/
- int n9[8]={
- 0,0,0,0,1,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n9[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_a()
- {
- /*=========display a======*/
- int na[8]={
- 1,1,0,0,0,1,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,na[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_b()
- {
- /*=========display b======*/
- int nb[8]={
- 1,1,0,0,0,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,nb[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_c()
- {
- /*=========display c======*/
- int nc[8]={
- 0,1,1,0,0,0,1,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,nc[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_d()
- {
- /*=========display d======*/
- int nd[8]={
- 1,0,0,0,0,1,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,nd[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_e()
- {
- /*=========display e======*/
- int ne[8]={
- 0,0,1,0,0,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,ne[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void digital_f()
- {
- /*=========display F======*/
- int nF[8]={
- 0,1,1,1,0,0,0,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,nF[z]);
- z++;
- if (z>=9)
- z=0;
- }
- }
- void display() //display number 0 -- 9
- {
- while (1)
- {
- digital_0;delay(100);
- digital_1;delay(100);
- digital_2;delay(100);
- digital_3;delay(100);
- digital_4;delay(100);
- digital_5;delay(100);
- digital_6;delay(100);
- digital_7;delay(100);
- digital_8;delay(100);
- digital_9;delay(100);
- }
-
- }
- void displayNULL()
- {
- /*=========display NULL======*/
- int n_null[8]={
- 1,1,1,1,1,1,1,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n_null[z]);
- z++;
- if (z>=9)
- z=0;
- }
-
- }
- void digital_dotblink()//点的闪烁
- {
- /*=========display dotblink======*/
- int n_high[8]={
- 1,1,1,1,1,1,1,0 };
- int n_low[8]={
- 1,1,1,1,1,1,1,1 };
- int z=0;
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n_high[z]);
- z++;
- if (z>=9)
- z=0;
- }
- delay(50);
- for (int x=2;x<=9;x++)
- {
- digitalWrite(x,n_low[z]);
- z++;
- if (z>=9)
- z=0;
- }
-
- }
- //初始参数设置
- void setup()
- {
- Serial.begin(9600);
- irrecv.enableIRIn(); // 初始化红外接收器
- pinMode(13,OUTPUT);
- //激活13号引脚,我们需要用它供电
- for (int n=2;n<=9;n++)
- {
- pinMode(n,OUTPUT);
- }
- }
- //循环内容
- void loop()
- {
- digitalWrite(13,HIGH);
-
-
- if (irrecv.decode(&results)) {
- Serial.println(results.value, HEX);//以16进制换行输出接收代码
- Serial.println();//为了便于观看输出结果增加一个空行
- switch (results.value) {
- case
- 0xFF6897:
- digital_0(); //数字0
- break;
- case 0xFF30CF : //数字1
- digital_1();
- break;
- case 0xFF18E7: //数字2
- digital_2();
- break;
- case 0xFF7A85: //数字3
- digital_3();
- break;
- case 0xFF10EF: //数字4
- digital_4();
- break;
- case 0xFF38C7: //数字5
- digital_5();
- break;
- case 0xFF5AA5: //数字6
- digital_6();
- break;
- case 0xFF42BD : //数字7
- digital_7();
- break;
- case 0xFF4AB5: //数字8
- digital_8();
- break;
- case 0xFF52AD: //数字9
- digital_9();
- break;
- default :
- //如果按下的遥控器数字之外的按键,让点闪烁
- digital_dotblink();
- }
- irrecv.resume(); // 接收下一个值
- }
- }
复制代码
|