久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 用STc15f104e單片機做了個學習型紅外遙控開關程序分享給大家 [打印本頁]

作者: ll13536121668    時間: 2019-8-27 15:22
標題: 用STc15f104e單片機做了個學習型紅外遙控開關程序分享給大家
用STc15f104e做了個學習型紅外遙控開關
是上電學習的不帶按鍵的,          上電學習指示燈閃爍,按遙控器,指示燈滅了下, 學習開機鍵成功。
指示燈繼續閃,再按遙控器,指示燈滅了,學習關機鍵成功,進入待機狀態。
上電2秒不學習退出,進入待機狀態。

電路原理圖如下:


這個是上電學習型紅外遙控開關,須要學習開,和關,須要學習兩只按鍵,

單片機源程序如下:
#include "STC15F104E.H"
#include <intrins.h>
#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;
}*/

那位師博能修改一下程序改成學習一只按鍵就有開,和關的功能,修改分亨一下謝謝大家!

全部資料51hei下載地址:
上電自動學習型紅外遙控開關.rar (1.49 KB, 下載次數: 183)

作者: addbook    時間: 2019-8-27 17:53
好資源,收藏先
作者: zlgmo    時間: 2019-8-27 23:25
學習學習!謝謝分享
作者: jmkl128    時間: 2019-8-28 05:36
好資源,收藏先
作者: 風158    時間: 2019-8-28 07:04
可用反相函數完成單鍵開和關。
作者: ll13536121668    時間: 2019-8-28 10:18
風158 發表于 2019-8-28 07:04
可用反相函數完成單鍵開和關。

勞煩師傅修改上傳一下謝謝

作者: 風158    時間: 2019-8-28 19:30
你這個程序用了T0和T1兩個定時器,無法使用性能更好的stc15w系列。我有一個程序只用T0一個定時器,兼容性更強,并根據你的電路做了修改。已發新帖。等審核通過后可搜索:兩路學習型風扇遙控開關帶自然風
作者: ll13536121668    時間: 2019-8-29 10:22
風158 發表于 2019-8-28 19:30
你這個程序用了T0和T1兩個定時器,無法使用性能更好的stc15w系列。我有一個程序只用T0一個定時器,兼容性更 ...

我還有一個15F104W版本的  ,功能也是一樣,上電學習的不帶按鍵的,上傳給你看看,
修改一下程序改成學習一只按鍵就有開,和關的功能,修改分亨一下謝謝
作者: ll13536121668    時間: 2019-8-29 10:23
15F104W學習遙控開關

15F104W學習遙控開關.rar

4.08 KB, 下載次數: 83, 下載積分: 黑幣 -5


作者: 風158    時間: 2019-8-29 11:50
我剛發的15W104的遙控程序,兼容15F104。在這里:http://m.zg4o1577.cn/bbs/dpj-169020-1.html
作者: ll13536121668    時間: 2019-8-29 15:44
你這個是控制兩路的,能夠用我這個控制一路的程序修改嗎謝謝
作者: QZQ1973    時間: 2019-8-29 16:30
學習學習!謝謝分享!
作者: 風158    時間: 2019-8-29 19:13
我上傳的那個兩路遙控程序已被我改成一路了,一個按鍵控制開關,另一個按鍵只是控制延時,形成自然風。實際使用時還可以只學習一個按鍵,僅實現開關機就行。
有興趣的話就自己改程序吧,DIY的樂趣就在于自己動手。我也是剛玩單片機沒多久。
作者: sgsg11    時間: 2019-8-29 19:19
謝謝分享
作者: yxfaigz    時間: 2019-8-30 09:30
感謝分享。學習學習!
作者: ll13536121668    時間: 2019-8-31 06:48
風158 發表于 2019-8-29 11:50
我剛發的15W104的遙控程序,兼容15F104。在這里:http://m.zg4o1577.cn/bbs/dpj-169020-1.html

師傅你好:你會給這程序用中文注釋定義嗎,上傳過來,謝謝

作者: zimo123    時間: 2019-8-31 22:00
學習學習!謝謝分享!
作者: ll13536121668    時間: 2019-9-1 18:43
zimo123 發表于 2019-8-31 22:00
學習學習!謝謝分享!

師傅你好:你會給這程序用中文注釋定義嗎,上傳過來,謝謝
作者: 15118653620    時間: 2019-9-1 23:10
謝謝分享
作者: 苦瓜茶    時間: 2019-9-2 09:32
感謝樓主分享
作者: rrqxx    時間: 2019-9-3 20:15

15F104W學習遙控開關
作者: alunli    時間: 2019-9-4 12:28
學習學習!謝謝分享!
作者: 墨言007    時間: 2019-9-6 07:55
不錯不錯,學習學習

作者: myhj    時間: 2019-9-12 13:38
我整了個電路,咋不能工作呢?
作者: ghuk    時間: 2019-9-12 13:59
一直以來,都想自己搞個遙控器。謝謝分享。
作者: yfpc2006    時間: 2019-9-20 01:18
if(IR_ok)
        {
            if(OKCode==ON)
            {
                JIDIANQU=~JIDIANQU;
            }
            IR_ok=0;
        }
作者: yfpc2006    時間: 2019-9-20 01:19
if(IR_ok)
{
    if(OKCode==ON)
    {
        if(JIDIANQU==1)
            JIDIANQU=0;
        else
            JIDIANQU=1;
    }
    if(OKCode==OFF)
    {
        if(JIDIANQU==1)
            JIDIANQU=0;
        else
            JIDIANQU=1;
    }
    IR_ok=0;
}
作者: yxfaigz    時間: 2019-9-20 08:51
感謝分享?梢越梃b學習學習。
作者: ll13536121668    時間: 2019-9-20 11:47
yfpc2006 發表于 2019-9-20 01:19
if(IR_ok)
{
    if(OKCode==ON)

師博你好不知道什么修改可以把,修改好的復制上傳嗎?謝謝
作者: yfpc2006    時間: 2019-9-20 19:33
ll13536121668 發表于 2019-9-20 11:47
師博你好不知道什么修改可以把,修改好的復制上傳嗎?謝謝

你想表達什么?

作者: yfpc2006    時間: 2019-9-20 19:37
        if(IR_ok)
        {
            if(OKCode==ON)
            {
                //JIDIANQU=0;
                                if(JIDIANQU == 1)
                                        JIDIANQU = 0;
                                else
                                        JIDIANQU = 1;

            }
            if(OKCode==OFF)
            {
                //JIDIANQU=1;
                                if(JIDIANQU == 1)
                                        JIDIANQU = 0;
                                else
                                        JIDIANQU = 1;
            }
            IR_ok=0;
        }

51黑論壇_上電自動學習型紅外遙控開關.rar

7.47 KB, 下載次數: 41, 下載積分: 黑幣 -5


作者: ll13536121668    時間: 2019-9-22 01:20
yfpc2006 發表于 2019-9-20 19:37
if(IR_ok)
        {
            if(OKCode==ON)

測試了原來也是學習兩次,兩只紅外遙控按鍵,都能單獨開和關,師傅可以最增加一路端口,用兩只紅外遙控按鍵,分別給兩只繼電器單獨控制嗎?謝謝修改傳上傳
作者: 馨雨    時間: 2019-9-22 16:29
謝謝樓主分享                  
作者: ll13536121668    時間: 2019-9-23 08:44
ll13536121668 發表于 2019-9-22 01:20
測試了原來也是學習兩次,兩只紅外遙控按鍵,都能單獨開和關,師傅可以最增加一路端口,用兩只紅外遙控按 ...

師傅可以最增加一路端口,用兩只紅外遙控按鍵,分別給兩只繼電器單獨控制嗎?謝謝修改
上傳
作者: 1120941330    時間: 2019-10-15 11:12
謝謝樓主分享。收藏學習
作者: 1120941330    時間: 2019-10-15 11:12
謝謝樓主分享
作者: 158158    時間: 2019-10-19 16:48
謝謝了,在學習中。
作者: 蛋鐵    時間: 2019-10-20 11:42
感謝分享。!
作者: luoshi133    時間: 2020-1-7 05:29
一直在找這方面的資料,謝謝分享。
作者: 屋頂的懶貓    時間: 2020-1-12 12:37
學習學習!謝謝分享!
作者: 15250314250    時間: 2020-1-25 23:12
剛好要這類的程序,,感謝樓主
作者: lzb1989666    時間: 2020-1-28 11:21
你這個程序吧遙控部分刪除,然后用一個引腳做按鍵開關檢測。把遙控引導頭處加一個if判斷按鍵情況就行。vx441593983,可以幫你
作者: wbwcf13e    時間: 2020-1-29 08:33
學習學習,謝謝分享!
作者: 0720    時間: 2020-1-29 13:11
謝謝分享!
作者: bg5skf    時間: 2020-1-30 17:17
謝謝分享!只是這電路圖畫的有點那個。。。
作者: sasafair    時間: 2020-3-23 22:07
電路有問題,極易燒穩壓管,穩壓管一完, 單片機也完
作者: 夏雨微涼    時間: 2020-3-27 17:33
厲害啊
作者: 夏雨微涼    時間: 2020-3-29 11:16
還是很困惑。
作者: 13487086265    時間: 2020-3-30 08:51
可以做成用存儲芯片存儲紅外碼,按鍵更新
作者: 新鄉家電維修    時間: 2020-3-30 09:55
很好的東西,我做的遙控開關是隨時可以學習按鍵,單鍵開關,連續6次2秒內按同一個按鍵就自動學習
作者: Kethno    時間: 2020-3-30 13:45
好資源,收藏先
作者: shinying110    時間: 2020-4-9 10:04
謝謝分享,正好需要此類資料!
作者: 15618564861    時間: 2020-4-9 11:07
非常好先收藏
作者: 神出沒    時間: 2020-4-9 12:27
我也需要學習學習
作者: hei51com    時間: 2020-4-17 15:44
感謝分享,有空學習一下
作者: ll13536121668    時間: 2020-5-8 16:27
lzb1989666 發表于 2020-1-28 11:21
你這個程序吧遙控部分刪除,然后用一個引腳做按鍵開關檢測。把遙控引導頭處加一個if判斷按鍵情況就行。vx44 ...

師傅你好:能修改上傳嗎謝謝
作者: 夏河    時間: 2020-5-13 11:10
謝謝樓主分享
作者: gdgmlzw    時間: 2020-6-1 22:49
謝謝分享,收藏一下
作者: happy粥    時間: 2020-6-2 08:38
nice不錯
作者: zjdaty    時間: 2020-6-2 13:49
學習了 不錯不錯  樓主很有想法 啊
作者: 小新1080    時間: 2020-6-2 15:44
好厲害,拿走學習學習,謝謝
作者: adasrwe    時間: 2020-6-10 18:29
非常的不錯很好
作者: sliver_q    時間: 2020-6-11 08:43
謝謝分享!!
作者: richardlin1818    時間: 2020-6-11 08:47
謝謝分享!
作者: hei靚仔    時間: 2020-6-11 09:43
感謝分享資源
作者: daocheng    時間: 2020-6-26 14:26
測試了原來也是學習兩次,兩只紅外遙控按鍵,都能單獨開和關,師傅可以最增加一路端口,用兩只紅外遙控按鍵,分別給兩只繼電器單獨控制嗎?謝謝修改傳上傳
感謝分享資源
作者: 阿光123123    時間: 2020-6-27 14:41
謝謝分享
作者: 2467148052    時間: 2020-6-27 16:36
謝謝分享
作者: 超級賽亞人8402    時間: 2022-9-15 22:59
謝謝分享,怎么收藏來的
作者: 超級賽亞人8402    時間: 2022-9-20 21:57
新鄉家電維修 發表于 2020-3-30 09:55
很好的東西,我做的遙控開關是隨時可以學習按鍵,單鍵開關,連續6次2秒內按同一個按鍵就自動學習

你發的主題里為什么不說要連續6次2秒內按同一個按鍵就自動學習
作者: mcu_samkan    時間: 2022-9-24 10:58
感謝樓主分享,學習下先。
作者: xiake    時間: 2024-12-25 11:02
學習學習!謝謝分享!
作者: pq1972    時間: 2024-12-25 21:05
謝謝樓主分享。收藏學習,慢慢研究
作者: momika    時間: 2024-12-30 17:51
感謝樓主共享資料
作者: 1720196612    時間: 2025-1-17 14:40

好資源,向大師學習
作者: fieufhiuhf    時間: 2025-1-17 17:34
感謝 分享,好人卡。
作者: safoji    時間: 2025-3-6 09:21
感謝樓主分享




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久精品国产 | 国产成人综合一区二区三区 | 中文字幕一二三 | 午夜理伦三级理论三级在线观看 | 一区二区三区四区在线 | 日韩av一区二区在线观看 | 最新国产精品视频 | 国产91亚洲精品 | 中文字幕av亚洲精品一部二部 | 欧美一级大片免费看 | 一区二区三区四区免费观看 | 91天堂网 | 久久久久九九九九 | 欧洲亚洲视频 | 亚洲一二三区免费 | 91福利在线观看 | 亚洲视频在线免费 | 三级黄色片在线播放 | 成人福利网站 | 国产精品视频免费看 | 6996成人影院网在线播放 | 九九热精品视频在线观看 | 日韩av大片免费看 | 天天操夜夜艹 | 中文字幕国产高清 | 久久久蜜臀国产一区二区 | 成人午夜激情 | 成人国产午夜在线观看 | 在线只有精品 | 欧美国产日韩精品 | 亚洲电影第三页 | 午夜性视频 | 国产中文字幕网 | 中国大陆高清aⅴ毛片 | 免费一区 | 午夜免费电影院 | 伊人网综合| 狼色网 | 成人免费区一区二区三区 | 精品国产色 | 精品91久久 |