#include<reg51.h>
#include"define.h"
/************************************************************
函数功能:对4个字节的用户码和键数据码进行解码
说明:解码正确,返回1,否则返回0
出口参数:dat
*************************************************************/
unsigned int LowTime,HighTime; //储存高、低电平的宽度
unsigned char a[4];
unsigned int work11=1;
sbit IR=P3^2;
sbit hw=P2^7;
bit DeCode(void)
{
unsigned char i,j;
unsigned char temp; //储存解码出的数据
for(i=0;i<4;i++) //连续读取4个用户码和键数据码
{
for(j=0;j<8;j++) //每个码有8位数字
{
temp=temp>>1; //temp中的各数据位右移一位,因为先读出的是高位数据
TH0=0; //定时器清0
TL0=0; //定时器清0
TR0=1; //开启定时器T0
while(IR==0) //如果是低电平就等待
; //低电平计时
TR0=0; //关闭定时器T0
LowTime=TH0*256+TL0; //保存低电平宽度
TH0=0; //定时器清0
TL0=0; //定时器清0
TR0=1; //开启定时器T0
while(IR==1) //如果是高电平就等待
;
TR0=0; //关闭定时器T0
HighTime=TH0*256+TL0; //保存高电平宽度
if((LowTime<370)||(LowTime>640))
return 0; //如果低电平长度不在合理范围,则认为出错,停止解码
if((HighTime>420)&&(HighTime<620)) //如果高电平时间在560微秒左右,即计数560/1.085=516次
temp=temp&0x7f; //(520-100=420, 520+100=620),则该位是0
if((HighTime>1300)&&(HighTime<1800)) //如果高电平时间在1680微秒左右,即计数1680/1.085=1548次
temp=temp|0x80; //(1550-250=1300,1550+250=1800),则该位是1
}
a[i]=temp; //将解码出的字节值储存在a[i]
}
if(a[2]=~a[3]) //验证键数据码和其反码是否相等,一般情况下不必验证用户码
// P0=a[2];
return 1; //解码正确,返回1
}
void Int0(void) interrupt 2
{
EX1=0; //关闭外中断0,不再接收二次红外信号的中断,只解码当前红外信号
TH0=0; //定时器T0的高8位清0
TL0=0; //定时器T0的低8位清0
TR0=1; //开启定时器T0
while(IR==0); //如果是低电平就等待,给引导码低电平计时
TR0=0; //关闭定时器T0
LowTime=TH0*256+TL0; //保存低电平时间
TH0=0; //定时器T0的高8位清0
TL0=0; //定时器T0的低8位清0
TR0=1; //开启定时器T0
while(IR==1); //如果是高电平就等待,给引导码高电平计时
TR0=0; //关闭定时器T0
HighTime=TH0*256+TL0; //保存引导码的高电平长度
if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700))
{
//如果是引导码,就开始解码,否则放弃,引导码的低电平计时
//次数=9000us/1.085=8294, 判断区间:8300-500=7800,8300+500=8800.
if(DeCode()==1) // 执行遥控解码功能
{
if(a[2]==0x45)
work11=1;
if(a[2]==0x44)
work11=2;
if(a[2]==0x07|a[2]==0x15|a[2]==0x09)
work11=3;
}
}
EX1=0; //开启外中断EX0
}
没有合适的资源?快使用搜索试试~ 我知道了~
18b20温度检测显示程序51单片机,不同温度对应不同pwm输出.zip
共25个文件
h:4个
obj:4个
c:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 129 浏览量
2023-09-12
10:51:21
上传
评论
收藏 36KB ZIP 举报
温馨提示
18b20温度检测显示程序51单片机,不同温度对应不同pwm输出.zip
资源推荐
资源详情
资源评论
收起资源包目录
18b20温度检测显示程序51单片机,不同温度对应不同pwm输出.zip (25个子文件)
1
18b20
jiema.LST 6KB
18b20.OBJ 6KB
define.h 202B
18b20.c 3KB
18b20.h 526B
18b20_Uv2.Bak 2KB
pwm.h 53B
main.OBJ 7KB
18b20.Opt 2KB
18b20_Opt.Bak 2KB
main.LST 5KB
18b20.lnp 81B
pwm.c 1KB
jiema.OBJ 4KB
18b20.Uv2 2KB
18b20.M51 19KB
jiema.c 3KB
jiema.h 193B
18b20.plg 157B
pwm.OBJ 2KB
pwm.LST 3KB
18b20.hex 4KB
main.c 2KB
18b20.LST 7KB
18b20 17KB
共 25 条
- 1
资源评论
N201871643
- 粉丝: 908
- 资源: 2289
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功