幸运时时彩平台

用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服务号
享受更多官方福利

推荐阅读

stc15f104e单片机+max7219+ds18B02数码管温度显示
成品电路图PCB 图CAD 外壳热转印制PCB板显微镜改台钻打洞元件电路板运行程序  15f104e是1T运行速度,晶体速度11.0529M 使用12T芯片延时降低10倍 #include <reg52.h>#include <intrins.h>#define uchar unsigned charbit flag1s = 0; //1s 定时标志unsigned char T0RH = 0; //T0 重载值的高字节unsigned char T0RL = 0; //T0 重载值的低字节void ConfigTimer0(unsigned int ms);unsigned char code
发表于 2020-08-18
<font color='red'>stc15f104e</font>单片机+max7219+ds18B02数码管温度显示
简易STC15F104E单片机定时报警器制作
非常时期,孩子不能上学,大人没在家,每天早上都睡得十几点,有点过份,所以作个简易定时报警器作闹钟用,主要是配合小米智能插座的网络定时功能用,只是自己的小制作,供有需求的人参考用;制作出来的实物图如下:功能:1.上电时即启动报警;2.定时30S后自动停止;3.报警过程中如有按键按下即停止报警;硬件:1.P32按一个按键,作为取消报警用;2.P35接蜂鸣器,作为报警声;/*/******************************************************************************-------------------------STC15F104E定时
发表于 2020-03-04
简易<font color='red'>STC15F104E</font>单片机定时报警器制作
基于单片机STC15F104E的开窗机控制器设计
    本文针对一般家庭对自动开窗机的实际需要,利用单片机STC15F104E设计了一种开窗机控制器。文中阐述了系统组成及各模块的功能,并给出了具体的电路图,讨论了程序的设计方法。实际测试表明,电机开/关窗动作、堵转检测、行程检测正常,运行可靠。    自动化窗体作为楼宇自动化的一个重要组成部分,逐渐受到重视,越来越多的自动窗体被应用到各种建筑中。大型楼宇中若干个开窗器构成一个智能网络,驱动百叶、窗户、消防门等设备,承担起遮阳、开窗、通风、排烟、消防隔离等任务。而对于一般家庭用户来讲,窗户数量有限,通常也无组网的必要,所需的是一种具有一定智能化、工作可靠且成本低廉的开窗机。针对此需求,利用
发表于 2018-03-21
基于单片机<font color='red'>STC15F104E</font>的开窗机控制器设计
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
基于STC15F104E的开窗机控制器的设计
    自动化窗体作为楼宇自动化的一个重要组成部分,逐渐受到重视,越来越多的自动窗体被应用到各种建筑中。大型楼宇中若干个开窗器构成一个智能网络,驱动百叶、窗户、消防门等设备,承担起遮阳、开窗、通风、排烟、消防隔离等任务。而对于一般家庭用户来讲,窗户数量有限,通常也无组网的必要,所需的是一种具有一定智能化、工作可靠且成本低廉的开窗机。针对此需求,利用单片机STC15F104E设计了一种智能开窗机控制器。1 硬件电路设计    设计的智能开窗机控制器结构框图如图1所示。系统由开关电源模块、电机驱动(TA8429H)模块、控制模块(STC15F104E)及开关状态检测、堵转检测
发表于 2013-05-20
基于<font color='red'>STC15F104E</font>的开窗机控制器的设计
AT90S8515单片机SPI驱动74LS595源程序
AT90S8515使用SPI驱动74LS595。我这里使用了SS口线PB.4,作为74LS595的锁存信号,关键是把PB.4设置为输出。74LS595驱动发光管显示加1计数,我用SPI最高速度,所以显示16位计数高八位,低八位太快,看不清楚。单片机源程序如下://ICC-AVR application builder : 2020/3/30 22:23:31// Target : 8515// Crystal: 8.0000Mhz#include <io8515v.h>#include <macros.h>#define SS_ON PORTB |= BIT(4);     
发表于 2020-09-16
AT90S8515<font color='red'>单片机</font>SPI驱动74LS595源程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 幸运时时彩平台电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 sonata9.com, Inc. All rights reserved
大发时时彩 秒速快3 天津11选5 五分时时彩 500彩票网 大乐购彩票计划群 小米彩票代理 易中彩票开户 小米彩票开奖 彩票高賠率好平台