甲机由按键通过串口控制乙机LED闪烁,保证双方2个灯 闪烁一致

硬件电路连接如图所示:

话不多说,直接上代码:

/*  名称:甲机发送控制命令字符

说明:甲单片机负责向外发送控

制命令字符“A”、“B”、“C”,或者

停止发送,乙机根据所接收到的字符

完成 LED1 闪烁、LED2 闪烁、双闪

烁、或停止闪烁。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P0^0;   

sbit LED2=P0^3;

sbit K1=P1^0; 

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//向串口发送字符

void Putc_to_SerialPort(uchar c)

{

SBUF=c;

while(TI==0);

TI=0;

}


 

//主程序

void main()

{


uchar Operation_No=0;

SCON=0x40; //串口模式 1

TMOD=0x20; //T1 工作模式 2

PCON=0x00; //波特率不倍增

TH1=0xfd;

TL1=0xfd;

TI=0;

TR1=1;

while(1)

{

if(K1==0) //按下 K1 时选择操作代码 0,1,2,3

{ 

while(K1==0); 

Operation_No=(Operation_No+1)%4;

} 

switch(Operation_No) //根据操作代码发送 A/B/C 或停止发送

{ 

case 0: LED1=LED2=1;

break; 

case 1:Putc_to_SerialPort('A');

LED1=~LED1;LED2=1;

break; 

case 2:Putc_to_SerialPort('B');

LED2=~LED2;LED1=1;

break; 

case 3:Putc_to_SerialPort('C');

LED1=~LED1;LED2=LED1;

break; 

} 

DelayMS(100);

  }

}

如上,是甲机程序

/*  名称:乙机程序接收甲机发送字符并完成相应动作

说明:乙机接收到甲机发送的信号后,根据相应信号控制 LED 完成不同闪烁动作。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED1=P0^0;   

sbit LED2=P0^3;

//延时

void DelayMS(uint ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

//主程序

void main()

{

SCON=0x50; //串口模式 1,允许接收

TMOD=0x20; //T1 工作模式 2

PCON=0x00; //波特率不倍增



TH1=0xfd;//波特率 9600 

TL1=0xfd;

RI=0;

TR1=1;

LED1=LED2=1;

while(1)

{

 

if(RI) //如收到则 LED 闪烁

{ 

RI=0; 

switch(SBUF) //根据所收到的不同命令字符完成不同动作

{ 

case 'A': LED1=~LED1;LED2=1;break; //LED1 闪烁

case 'B': LED2=~LED2;LED1=1;break; //LED2 闪烁

case 'C': LED1=~LED1;LED2=LED1;  //双闪烁

} 


         } 


 

 else LED1=LED2=1;     //关闭 LED

DelayMS(100);

    }

} 

如上 是乙机程序。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这个任务可以通过以下步骤完成: 1. 首先,需要将红外遥控器与Arduino UNO连接。这可以通过红外接收器模块实现。将模块的VCC引脚连接到Arduino的5V引脚,GND引脚连接到Arduino的GND引脚,OUT引脚连接到Arduino的数字引脚2。 2. 接下来,需要编写Arduino代码来读取红外遥控器的按键值。可以使用IRremote库来实现这个功能。在Arduino IDE中,打开“示例”->“IRremote”->“IRrecvDemo”示例,然后上传代码到Arduino。 3. 在串口监视器中打开,按下红外遥控器的按键,记录下每个按键所对应的十六进制数。 4. 然后,编写Arduino代码来控制4个LED闪烁。根据每个按键的十六进制数,分别控制对应的LED。 下面是一个示例代码,可以让你更好地理解如何实现这个任务: ``` #include <IRremote.h> int IRpin = 2; // 红外接收器模块连接到Arduino的数字引脚2 IRrecv irrecv(IRpin); decode_results results; int LED1 = 3; // 第一个LED连接到Arduino的数字引脚3 int LED2 = 4; // 第二个LED连接到Arduino的数字引脚4 int LED3 = 5; // 第三个LED连接到Arduino的数字引脚5 int LED4 = 6; // 第四个LED连接到Arduino的数字引脚6 void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // 启用红外接收器模块 } void loop() { if (irrecv.decode(&results)) { unsigned int value = results.value; Serial.println(value, HEX); if (value == 0xFF6897) { // 按键1 digitalWrite(LED1, HIGH); delay(500); digitalWrite(LED1, LOW); delay(500); } else if (value == 0xFF9867) { // 按键2 digitalWrite(LED2, HIGH); delay(500); digitalWrite(LED2, LOW); delay(500); } else if (value == 0xFFB04F) { // 按键3 digitalWrite(LED3, HIGH); delay(500); digitalWrite(LED3, LOW); delay(500); } else if (value == 0xFF30CF) { // 按键4 digitalWrite(LED4, HIGH); delay(500); digitalWrite(LED4, LOW); delay(500); } irrecv.resume(); } } ``` 在这段代码中,我们首先定义了红外接收器模块的引脚和4个LED的引脚。在setup()函数中,我们将这些引脚设置为输出模式,并启用红外接收器模块。在loop()函数中,我们使用irrecv.decode()函数来读取红外遥控器的按键值。如果读取到了按键值,根据每个按键的十六进制数,分别控制对应的LED闪烁。最后,使用irrecv.resume()函数来继续接收下一个红外信号。 希望这个示例代码能够帮助你完成这个任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值