51单片机,红外NEC协议,ds18b20温度传感器(P3.7),红外接收器7844s,三位一体共阴数码管(段码:P2,位码:P1.1,P1.2,P1.3),上拉电阻A102,接触器(5v)接P1.3,(程序已亲测,放心使用)
单片机源程序如下(源代码的注释非常详细):
- #include"inf.h"
- #include"relay.h"
- uchar IRCOM[5]; //用来存放读取到的红外值 (IrValue[4])
- sbit IRIN=P3^2; //红外接收器数据接口
- //存放按键键值(NEC红外协议)
- uchar code RecvData[]={0x07,0x15,0x09,0x43,0x47,0x0d,0x44,0x40,0x0D,0x0E};
- /***********************************************************
- *函 数 名 :InfInit
- *函数功能 :为外部中断0,做初始化
- *函数参数 :x
- *返 回 值 :无
- ************************************************************/
- void InfInit()
- {
- IT0=1;//下降沿触发
- EX0=1;//打开中断0允许
- EA=1; //打开总中断
- IRIN=1;//初始化端口
- }
- /***********************************************************
- *函 数 名 :delayms
- *函数功能 :延时0.14ms
- *函数参数 :x
- *返 回 值 :无
- ************************************************************/
- static void delayms(unsigned char x) //0.14mS延时程序
- {
- unsigned char i; //定义临时变量
- while(x--) //延时时间循环
- {
- for (i = 0; i<13; i++) {} //14mS延时
- }
- }
- /***********************************************************
- *函 数 名 :IR_IN
- *函数功能 :外部中断0
- *函数参数 :无
- *返 回 值 :无
- ************************************************************/
- void IR_IN() interrupt 0// using 0 //定义INT2外部中断函数
- {
- unsigned char j,k,N=0; //定义临时接收变量
-
- EX0 = 0; //关闭外部中断,防止再有信号到达
- delayms(15); //延时时间,进行红外消抖
- if (IRIN==1) //判断红外信号是否消失
- {
- EX0 =1; //外部中断开
- return; //返回
- }
-
- while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
- {
- delayms(1); //延时等待
- }
- for (j=0;j<4;j++) //采集红外遥控器数据
- {
- for (k=0;k<8;k++) //分次采集8位数据
- {
- while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
- {
- delayms(1); //延时等待
- }
-
- while (!IRIN) //等 IR 变为高电平
- {
- delayms(1); //延时等待
- }
-
- while (IRIN) //计算IR高电平时长
- {
- delayms(1); //延时等待
- N++; //计数器加加
- if (N>=30) //判断计数器累加值
- {
- EX0=1; //打开外部中断功能
- return; //返回
- }
- }
-
- IRCOM[j]=IRCOM[j] >> 1; //进行数据位移操作并自动补零
-
- if (N>=8) //判断数据长度
- {
- IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1
- }
- N=0; //清零位数计录器
- }
- }
-
- if (IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同
- {
- EX0=1; //打开外部中断
- return; //返回
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
遥控控制、温度显示 (最终程序).zip
(76.46 KB, 下载次数: 75)
|