红外遥控数码管显示

红外遥控器实物图

红外遥控器接口电路

数码管接口电路

红外遥控数码管显示程序源代码

/**************************红外遥控数码管显示**************************

* 单片机:51单片机

* 开发环境:keil

* 名称:红外遥控数码管显示

* 功能:遥控器红外解码数码管显示

按配套遥控器上1-9会在数码管上对应显示

*************************************************************************/

#include<reg51.h>

#define DataPort P0

#define uchar unsigned char

sbit IR=P3^2;

sbit smg_duan=P3^4;

bit IRpro_ok;

bit IR_ok;

uchar IRcord[4];

uchar IRdata[33];

uchar codedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar irtime;

void Ir_work(void);

void Ircordpro(void);

void TIM0init(void) //定时器0初始化

{

TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00; //重载值

TL0=0x00; //初始化值

ET0=1; //开中断

TR0=1;

}

void EX0init(void)

{

IT0=1; //指定外部中断0下降沿触发,INT0 (P3.2)

EX0=1; //使能外部中断

EA=1; //开总中断

}

void SYSinit(void)

{

TIM0init();

EX0init();

}

void Ir_work(void) //红外键值散转程序

{

switch(IRcord[2]) //判断第三个数码值

{

case 0x0c:

{DataPort=dofly_DuanMa[1];}break; //1显示相应的按键值

case 0x18:

{DataPort=dofly_DuanMa[2];}break; //2显示相应的按键值

case 0x5e:

{DataPort=dofly_DuanMa[3];}break; //3显示相应的按键值

case 0x08:

{DataPort=dofly_DuanMa[4];}break; //4显示相应的按键值

case 0x1c:

{DataPort=dofly_DuanMa[5];}break; //5显示相应的按键值

case 0x5a:

{DataPort=dofly_DuanMa[6];}break; //6显示相应的按键值

case 0x42:

{DataPort=dofly_DuanMa[7];}break; //7显示相应的按键值

case 0x52:

{DataPort=dofly_DuanMa[8];}break; //8显示相应的按键值

case 0x4a:

{DataPort=dofly_DuanMa[9];}break; //9显示相应的按键值

default:break;

}

IRpro_ok=0; //处理完成标志

}

void Ircordpro(void) //红外码值处理函数

{

uchar i, j,k;

ucharcord,value;

k=1;

for(i=0;i<4;i++) //处理4个字节

{

for(j=1;j<=8;j++) //处理1个字节8位

{

cord=IRdata[k];

if(cord>6)

//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差

value|=0x80;

if(j<8)

{value>>=1;}

k++;

}

IRcord[i]=value;

value=0;

}

IRpro_ok=1; //处理完毕标志位置1

}

void main(void)

{

SYSinit();

DataPort=0x00; //先让数码管什么都不显示

smg_duan=0;

while(1) //主循环

{

if(IR_ok) //如果接收好了进行红外处理

{Ircordpro();IR_ok=0;}

if(IRpro_ok)

//如果处理好后进行工作处理,如按对应的按键后显示对应的数字等

{Ir_work();}

}

}

void tim0_isr (void) interrupt 1 using 1

{irtime++;} //用于计数2个下降沿之间的时间

void EX0_ISR (void) interrupt 0 //外部中断0服务函数

{

staticuchar i; //接收红外信号处理

static bitstartflag ; //是否开始处理标志位

if(startflag)

{

if(irtime<63&&irtime>=33) //引导码 TC9012的头码,9ms+4.5ms

i=0;

IRdata[i]=irtime;

//存储每个电平的持续时间,用于以后判断是0还是1

irtime=0;

i++;

if(i==33)

{IR_ok=1;i=0;}

}

else

{irtime=0;startflag=1;}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个项目需要用到 Arduino 开发板、红外遥控模块、数码管、风扇以及一些其他的电子元件。整个项目可以分为三个部分来实现:红外遥控数码管显示和风扇控制。 首先,我们需要将红外遥控模块与 Arduino 开发板连接起来。这个步骤需要根据具体的红外遥控模块来连接。一般来说,红外遥控模块有三个引脚:VCC、GND 和 OUT,我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚,OUT 连接到 Arduino 开发板的一个数字输入引脚(比如 D2 引脚)。 然后,我们需要将数码管与 Arduino 开发板连接起来。数码管一般有四个引脚,分别是 VCC、GND、DIN 和 CS。我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚,DIN 连接到一个数字输出引脚(比如 D3 引脚),CS 连接到另一个数字输出引脚(比如 D4 引脚)。 最后,我们需要将风扇与 Arduino 开发板连接起来。风扇一般有两个引脚,分别是 VCC 和 GND。我们需要将 VCC 连接到 Arduino 开发板的 5V 引脚,GND 连接到 GND 引脚。 接下来,我们需要编写代码来实现这个项目。代码中需要实现三个功能:红外遥控数码管显示和风扇控制。 首先是红外遥控功能。我们可以使用 Arduino 自带的红外遥控库来实现这个功能。代码如下: ```c #include <IRremote.h> #define IR_PIN 2 IRrecv irrecv(IR_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); } } ``` 这段代码中,我们首先定义了红外遥控模块的输入引脚为 D2。然后在 setup 函数中初始化了红外遥控模块,并启动了串口通信。在 loop 函数中,我们使用 irrecv.decode 函数来读取红外遥控模块接收到的信号,并使用 Serial.println 函数将信号以十六进制的形式输出到串口上。 接下来是数码管显示功能。我们可以使用 MAX7219 芯片来控制数码管的显示。代码如下: ```c #include <LedControl.h> #define DIN_PIN 3 #define CS_PIN 4 #define CLK_PIN 5 LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, 1); void setup() { lc.shutdown(0, false); lc.setIntensity(0, 8); lc.clearDisplay(0); } void loop() { lc.setDigit(0, 0, 1, false); lc.setDigit(0, 1, 2, false); lc.setDigit(0, 2, 3, false); lc.setDigit(0, 3, 4, false); delay(1000); } ``` 这段代码中,我们首先定义了 MAX7219 芯片的三个引脚分别为 D3、D4 和 D5。然后在 setup 函数中初始化了 MAX7219 芯片,并设置了亮度和显示模式。在 loop 函数中,我们使用 lc.setDigit 函数来设置数码管的显示内容,并使用 delay 函数来实现定时功能。 最后是风扇控制功能。我们可以使用 Arduino 的 PWM 功能来控制风扇的转速。代码如下: ```c #define FAN_PIN 9 void setup() { pinMode(FAN_PIN, OUTPUT); analogWrite(FAN_PIN, 0); } void loop() { for (int i = 0; i <= 255; i++) { analogWrite(FAN_PIN, i); delay(10); } for (int i = 255; i >= 0; i--) { analogWrite(FAN_PIN, i); delay(10); } } ``` 这段代码中,我们首先定义了风扇的控制引脚为 D9。然后在 setup 函数中将这个引脚设置为输出模式,并将风扇的转速初始化为 0。在 loop 函数中,我们使用 for 循环来逐渐增加和降低风扇的转速,并使用 delay 函数来控制转速变化的速率。 将这三个部分的代码整合起来,就可以实现 Arduino 红外遥控数码管定时风扇的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值