红外遥控接收篇之四数码管实验改成红外遥控显示
数码管实验改成红外控制显示数字
/*
实验器件:
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(); // 接收下一个值
}
}
请教怎么用4位数码管,显示一个4位数????、
页:
[1]