找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1491|回复: 0
打印 上一主题 下一主题
收起左侧

这个程序少了<ir.h> <24c02.H>那位师博能把这个,学习型红外遥控开关....

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:17109 发表于 2019-5-6 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ll13536121668 于 2019-5-7 12:02 编辑

这个程序缺少了<ir.h> <24c02.H>那位师博能把这个,用Keil uVision 4编译   通过生成代码吗?    修改好用压缩包上传,谢谢
#include<AT89X51.H>   //装入AT89X51头文件
#include<ir.h>                        //装入红外解码程序
#include<24c02.H>                //装入24c02读写程序
sbit key=P1^0;                        //定义按键IO
sbit led=P0^0;       //定义指示led
sbit rel=P0^1;                        //定义输出控制脚

unsigned char kaver;  //定义kaver为输出口状态缓存
unsigned char iccdate,irdate;  //定义24c02数据和解码数据

//延时10ms函数,用于开关消抖等
delay10ms()   
{
        unsigned char i,j;         
        for(i=20;i>0;i--)         
        for(j=248;j>0;j--);         
}

//学习红外解码并写入24c02的函数
study()
{
    IR_IN();
         irdate=IRCOM[3];
    iccdate=ReadIIC(W_cmd,0x00,R_cmd);
        if(irdate!=iccdate)        //只在解码结果与读取结果不同时写入24C02
        {
                if(irdate!=0)                        //防止没有接收到红外信号,IRCOM[3]置零时,误写入0
                {
                WP=0;
                WriIIC(W_cmd,0x00,irdate);
                delay10ms();
                WP=1;
                led=0;
                while(key==0);                //学习成功等待按键释放,led停止闪动作为指示
                }
         }
}
//进入学习状态时的led闪动函数
flash()
{
    unsigned char i;
          while(key==0)
          {
             led=~led;
                  for(i=50;i>0;i--)
                                  study();                 
          }
}
//按键模式识别函数
keymod()
{
        unsigned char m=0;
        while(key==0)                          //如果按键按下,开始对按键时间进行计数
        {               
                        delay10ms();                        //计数时间延时
                        m++;
                        delay10ms();                        //计数时间延时
                        if(m>=90)                                //如果计数次数大于90次,等于按键按下时间大于约5秒后,进入led闪动学习模式
                        {
                                m=0;
                                flash();
                        }
        }

         if(m<90)              //如果计数次数小于90,则按键作为开关使用
         {
                 m=0;
                kaver=~kaver;
         }

}
////////////////////主函数////////////////////////////////////
main()
{
        WP=1;                        //24c02写保护
        while(1)
        {
                IRCOM[3]=0;
            IR_IN();                                // 读4字节32位按键编码 ,前16位用户码为IRCOM[1]+IRCOM[2],8位键值码为IRCOM[3]
                irdate=IRCOM[3];                                        //8位键值反码为IRCOM[4] 这里只调用 IRCOM[3]键值码作为数据码
                iccdate=ReadIIC(W_cmd,0x00,R_cmd);
                if(irdate==iccdate)                                                //如果解码结果与24C读取码相同,kaver翻转一次
                {
                        irdate=0;
                        kaver=~kaver;
                }

      if(key==0)         
                        keymod();
                rel=~kaver;
                led=kaver;
        }
}


学习型红外遥控开关.rar

1.14 KB, 下载次数: 16

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表