//STC89C52RC
//11.0592MHZ
#include <reg51.h>
#include <intrins.h>
#include <uart.h>
#define uchar unsigned char
#define uint unsigned int
#define TH0_VALUE 0xc5
#define TL0_VALUE 0xc5 // 定时器计数值
#define ANT P3^2 //红外IO口,可任意一个IO
//系统变量定义区=============================================================
volatile unsigned char irr_b=0,s_s=0,s_sw=0,s_sk=0;
volatile signed long da=0;
volatile unsigned char wb=0, a=0;
volatile unsigned int js=0; //定时器计数
volatile unsigned char a1=1,a2=1; //上升沿处理变量
void timer_init(void)
{
ET0=0;
TMOD=0x02;
TCON=0x10;
TL0=TL0_VALUE;
TH0=TH0_VALUE;
ET0=1;
}
void timer_start()
{
TR0=1;
EA=1;
}
void timer0_interrupt(void) interrupt 1
{
js++;
//判断下降
a2=ANT;
if (a1>a2)
{ //uart_tx(0x31);
//external interupt on INT0
if(irr_b==0) //第一个中断
{
irr_b=1; //状态为:开始接收
js=0;
// uart_tx(0x31);
}
else if(irr_b==1) //第二个以后的中断
{
a=js; //读取定时器的值
if((170<a)&&(a<240)) //判断是引导,还是数据
{
wb=0; //数据计数清零
da=0; //数据清零
js=0; //定时器清零
}
else //数据
{
if((8<a)&&(a<25))
{
wb++;
js=0;
da=(da<<1) ;
}
else
{
if((25<a)&&(a<45))
{
wb++;
js=0;
da=(da<<1) +1 ;
}
}
if(wb>=32) //数据长度够32位
{
irr_b=0; //状态为停止接收
wb=0; //数据计数清零
s_s=1; //打开显示许可
}
}
}
}
a1=a2;
}
void program(void)
{
uchar ds=0,d1;
uchar ten_1,ten_2,ten_3;
while(1)
{
ds=js;
if(ds>250) //定时器超时,接收复位
{
js=0;
irr_b=0;
da=0;
wb=0;
s_s=0;
}
if(s_s==1) //显示开关打开,开始显示
{
TR0=0; //关闭全局中断
//显示设备码
d1=da>>24;
ten_1=d1/100;
ten_2=(d1-(100*ten_1))/10;
ten_3=d1-(100*ten_1)-ten_2*10;
uart_cn("解码:",6);
uart_tx((ten_1 + 48));
uart_tx((ten_2 + 48));
uart_tx((ten_3 + 48));
uart_cn(" ",2);
d1=da>>16;
ten_1=d1/100;
ten_2=(d1-(100*ten_1))/10;
ten_3=d1-(100*ten_1)-ten_2*10;
uart_tx((ten_1 + 48));
uart_tx((ten_2 + 48));
uart_tx((ten_3 + 48));
uart_cn(" ",2);
d1=da>>8;
ten_1=d1/100;
ten_2=(d1-(100*ten_1))/10;
ten_3=d1-(100*ten_1)-ten_2*10;
uart_tx((ten_1 + 48));
uart_tx((ten_2 + 48));
uart_tx((ten_3 + 48));
uart_cn(" ",2);
d1=da;
ten_1=d1/100;
ten_2=(d1-(100*ten_1))/10;
ten_3=d1-(100*ten_1)-ten_2*10;
uart_tx((ten_1 + 48));
uart_tx((ten_2 + 48));
uart_tx((ten_3 + 48));
uart_cn(" ",2);
uart_cn("\r\n",2);
uart_cn("\r\n",2);
s_s=0; //关闭显示开关
TR0=1; //开全局中断
}
}
}
void delay_ms(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=0;j<75;j++);
}
}
void main()
{
timer_init();
timer_start();
uart_init();
EA=1;
delay_ms(10);
uart_cn("淘宝网-凤宇电子工作室\r\n",23);
uart_cn("单片机红外解码程序\r\n",25);
uart_cn("旺旺:凤宇电子\r\n",16);
uart_cn("http://shop58276129.taobao.com/\r\n\r\n",35);
delay_ms(100);
program();
}
IR.zip_红外线_红外线解码_红外编码_红外解码_红外遥控
版权申诉
20 浏览量
2022-09-19
16:15:18
上传
评论
收藏 30KB ZIP 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- Windows系统下安装与配置Neo4j的步骤
- 基于matlab实现潮流计算和最优潮流计算的程序1,对毕业设计有一定用处.rar
- 基于大数据学习资源推荐系统的设计与实现(部署视频)-kaic.mp4
- 哈工大形式语言和自动机2022期末含答案
- Windows系统下安装与配置Neo4j的步骤
- 哈希算法(Hash Algorithm)是一种将任意长度的二进制数据映射为较短的、固定长度的二进制值的函数.txt
- Windows系统下安装与配置Neo4j的步骤
- 在二叉树或更复杂的树形结构中,先序输出叶结点.txt
- 列出所有祖先结点的概念通常与树形结构或图论中的节点相关.txt
- 基于matlab实现潮流计算程序,MATLAB潮流计算程序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈