tom 发表于 2012-11-1 20:11:58

红外遥控接收篇之四数码管实验改成红外遥控显示



数码管实验改成红外控制显示数字

/*
实验器件:

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
发布地址:www.geek-workshop.com
作用:遥控器控制一位数码管的显示,如果是0至9的数字,则显示对应的数字
*/
#include <IRremote.h>
int map_led={
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={
    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++;
    //点亮led语句,X为引脚数 n0为数组z为0--8的变量,来依次读取数组中的值z++
    if (z>=9) //防止变量z累加超过了8
      z=0;
}
}

void digital_1(void)
{
/*=============display 1=========*/
int n1={
    1,0,0,1,1,1,1,1};
int z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n1);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_2(void)
{

/*============display 2==========*/
int n2={
    0,0,1,0,0,1,0,1};
int z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n2);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_3()
{
/*============dispaly 3=======*/
int n3={
    0,0,0,0,1,1,0,1};
intz=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n3);
    z++;
    if (z>=9)
      z=0;
}

}

void digital_4()
{
/*=========display 4======*/
int n4={
    1,0,0,1,1,0,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n4);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_5()
{   
/*=========display 5======*/
int n5={
    0,1,0,0,1,0,0,1};
intz=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n5);
    z++;
    if (z>=9)
      z=0;
}
}


void digital_6()
{
/*=========display 6======*/
int n6={
    0,1,0,0,0,0,0,1};
intz=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n6);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_7()
{
/*=========display 7======*/
int n7={
    0,0,0,1,1,1,1,1};
intz=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n7);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_8()

{
/*=========display 8======*/
int n8={
    0,0,0,0,0,0,0,1};
intz=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n8);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_9()
{   
/*=========display 9======*/
int n9={
    0,0,0,0,1,0,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n9);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_a()
{
/*=========display a======*/
int na={
    1,1,0,0,0,1,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,na);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_b()
{   
/*=========display b======*/
int nb={
    1,1,0,0,0,0,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,nb);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_c()   
{
/*=========display c======*/
int nc={
    0,1,1,0,0,0,1,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,nc);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_d()
{

/*=========display d======*/
int nd={
    1,0,0,0,0,1,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,nd);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_e()
{

/*=========display e======*/
int ne={
    0,0,1,0,0,0,0,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,ne);
    z++;
    if (z>=9)
      z=0;
}
}

void digital_f()
{   
/*=========display F======*/
int nF={
    0,1,1,1,0,0,0,1};
int z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,nF);
    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={
    1,1,1,1,1,1,1,1};
int   z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n_null);
    z++;
    if (z>=9)
      z=0;
}

}
void digital_dotblink()//点的闪烁
{   
/*=========display dotblink======*/
int n_high={
    1,1,1,1,1,1,1,0};
int n_low={
   1,1,1,1,1,1,1,1 };
int z=0;
for (int x=2;x<=9;x++)
{
    digitalWrite(x,n_high);
    z++;
    if (z>=9)
      z=0;
}
delay(50);
    for (int x=2;x<=9;x++)
{
    digitalWrite(x,n_low);
    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(); // 接收下一个值
}




}


天天向上/tp 发表于 2013-4-20 23:15:07

请教怎么用4位数码管,显示一个4位数????、
页: [1]
查看完整版本: 红外遥控接收篇之四数码管实验改成红外遥控显示