求四键无线遥控模块的单片机程序

求四键无线遥控模块的单片机程序,第1张

这个模块的用法和按键类似,当遥控器按下时接收器的对应引脚会持续输出低电平,松开后会恢复为高电平,用按键的检测方法就行了,这个接收模块会多出来的一个引脚,当任意一个按键按下时这个引脚会产生一个下降沿,所以这个引脚可以使用下降沿中断,把按键的检测放到外部中断中去,这样可以节省单片机的开销,而且实时性更高。

按键扫描程序可以参考这个:

if(s1==0)

{

delay_ms(10)

if(s1==0)

{

......

......

while(!s1)

}

}

中断触发的由于单片机不一样,程序也不一样,所以我就不多说了

以下文件是51单片机实现遥控解码,通过数码管显示键码的程序,P0口驱动数码管段选,p2.6和p2.7为数码管位选,接收头连到P3.2口。此程序以通过验证,可以直接编译使用,另外还有一个继电器和蜂鸣器的控制,不用可以屏蔽掉。

********************************************************************************

* 描述: *

* 遥控键值读取器*

* 数码管显示, P0口为数码管的数据口 *

* *

********************************************************************************

遥控键值解码-数码管显示*

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

#include <reg51.h>

#include <intrins.h>

void IR_SHOW()

void delay(unsigned char x)//x*0.14MS

void delay1(unsigned char ms)

void beep()

sbit IRIN = P3^2

sbit BEEP = P3^7

sbit RELAY= P1^3

sbit GEWEI= P2^7

sbit SHIWEI= P2^6

unsigned char IRCOM[8]

unsigned char code table[16] =

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}

main()

{

IE = 0x81 //允许总中断中断,使能 INT0 外部中断

TCON = 0x1 //触发方式为脉冲负边沿触发

delay(1)

IRIN=1

BEEP=1

RELAY=1

for()

{

IR_SHOW()

}

} //end main

void IR_IN() interrupt 0 using 0

{

unsigned char i,j,k,N=0

EA = 0

I1:

for (i=0i<4i++)

{

if (IRIN==0) break

if (i==3) {EA =1return}

}

delay(20)

if (IRIN==1) goto I1 //确认IR信号出现

while (!IRIN)//等 IR 变为高电平

{delay(1)}

for (j=0j<4j++)

{

for (k=0k<8k++)

{

while (IRIN)//等 IR 变为低电平

{delay(1)}

while (!IRIN) //等 IR 变为高电平

{delay(1)}

while (IRIN) //计算IR高电平时长

{

delay(1)

N++

if (N>=30) {EA=1return}

}

IRCOM[j]=IRCOM[j] >>1

if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80}

N=0

}//end for k

}//end for j

if (IRCOM[2]!=~IRCOM[3]) {EA=1return}

IRCOM[5]=IRCOM[2] &0x0F

IRCOM[6]=IRCOM[2] &0xF0

IRCOM[6]=IRCOM[6] >>4

beep()

EA = 1

}

void IR_SHOW()

{

P0 = table[IRCOM[5]]

GEWEI = 0

SHIWEI = 1

delay1(4)

P0 = table[IRCOM[6]]

SHIWEI = 0

GEWEI = 1

delay1(4)

}

void beep()

{

unsigned char i

for (i=0i<100i++)

{

delay(5)

BEEP=!BEEP

}

BEEP=1

}

void delay(unsigned char x)//x*0.14MS

{

unsigned char i

while(x--)

{

for (i = 0i<13i++) {}

}

}

void delay1(unsigned char ms)

{

unsigned char i

while(ms--)

{

for(i = 0i<120i++)

{

_nop_()

_nop_()

_nop_()

_nop_()

}

}

}

生成共有五个步骤。

一.同样使用51单片机作为控制芯片,同样只需要一个芯片和一个晶振电路单片机就能运行,但是注意可以将需要的引脚外拉。二.将按键开关的两端,一端连接到单片机引脚,另一端接到地,接单片机的一端再通过一个10K电阻上拉到5V,也可以不上拉,亲试能用,上拉的话稳定一些,能够防干扰,按键数目自行而定,按照遥控器的那件分布来在洞洞板上焊接。三.蓝牙信号脚要结对,只需要单片机的发射脚,即P3.1接到蓝牙模块的接收脚,注意和之前的不一样;蓝牙模块设置成主模块,但是注意车上的蓝牙设置成从模块,注意波特率一致。四.需要两节18650电池(两节7.2V),使用一个lm2940稳压芯片就可以产生5V电压给设备供电,或使用其他的5V电源来供电,比如说充电宝。五.启动程序。

单片机是一种控制芯片,一个微型的计算机,加上晶振,存储器,地址锁存器,逻辑门,显示器,按钮,扩展芯片,接口等构成单片机系统。利用51单片机内部UART功能和蓝牙模块实现单片机之间的无限遥控,主要通过编程用于控制其他单片机或微机系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7843502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存