#include
#include
#define uchar unsigned char//宏定义
#define uint unsigned int
#define ulong unsigned long
sbit sound=P2^3; //蜂鸣器
sbit IR=P1^2; //IR_DATA
uchar dm,i,j,k; //IR_解码用的变量
uchar aa[2]; //定义1个数组,用来存储代码,8位的数据码和8位的数据反码
ulong bb; //定义bb用来存放用户识别码,这里采用的是26位的用户识别
uchar newdata; //IR收到新的数据提示主函数去处理
//0.9ms
void delay0_9ms(void)
{
unsigned char j,k;
for(j=18;j>0;j--)
for(k=20;k>0;k--) ;
}
//1ms
void delay1ms(void)
{
unsigned char i,j;
for(i=2;i>0;i--)
for(j=230;j>0;j--) ;
}
//4.5ms
void delay4_5ms(void)
{
unsigned char i,j;
for(i=10;i>0;i--)
for(j=225;j>0;j--) ;
}
//100ms
void delay100ms(void)
{
unsigned char i,j,k;
for(i=200;i>0;i--)
for(j=20;j>0;j--)
for(k=10;k>0;k--) ;
}
IR_JM(unsigned char date)
{
switch(date)
{
case 0x01: {P0=0X00;
break;
}
case 0x10: {
break;
}
default: {
break;
}
}
}
void main()
{
IT0=1; //外部中断0触发方式控制位,下降沿触发
EX0=1; //外部中断0(INT0)中断允许位
EA=1; //总中断
dm=0;
while(newdata)
{
newdata=0;
IR_JM(aa[0]);
}
}
void t0(void) interrupt 0//外部中断0的函数
{
EA=0; //暂时关闭CPU的所有中断请求
for(k=0;k<10;k++) //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
{ //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
delay0_9ms(); //延时0.9毫秒
if (IR==1)
{
k=10;break;
} //延时0.9毫秒后判断P3.2脚是否出现高电平如果有就退出解码程序
else if(k==9) //重复10次?
{ //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
while(IR==0); //等待高电平避开9毫秒低电平引导脉冲
delay4_5ms(); //延时4.5毫秒避开4.5毫秒的结果码
/********************************************
//26位的用户码,前13位数据码,后13位数据反码
*********************************************/
for(j=1;j<=26;j++)//每组数据为26位
{
while(IR==0); //
delay0_9ms();
if(IR==1)
{
delay1ms();
dm=dm|0x2000000;
//因为是26位,一个"1",后面25个"0",转化二进制即为"1000000"
if(j<26) dm=dm>>1;
//数据"1",右移一个"1",一共25次
}
else if(j<26) dm=dm>>1;
//数据"0",一共25次
}
bb=dm;
dm=0;
/***************************************************
//16位的用户码,前8位数据码,后8位数据反码
****************************************************/
for(i=0;i<2;i++)
{
for(j=1;j<=8;j++)//每组数据为8位
{
while(IR==0); //
delay0_9ms();
if(IR==1)
{
delay1ms();
dm=dm|0x80;
if(j<8) dm=dm>>1; //数据"1",右移一个"1",一共7次
}
else if(j<8) dm=dm>>1; //数据"0",一共7次
}
aa[i]=dm;
dm=0;
}
/***************************************************
//显示部分
****************************************************/
if(aa[0]==~aa[1]) //验证成功
{
sound=0;
delay100ms();
sound=1;
newdata=1;
}
} //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
} //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
EA=1;
}
关键字:单片机 红外遥控 解码程序
引用地址:
单片机红外遥控解码程序
推荐阅读最新更新时间:2024-03-16 13:06
学习笔记之-51单片机定时计数器
一、单片机的时序 单片机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同,即所需的拍节数不同。 时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。 机器周期:在计算机中,为了便于管理,常把一条指令的
[单片机]
基于单片机USB接口的数据采集存储电路的设计
在一些特殊的工业场合,有时需要将传感器的信号不断的实时 采集 和存储起来,并且到一定时间再把 数据 回放到PC机中进行分析和处理。在工作环境恶劣的情况下采用高性能的单片机和工业级大容量的FLASH存储器的方案恐怕就是最适当的选择了。CYGNAL公司的C8051F320 SOC是一种具有8051内核的高性能单片机,运行速度为普通8051的12倍。该芯片内部528字节随机RAM和2048字节XRAM为数据缓冲和 程序 运行提供了充足的空间。更受欢迎的是它的串行扩展功能为当前的各种串行芯片和外部 设备 接口的扩展提供了极大的方便。高速的SPI硬件接口与串行FLASH RAM的无缝连接大大简化了电路板布线,而片内自带的USB接口功能使数据
[缓冲存储]
单片机在红外遥控技术中的应用
引言 红外遥控技术因其性能稳定、结构简单、技术成熟等优点而在工业控制、仪器仪表、家电等领域中得到了广泛的应用。一般通常使用专用的配对编、解码芯片,组成红外发射和接收电路,完成对设备或电器的远动控制。图1所示为按此方法进行红外遥控的一般工作过程。 使用专用的配对编、解码芯片来组成红外发射电路和红外接收电路,在控制路数较少时矛盾并不突出。但是当控制路数较多时,其接口的设计和实现就显得比较繁琐;此外因为编、解码芯片通常是专用配对使用的,即某种解码芯片只能识别某种编码芯片的编码,对其他型号的编码芯片的编码则不能识别。因此,不同的编、解码芯片几乎没有互换性。 本文提出了一种利用单片机实现红外遥控的方法,即用某种编码芯片
[工业控制]
恩智浦推出全球最小、集成微控制器的单芯片SoC
恩智浦半导体今天宣布推出全球最小的单芯片SoC解决方案——MC9S08SUx微控制器(MCU)系列,该超高压解决方案集成了18V至5V 低压差线性稳压器(LDO)和MOSFET前置驱动器,适合无人机、机器人、电动工具、直流风扇、健康保健以及其他低端无刷直流电机控制 (BLDC)应用。 这一强大的的8位MC9S08SUx微控制器系列进一步拓展了恩智浦的S08 MCU产品线,提供4.5V~18V电源电压工作范围,不仅物料(BOM)成本更低,集成度更高,而且性能和可靠性更加出色。目前,市场上越来越多的客户希望以单个MCU取代多器件解决方案,从而降低成本和缩小系统尺寸,同时为空间受限的应用简化集成和布局布线,这一全新的SoC产品应运而生
[安防电子]
STC89C52单片机用两个定时器控制蜂鸣器的频率和输出时间间隔
题目 同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800, 1k(hz)的方波。 遇到的问题 出现定时器紊乱的现象,这个时候需要把T1定时器的优先级设为高于T0优先级 具体代码如下: #include reg52.h typedef unsigned int unint; typedef unsigned char uchar; sbit beep = P1^5; sbit led = P2^0; uchar t1,bphz,times; uchar code table = { 500,300,200,1
[单片机]
51单片机防酒后驾驶 MQ-3酒精检测系统的仿真
基于单片机的防酒后驾驶控制系统的仿真图: 课题任务的内容和要求 (1) 学习气体测量传感器的原理和使用,并完成数据采集、调理电路的设计; (2) 学习单片机系统的设计及编程,完成系统整体设计; (3) 通过不同颜色显示灯及触发措施,对应三种酒精含量范围(醉酒状态、少量饮酒状态、正常状态),; (4) 测量结果动态显示。 酒精传感器采集酒精浓度信息,将其转化为变化的电压信号。电压信号经过处理后通过A/D转换电路实现对信号的模数转换,然后送至单片机系统进行逻辑判断处理。如果驾驶员未饮酒,LED显示绿灯,汽车正常启动;如果驾驶员处于少量饮酒状态,LED显示黄灯,且会发出声光报警;如果驾驶员处于醉酒状态时,LED显示红灯,且会控
[单片机]
浅析单片机与嵌入式的区别
一直记得上单片机的第一节课上,老师介绍单片机时,是这样说的: 单片机姓单 。为什么要强调这一点呢?方便容易分不清的童鞋,以后每次想问这个问题的时候都想想这句话。 了解的人其实很容易分开它们,实际上他们也没有什么可比性。 首先,见过单片机的人,都知道,其实单片机只是一块芯片,里面有运算器、存储器等组成的一个具有逻辑、运算、通信等功能的单元。说的再具体点,实际一个CPU、 DSP芯片也可以认为是一个单片机。当然它们性能很强大,但是功能依然很单一,总之就是处理数据、逻辑。 其次,单片机可以完成很多的任务处理,但一般都是跟一定的外围设备进行协作,比如,添加LED灯,实现交通灯系统;添加液晶屏,实现动画播放等。(当然很多同学 都已经在
[单片机]
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]