/****************************************************************
*创绿开发工作室,欢迎光临http://chuanglu2008.taobao.com,
*承接电子产品开发,软件开发,单片机开发,程序移植
*欢迎光临http://chuanglu2008.taobao.com
* 库版本 :V1.0.0
* 作者 :liaotingtai QQ:1390954239
*修改时间 :2010-12-20
*************************************************************/
/*
1、EV1527/PT2262 按键解码输出,并有解码有效输出端。
2、程序采用中断嵌套结构,定时时间准确,可轻松集成到您现有程序中,解码精度不受其他程序块影响。
3、通过学习键可学习40个遥控器编码,使用芯片自带EEPROM,无需外挂存储。
4、提供keil5 c代码,有详细注释,提供网络技术支持。
该源码适合初学者研究,或想在原有产品中增加功能又缺乏此类经验的朋友。
!!!按一下学习键指示灯亮一下灭,松开,再按一下遥控器,学习指示灯闪一下,表示学习成功
学习成功后,才能接收此遥控器的数据,否则没反应!!!
!!!按下学习按键6秒之内松开,超过6秒后无效并清除以前存储的遥控器数据
*/
#include "main.h"
bit old_bit; //保存上一次查询到的电平状态
bit tb_ok; //接收到同步的马时置1
bit rf_ok; //接收到一个完整的遥控命令后置1,通知解码程序可以解码了
bit study; //进入学习状态标志
bit bt_auto=0; //自动设置遥控接收波特率标志
bit rf_ok1,rf_ok2; //接收成功临时标志
uchar hh_w,ll_w; //高,低电平宽度
uchar ma_n; //接收到第几位编码了
uchar bma1,bma2,bma3,bma4; //用于接收过程存放遥控编码
uchar mma1,mma2,mma3,mma4; //第一次接收到的编码,用于解码过程
uchar mmb1,mmb2,mmb3,mmb4; //第二次接收到的编码
uchar temp_T0; //t初值
uint s_tim; //定时
#if 1
void rx_data()
{
uchar x;
if(!bt_auto)//自动设置遥控接收波特率标志
{
TMR0=100;
TMR00;
}
else
{
TMR0=temp_T0;
TMR00;
}
if (!RF)
{
ll_w++; // 检测到低电平 低电平时间加1,记录本次电平状态 old_rc5=保存上一次查询到的电平状态
old_bit=0;
}
else // 检测到高电平
{
hh_w++;//记录高电平时间
if (!old_bit)// 检测到从低到高的跳变,已检测到一个完整(高-低)电平周期
{
if (((hh_w>=2)&&(hh_w<=7))&&((ll_w>=50)&&(g <=180))) //判同步码
{ //下面是同步码低电平判断
if((ll_w>=100)&&(ll_w<=180))//4.7m电阻
{ ma_n=0;
tb_ok=1;
bma1=0;
bma2=0;
bma3=0;
bma4=0;
bt_auto=0;//temp_T0=100;
}
}
else if ((tb_ok)&&((ll_w>=10)&&(ll_w<=16))) //数据低电平
{
ma_n++; //已经接收到同步码,判为0
if(ma_n>23)
{
if(!rf_ok1)
{
mma1=bma1;
mma2=bma2;
mma3=bma3;
mma4=bma4;//将接收到的编码复制到解码寄存器中
rf_ok1=1;
ma_n=0;
tb_ok=0;
bt_auto=0;
s_tim=2500;
}
else
{
mmb1=bma1;
mmb2=bma2;
mmb3=bma3;
mmb4=bma4;//将接收到的编码复制到解码寄存器中
rf_ok2=1;
ma_n=0;
tb_ok=0;
bt_auto=0;
}
}
}
else if ((tb_ok)&&((ll_w>=3)&&(ll_w<=6))) //数据高电平
{ switch (ma_n)
{
case 0 : {
bma1=bma1 | 0x80; //遥控地址编码第1位
break;
}
case 1 : {
bma1=bma1 | 0x40;
break;
}
case 2 : {
bma1=bma1 | 0x20;
break;
}
case 3 : {
bma1=bma1 | 0x10;
break;
}
case 4 : {
bma1=bma1 | 0x08;
break;
}
case 5 : {
bma1=bma1 | 0x04;
break;
}
case 6 : {
bma1=bma1 | 0x02;
break;
}
case 7 : {
bma1=bma1 | 0x01;
break;
}
case 8 : {
bma2=bma2 | 0x80;
break;
}
case 9 : {
bma2=bma2 | 0x40;
break;
}
case 10: {
bma2=bma2 | 0x20;
break;
}
case 11: {
bma2=bma2 | 0x10;
break;
}
case 12: {
bma2=bma2 | 0x08;
break;
}
case 13: {
bma2=bma2 | 0x04;
break;
}
case 14: {
bma2=bma2 | 0x02;
break;
}
case 15: {
bma2=bma2 | 0x01;
break;
}
case 16: {
bma3=bma3 | 0x80; //2262按键码第1位
break;
}
case 17: {
bma3=bma3 | 0x40;
break;
}
case 18: {
bma3=bma3 | 0x20;
break;
}
case 19: {
bma3=bma3 | 0x10;
break;
}
case 20: {
bma4=bma4 | 0x80; //1527按键码第1位
break;
}
case 21: {
bma4=bma4 | 0x40;
break;
}
case 22: {
bma4=bma4 | 0x20;
break;
}
case 23:
{ bma4=bma4 | 0x10;
if(!rf_ok1)
{
mma1=bma1;
mma2=bma2;
mma3=bma3;
mma4=bma4;//将接收到的编码复制到解码寄存器中
rf_ok1=1;
tb_ok=0;
bt_auto=0;
ma_n=0;
s_tim=2500;
break;
}
else
{
mmb1=bma1;
mmb2=bma2;
mmb3=bma3;
mmb4=bma4;//将再次接收到的编码复制到解码寄存器中,
rf_ok2=1;
tb_ok=0;
bt_auto=0;
ma_n=0;
break;
}
}
}
ma_n++;
}
else //接收到不符合的高-低电平序列
{
ma_n=0;
tb_ok=0;
bt_auto=0;
bma1=0;
bma2=0;
bma3=0;
bma4=0;
hh_w=1;
ll_w=0;
}
ll_w=0;
hh_w=1;
}
old_bit=1; // 记录本次电平状态
}
if(rf_ok1) //规定时间内接受到2帧相同的编码数据才有效
{
s_tim--;
if(!s_tim
51单片机433遥控解码(带学习功能),433M无线遥控单片机解码,C,C++
版权申诉
5星 · 超过95%的资源 137 浏览量
2021-09-10
18:34:15
上传
评论 10
收藏 220KB RAR 举报
lithops7
- 粉丝: 325
- 资源: 4457
最新资源
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- springcodespringcodespringcodespringcode
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页