51hei单片机论坛里流传的遥控解码程序现在都弱爆了根本解不了现在的遥控自己写个万能红外遥控解码

本程序中需要用的头文件下载:http://www.51hei.com/mcu/2564.html

//家用遥控器通用解码程序

//原理和录音机一样只不过这里录的是高低电平的脉宽,注意家用遥控器一般是38KHZ的脉冲接收头所以为了

//发射方便所以单片机使用了455MHZ晶振(旧遥控里拆一个),最好不要自己用定时器溢出来输出38KHZ的方波

//我自己试了N种中断或延时的方法都没成功,因为没有示波器也找不到究竟是神马问题最后还是靠拆一个455晶振

//才解决问题,自己家里的机顶盒和电视遥控都成功解码

#include //STC12C5AxxS2系列单片机头文件

#define uchar unsigned char//宏定义

#define uint unsigned int//宏定义

sbit Rc=P3^2;

sbit LED_zs=P0^0;

sbit LED_zs1=P0^1;

sbit Key_s=P1^0;

sbit Key_f=P1^1;

sbit red=P0^2;

int i=0;

int TCC=0;

int xdata Hdate [46];

int xdata Ldate [46];

void Delay(uint ms)//延时子程序

{

uint x,y;

for(x=ms;x>0;x--)

for(y=0;y<12;y++);

}

void Delay1(uint ms)//延时子程序

{

uint x,y;

for(x=ms;x>0;x--)

for(y=0;y<2400;y++);

}

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

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

函数名:定时/计数器初始化函数

调 用:T_C_init();

参 数:无

返回值:无

结 果:设置SFR中T/C1和(或)T/C0相关参数

备 注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽

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

void T_C_init (void){

TMOD = 0x01; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]

TH0 = 0xfe; //16位计数寄存器T0高8位

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

TR0 = 1; //T/C0启动开关

ET0 = 1; //T/C0中断开关

EA = 1; //中断总开关

}

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

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

函数名:定时/计数器0中断处理函数

调 用:[T/C0溢出后中断处理]

参 数:无

返回值:无

结 果:重新写入16位计数寄存器初始值,处理用户程序

备 注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致

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

void T_C0 (void) interrupt 1 using 1{ //切换寄存器组到1

TH0 = 0xfe; //16位计数寄存器T0高8位(重新写入初值)

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

//函数内容

TCC++;

}

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

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

函数名:UART串口初始化函数

调 用:UART_init();

参 数:无

返回值:无

结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)

备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]

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

void UART_init (void){

//EA = 1; //允许总中断(如不使用中断,可用//屏蔽)

//ES = 1; //允许UART串口的中断

TMOD = 0x20; //定时器T/C1工作方式2

SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)

TH1 = 0xF3; //定时器初值高8位设置

TL1 = 0xF3; //定时器初值低8位设置

PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)

TR1 = 1; //定时器启动

}

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

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

函数名:外部中断INT初始化函数

调 用:INT_init();

参 数:无

返回值:无

结 果:启动外部中断INT1、INT0中断,设置中断方式

备 注:

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

void INT_init (void){

EA = 1; //中断总开关

//EX0 = 1; //允许外部中断0中断

IT0 = 1; //1:下沿触发 0:低电平触发

}

void INT_0 (void) interrupt 0 using 2{ //切换寄存器组到2

EX0 = 0; //允许外部中断0中断

//用户函数内容

for(i=0;i<46;i++)

{

//获取低电平宽度

TH0 = 0xfe; //16位计数寄存器T0高8位

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

TCC=0;

TR0 = 1; //T/C0启动开关

while(Rc==0);

TR0=0;

Ldate[i]=TCC;

//获取高电平宽度

TH0 = 0xfe; //16位计数寄存器T0高8位

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

TCC=0;

TR0 = 1; //T/C0启动开关

while(Rc==1);

TR0=0;

Hdate[i]=TCC;

}

LED_zs=0;

Delay1(100);

LED_zs=1;

Delay1(100);

LED_zs=1;

Delay1(300);

LED_zs1=0;

}

void fs(void)

{

int fs;

for(fs=0;fs<46;fs++)

{

TH0 = 0xfe; //16位计数寄存器T0高8位

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

TCC=0;

TR0 = 1; //T/C0启动开关

while(TCC

TR0=0;

TH0 = 0xfe; //16位计数寄存器T0高8位

TL0 = 0x0c; //16位计数寄存器T0低8位(100uS延时)

TCC=0;

TR0 = 1; //T/C0启动开关

while(TCC

TR0=0;

}

}

void main (void)

{

int n;

IP=0x02;

T_C_init();

INT_init();

UART_init();

LED_zs=1;

LED_zs1=0;

red=0;

while(1)

{

Key_f=1;

if( Key_f!=1)

{

Delay1(2);

Key_f=1;

if(Key_f!=1)

{

for(n=0;n<46;n++)

{

SBUF = Ldate[n]; //将接收的数据发送回去

while(TI == 0); //检查发送中断标志位

TI = 0;

}

for(n=0;n<46;n++)

{

SBUF = Hdate[n]; //将接收的数据发送回去

while(TI == 0); //检查发送中断标志位

TI = 0;

}

while(!Key_f){fs();Delay1(100);}

}

}

Key_s=1;

if(Key_s!=1)

{

Delay1(2);

if(Key_s!=1)

{

EX0=1;

LED_zs1=1;

while(!Key_s);

}

}

}}

万能遥控程序c语言,51单片机万能红外遥控解码程序相关推荐

  1. 51单片机led灯闪烁程序C语言,51单片机控制led灯闪烁程序

    Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序. #include sbit LED = P ...

  2. 键盘与显示实验程序c语言,51单片机按键控制数码管程序

    单片机数码管应用,数码管扫描 #include #define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0 ...

  3. 循黑线程序c语言,51单片机舵机循黑线小车程序

    #include sbit pwm = P2^0;    //定义舵机p20 sbit ENA = P3^6;   //定义驱动模块 sbit ENB = P3^7;   // sbit IN1 = ...

  4. 基于51单片机的红外遥控信号的发射和接收

    本讲内容: 介绍红外遥控的知识,通过例程展示红外遥控程序的编写方法. 红外线简介: 在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光.目前几乎所有的视频和音频设备都可以通过红外 ...

  5. 基于51单片机 的红外遥控解码设计

    红外线遥控在生活中有着广泛的应用,比如空调,电视,音响,机顶盒等.红外线遥控实际上就是一种通信方法,利用LED发射红外线,接收器接收到数据,进行处理后就可以得到发送端的信号.利用一个简单的红外线发光二 ...

  6. (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制

    硬件说明: 采用STC89C51作为主控芯片,结合SG90舵机模块,红外遥控(独立按键),等电路模块实现远程控制舵机. 应用实例: 在不改变外部电路的情况下,实现远程开灯,关灯. 远程控制机器开关状态 ...

  7. c51单片机蜂鸣器程序C语言响,单片机蜂鸣器响生日快乐编程程序

    单片机蜂鸣器响生日快乐编程程序 #include #define   uint   unsigned int #define   uchar  unsigned char sbit      spea ...

  8. 单片机自动调光C语言,51单片机触控调光程序C语言

    /********************************************************************************************* 程序名: ...

  9. ds12c887程序C语言,51单片机驱动DS12C887的时钟芯片C语言程序

    本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分,已通过测试,详细注释很好用的. #include < absacc.h > #include < reg51.h & ...

最新文章

  1. 10条PHP编程习惯助你找工作
  2. 如何使用ADLab搭建活动目录实验环境来练习渗透测试技术
  3. django配置数据驱动,python安装失败问题
  4. Repeater的嵌套结合用户控件的使用
  5. 关于反射Assembly.Load(程序集).CreateInstance(命名空间.类)
  6. 8 一点就消失_消失的莉莉安(25)
  7. [绝对原创]一些你们想不到的简单方法,就可以让你手机飞快起来!!!
  8. EXCEL同一个数据较多的表格里自己比较数据(分屏)
  9. 瑞友天翼服务器ip地址怎么修改,(瑞友天翼安装教程.doc
  10. 好看的table-css样式
  11. matlab 齐次线性方程组,利用matlab求解RE中出现的齐次线性方程组
  12. 关于文件你必须了解的一些基本概念
  13. Sass学习(二)--混合器与继承
  14. arma找不到合适的模型_ARMA模型建模与预测指导
  15. 「硬核讲解」通达信跨周期引用均线指标公式
  16. Nett源码剖析(2)NioEventloopGroup的创建2021SC@SDUSC
  17. sql语句--黄一家
  18. ozon平台刊登上架很复杂?有哪些免费ERP系统支持呢
  19. mre下的控件实现(二、Widget基础类)
  20. 从双非到专业排名前三的C9高校的申博历程

热门文章

  1. word中如何将所有一级标题统一格式(转载)
  2. Java三部曲(二)JavaWeb
  3. 自媒体视频素材|短视频标题文字动画PR模板素材
  4. 2048游戏英雄榜java_2048技巧 2048游戏排行榜挑战方法攻略详解
  5. 自恢复保险丝选型参数说明
  6. 为什么现在那么多公司都要招聘测试开发?测试开发是什么?
  7. http://wenku.baidu.com/view/981f99d376eeaeaad1f330e7.html
  8. java提取word中的图片_Java怎么获取Word批注的文字和图片
  9. cerebro 配置
  10. (三十六):How Will Your Tweet Be Received? Predicting the Sentiment Polarity of Tweet Replies