按键扫描程序可以参考这个:
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功能和蓝牙模块实现单片机之间的无限遥控,主要通过编程用于控制其他单片机或微机系统。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)