幸运时时彩平台

用STc15f104e单片机做了个学习型红外遥控开关程序

2020-01-31来源: 51hei关键字:STc15f104e  单片机  红外遥控开关

用STc15f104e做了个学习型红外遥控开关、


是上电学习的不带按键的,=上电学习指示灯闪烁,按遥控器,指示灯灭了下, 学习开机键成功。


幸运时时彩平台指示灯继续闪,再按遥控器,指示灯灭了,学习关机键成功,进入待机状态。


上电2秒不学习退出,进入待机状态。

电路原理图如下:
 

这个是上电学习型红外遥控开关,须要学习开,和关,须要学习两只按键,

单片机源程序如下:
#include "STC15F104E.H"
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CPU_Fosc 12000000UL//12M晶振
#define M   1//时钟
#define Tc 100 //us采样 
#define TH_0 (65536-CPU_Fosc/100*Tc/M/10000)/256
#define TL_0 (65536-CPU_Fosc/100*Tc/M/10000)%256
#define TH_1 (65536-CPU_Fosc/100*5/M/10)/256
#define TL_1 (65536-CPU_Fosc/100*5/M/10)%256
#define delaytime 0x83
/*********************************************/
sbit IR = P3^4;//红外
sbit LED=P3^3;//学习指示灯
sbit JIDIANQU=P3^0;//可控硅
uint OKCode;
uint ON,OFF;
uchar tim1,tim2,sec;
bit  shan,IR_ok;
/*********************************************/
union
{
    ulong longcode;
    uchar p[4];
} Code;
/*********************************************/
void Delay(uint t);
void InitTimer();
void IAP_disable();
void byte_write(uint addr, uchar dat);
void SectorErase(uint sector_addr);
uchar byte_read(uint addr);
/********************************************/
/********************* 主函数 *************************/
void main()
{
    P3=0xFF;
    ON=byte_read(0)<<8;
    ON|=byte_read(1);
    OFF=byte_read(0x200)<<8;
    OFF|=byte_read(0x201);
    InitTimer();
    tim1=tim2=sec=0;

    while(sec<2)
    {  LED=shan;
        if(IR_ok)
        {
            SectorErase(0);
            byte_write(0,Code.p[1]);
            byte_write(1,Code.p[2]);
            ON=OKCode;
            IR_ok=0;
            LED=1;
            Delay(400);
            tim1=tim2=sec=0;
            while(sec<2)
            {
                    LED=shan;
                if(IR_ok)
                {
                    SectorErase(0x200);
                    byte_write(0x200,Code.p[1]);
                    byte_write(0x201,Code.p[2]);
                    OFF=OKCode;
                    IR_ok=0;

                    break;
                }
            }
            break;
        }
    }
    LED=1;
    TR1=0;
    while(1)
    {
        if(IR_ok)
        {
            if(OKCode==ON)
            {
                JIDIANQU=0;
            }
            if(OKCode==OFF)
            {
                JIDIANQU=1;
            }
            IR_ok=0;
        }
    }
}
/***********************************/
void InitTimer()
{
#if (M==1)
    AUXR=0xc0;//定时器1T时钟
#endif
    TH0=TH_0;
    TL0=TL_0;
    TH1=TH_1;
    TL1=TL_1;
    EA=ET0=TR0=ET1=TR1=1;
}
/***********************************/
void Delay(uint t)
{
    uchar a,b;
    for(; t>0; t--)
        for(b=222; b>0; b--)
            for(a=12; a>0; a--)
            {
                ;
            }
}
/***********************************/
void timer1() interrupt 3 using 1
{
    if(++tim1>=40)
    {
        tim1=0;
        shan=!shan;
        if(++tim2>=5)
        {
            tim2=0;
            ++sec;

        }
    }
}
/***********************************/
void timer0() interrupt 1  using 2
{
        static uint Step;
    static uchar Count;
        static bit IRb,IRa,IRsync;

    if(IR_ok)
    {
        return;
    }
    IRb = IRa;
    IRa = IR;
    ++Step;
    if(IRb && !IRa)
    {
        if(Step>(14000/Tc))
        {
            IRsync=0;
        }
        else if(IRsync)
        {
            if(Step>(3000/Tc))
            {
                IRsync=0;
            }
            else
            {
                Code.longcode<<=1;
                if(Step>(1500/Tc))
                {
                    Code.longcode|=1;
                }
                if (--Count==0)
                {
                    if(Code.p[2]=~Code.p[3])
                    {
                        OKCode=Code.longcode>>8;
                        IR_ok=1;
                    }
                    IRsync=0;
                }
            }
        }
        else if (Step>(9000/Tc-4)&&Step<(13500/Tc+4))
        {
            IRsync=1 ;
            Count=32;
        }
       Step=0;
    }
}
/***********************************/
void byte_write(uint addr, uchar dat)
{
    IAP_CONTR=delaytime;
    IAP_ADDRH=addr>>8;
    IAP_ADDRL=addr;
    IAP_CMD=0x02;
    IAP_DATA=dat;
    IAP_TRIG=0x5a;
    IAP_TRIG=0xa5;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    IAP_disable();
}
/*********************************/
void SectorErase(uint sector_addr)
{
    IAP_CONTR=delaytime;
    IAP_ADDRH=(sector_addr&0xfe00)>>8;
    IAP_ADDRL=sector_addr;
    IAP_CMD=0x03;
    IAP_TRIG=0x5a;
    IAP_TRIG=0xa5;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    IAP_disable();
}
/********************************/
uchar byte_read(uint addr)
{
    IAP_CONTR=delaytime;
    IAP_ADDRH=addr>>8;
    IAP_ADDRL=addr;
    IAP_CMD=0x01;
    IAP_TRIG=0x5a;
    IAP_TRIG=0xa5;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    IAP_disable();
    return (IAP_DATA);
}
/**********************************/
void IAP_disable()
{
    IAP_CONTR=0;
    IAP_CMD=0;
    IAP_TRIG=0;
    IAP_ADDRH=0x80;
    IAP_ADDRL=0;
}
/*********************************/
/*uchar reverse8( uchar c )
{
    c=(c&0x55)<<1|(c&0xAA)>>1;
    c=(c&0x33)<<2|(c&0xCC)>>2;
    c=(c&0x0F)<<4|(c&0xF0)>>4;
    return c;
}*/

关键字:STc15f104e  单片机  红外遥控开关 编辑:什么鱼 引用地址:http://news.sonata9.com/mcu/ic486810.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机+JQ6500语音模块使用代码
下一篇:单片机驱动TEA5767 FM立体声收音机C51通用源码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC15F2K60S2内E2PROM应用
区要分开来,以使程序不会遭到破坏。这样就节省了片外资源,使用起来也更加方便。下面就详细介绍STC 单片机内置EEPROM 及其使用方法2.STC15F2K60S2系列单片机的内部结构图STC15F2K60S2系列单片机的内部结构框图如下图所示,STC15F2K60S2系列单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、IO口、高速A/D转换、看门狗、UART高速异步串行通信口1/串行通信口2,CCP/PWM/PCA,一组高速同步串行端口SPI,片内高精度R/C时钟及高可靠复位等模块,STC15F2K60S2系列单片机几乎包含了数据采集和控制中的所有单元模块。  
发表于 2018-06-20
STC15F2K60S2内E2PROM应用
基于单片机STC15F104E的开窗机控制器设计
    本文针对一般家庭对自动开窗机的实际需要,利用单片机STC15F104E设计了一种开窗机控制器。文中阐述了系统组成及各模块的功能,并给出了具体的电路图,讨论了程序的设计方法。实际测试表明,电机开/关窗动作、堵转检测、行程检测正常,运行可靠。    自动化窗体作为楼宇自动化的一个重要组成部分,逐渐受到重视,越来越多的自动窗体被应用到各种建筑中。大型楼宇中若干个开窗器构成一个智能网络,驱动百叶、窗户、消防门等设备,承担起遮阳、开窗、通风、排烟、消防隔离等任务。而对于一般家庭用户来讲,窗户数量有限,通常也无组网的必要,所需的是一种具有一定智能化、工作可靠且成本低廉的开窗机。针对此需求,利用
发表于 2018-03-21
基于单片机STC15F104E的开窗机控制器设计
STC11F02E_EEPROM 头文件
/*************************************************************/ /*****File  Function :  STC11F02E_EEPROM Read and Write  *****/ /*****Program Author :  ZhengWen(ClimberWin)             *****/ /*****Compile Date   :  2009
发表于 2016-09-06
用STC15F104E单片机制作闪灯
用STC15F104E单片机,就是一个定时器,上电开始计时,LED每秒闪一次,9小时后继电器吸合3秒,然后释放,计时器重新计时。如此循环。 #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; #define SYSclk 6000000L   #define MODE1T        //Timer clock mode, commendt this line is 12T mode, uncomment is 1T mode #ifdef
发表于 2015-07-08
利用STC11F02E的RS232/RS485转换器设计方案
的一种方法。传统的基于单片机设计的RS232/RS485转换器存在着以下不足之处: (1)采用的单片机和外围器件个数较多,给设计带来不便,也不利于降低成本,减小体积; (2)设置不灵活,不能改变波特率和通信方式,或者更改参数不方便,使通用性受限。 鉴于以上不足,本文采用宏晶科技公司生产的增强型51单片机STC11F02E为核心设计了一款RS232/RS485转换器来弥补这些缺陷,降低了成本,减小了体积,同时能够方便地进行波特率和通信方式的设置,增强了其通用性;而且单片机的可编程方式也方便了转换器的功能扩展,灵活性大大增强。 转换器的总体结构概述 转换器主要由三部分组成,分别为:RS232电平转TTL电平模块、RS485
发表于 2015-06-26
基于52单片机控制编码器显示程序
#include "reg52.h"    #define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;sbit DIR=P1^0;sbit STEP=P1^1;sbit K1=P3^1;sbit K2=P3^0;typedef unsigned int u16;   //对数据类型进行声明定义typedef unsigned char
发表于 2020-02-08
小广播
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 sonata9.com, Inc. All rights reserved
500彩票网 幸运时时彩 河北11选5走势图 亿信彩票开奖直播网 亿信彩票主页 山东十一运夺金开奖结果 北京pk10 幸运时时彩 幸运时时彩开奖结果 河北11选5开奖