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

標(biāo)題: stc8h單片機(jī)做的紅外遙控器程序,帶休眠電流0.4ua,帶電池電壓檢測(cè),帶串口調(diào)試 [打印本頁(yè)]

作者: pfdqwp    時(shí)間: 2022-7-10 13:47
標(biāo)題: stc8h單片機(jī)做的紅外遙控器程序,帶休眠電流0.4ua,帶電池電壓檢測(cè),帶串口調(diào)試
stc8h做的紅外遙控器,休眠電流0.4ua,帶電池電壓檢測(cè),帶串口調(diào)試,注釋齊全,和大家探討一下!
原理圖和布線(xiàn)如下:


單片機(jī)源程序如下:

//---------------------注意!!!!!--------------------------
//下載時(shí),下載界面"硬件選項(xiàng)"中下面的項(xiàng)要設(shè)置如下:
//   1. 設(shè)置用戶(hù)EEPROM大小為 >1K。
//   2. 在程序的結(jié)束處添加重要測(cè)試參數(shù)
//   3. 不勾選  允許低壓復(fù)位(禁止低壓中斷)。
//   4. 低壓檢測(cè)電壓  2.00V
//-------------------------------------------------------------

#include  "MAIN.H"
#include  "TIMER.H"
#include  "key.h"
#include  "urat1.h"
#include  "led.h"
#include  "ir_tx.h"
#include  "BAT_AD.H"
#include  "PownOn_Save.H"

void Delay1ms(unsigned int n)      //n*1ms 11.0592MHz,STC-Y6
{
        unsigned char i, j;
        while(n)
        {
                i = 15;
                j = 90;
                do
                {
                        while (--j);
                }
                while (--i);
                n--;
        }
}

void main(void)
{
        P0M1 = 0x00;
        P0M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P1M1 = 0x00;
        P1M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P2M1 = 0x00;
        P2M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P3M1 = 0x00;
        P3M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P4M1 = 0x00;
        P4M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P5M1 = 0x00;
        P5M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P6M1 = 0x00;
        P6M0 = 0x00; //設(shè)置為準(zhǔn)雙向口
        P7M1 = 0x00;
        P7M0 = 0x00; //設(shè)置為準(zhǔn)雙向口

        P0 = 0XFF;
        P1 = 0XFF;
        P2 = 0XFF;
        P3 = 0XFF;
        P4 = 0XFF;
        P5 = 0XFF;
        P6 = 0XFF;

        IR_TX  = 0;                                                //IR+LED5
        Delay1ms(300);
        IR_TX  = 1;
        LD1_25 = 0;                 //風(fēng)速25%
        Delay1ms(300);
        LD1_25 = 1;                 //風(fēng)速25%
        LD2_50 = 0;                 //風(fēng)速50%
        Delay1ms(300);
        LD2_50 = 1;                 //風(fēng)速50%
        LD3_75 = 0;                 //風(fēng)速75%
        Delay1ms(300);
        LD3_75 = 1;                 //風(fēng)速75%
        LD4_100 = 0;                 //風(fēng)速100%
        Delay1ms(300);
        LD4_100 = 1;                 //風(fēng)速100%

        WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_32);//1.13s喂狗
        led_init();                                                      //led IO初始化
        ir_init();                        //紅外PWM初始化
        key_init();                       //按鍵IO初始化
        timer0_init();                    //定時(shí)器0初始化
        timer1_init();                    //定時(shí)器1初始化
        timer3_init();                    //定時(shí)器3初始化
        uart1_init();                                                          //串口1初始化
        BAT_AD_init();                    //BAT_AD初始化
  EEPROM_init();                    //EEPROM初始化
  
        EA = 1;                                       //打開(kāi)總中斷

        Delay1ms(20);
        uart1_SendString("\r\n yaokong_IR-Tx V1.0 遙控器");//串口1
        uart1_SendString("\r\n PCB: LXWP-003 V1.0 ");//串口1
  uart1_SendString("\r\n 軟件版本: V1.1 2021/12/29");//串口1
  uart1_SendString("\r\n 已上電次數(shù):");        //串口1
  uart1_Sendword(PownOn_cnt / 1000 + 48); //發(fā)送用戶(hù)碼千位
        uart1_Sendword(PownOn_cnt % 1000 / 100 + 48); //發(fā)送用戶(hù)碼百位
        uart1_Sendword(PownOn_cnt % 100 / 10 + 48); //發(fā)送用戶(hù)碼十位
        uart1_Sendword(PownOn_cnt % 10 + 48);   //發(fā)送用戶(hù)碼個(gè)位
  
        while(1)
        {
                WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_32);//1.13s喂狗
                KeyScan();
                key_gongneng();                 //鍵功能
                ir_tx_data();                   //發(fā)射一幀數(shù)據(jù)

                fs_led();                       //風(fēng)速顯示
        }
}

/*******************  功能說(shuō)明  測(cè)試OK *************************/
//模擬NEC編碼,紅外發(fā)射程序,能設(shè)置用戶(hù)碼.
//使用PWM4產(chǎn)生38KHZ載波, 1/3占空比, 每個(gè)38KHZ周期發(fā)射管發(fā)射9us,關(guān)閉26.3us.
/***************************************************************/
#include  "ir_tx.h"
#include  "key.h"
#include  "urat1.h"
#include  "BAT_AD.H"

#define IR_Fosc     37900UL                          //定義IR頻率
unsigned int   tx_cnt;            //38KHZ脈沖計(jì)數(shù), 紅外頻率為38KHZ=周期26.3us

unsigned char  user_data;                            //用戶(hù)數(shù)據(jù)碼, 0-255
unsigned char  user_data_time;    //用戶(hù)數(shù)據(jù)碼發(fā)送間隔時(shí)間
void ir_init()                    //紅外PWM初始化
{
  P3M1 &= 0x10;                   //P34
        P3M0 &= 0x10;                   //設(shè)置為準(zhǔn)雙向口
  IR_TX = 1;                                                          //關(guān)閉發(fā)射io口
  
        P_SW2 |= 0x80;
        PWMA_CCER2 = 0x00;                                             //寫(xiě) CCMRx 前必須先清零 CCxE 關(guān)閉通道
        PWMA_CCMR4 = 0x60;                                             //設(shè)置 PWM4 模式1 輸出
  PWMA_PS = 0xC0; //4P_4 輸出腳選擇位, 0x00:P1.6, 0x40:P2.6, 0x80:P6.6, 0xC0:P3.4
        PWMA_ARR = MAIN_Fosc/IR_Fosc;   //設(shè)置周期時(shí)間0x0123=291,0x0124=292
                                                                                                                                        //11.0592MHz/(37.9K/38K)=38KHz/291.03=37.9KHz/292(291.8)
        PWMA_CCR4 = MAIN_Fosc/IR_Fosc/2;//設(shè)置占空比時(shí)間291/3=97,33%
        PWMA_ENO = 0x40;                                                     //使能 PWM4P 輸出
        PWMA_BKR = 0x80;                                                     //使能主輸出
  IP2 |= 0x04;                    //1級(jí)中斷優(yōu)先級(jí)
        PWMA_CR1 |= 0x01;                                             //PWMA開(kāi)始計(jì)時(shí)
}

void IR_TxPulse(unsigned int pulse)                //發(fā)送脈沖函數(shù)
{
        P_SW2 |= 0x80;
        tx_cnt = pulse;
        PWMA_CCER2 = 0x00;                                             //寫(xiě) CCMRx 前必須先清零 CCxE 關(guān)閉通道
        PWMA_CCMR4 = 0x60;                                             //設(shè)置 PWM4 模式1 輸出
        PWMA_CCER2 = 0x30;                                             //低電平有效, 使能 CC4E 通道
        PWMA_SR1 = 0;                   //清標(biāo)志位
        PWMA_CNTR = 0;                  //清計(jì)數(shù)器
        PWMA_IER = 0x10;                                               //使能捕獲/比較 4 中斷  
        while(tx_cnt);
}

void IR_TxSpace(unsigned int pulse)                //發(fā)送空閑函數(shù)
{
        P_SW2 |= 0x80;
        tx_cnt = pulse;
        PWMA_CCER2 = 0x00;                                             //寫(xiě) CCMRx 前必須先清零 CCxE 關(guān)閉通道
        PWMA_CCMR4 = 0x40;                                             //設(shè)置 PWM4 強(qiáng)制為無(wú)效電平
        PWMA_CCER2 = 0x30;                                             //低電平有效,使能 CC4E 通道
        PWMA_SR1 = 0;                   //清標(biāo)志位
        PWMA_CNTR = 0;                  //清計(jì)數(shù)器
        PWMA_IER = 0x10;                                               //使能捕獲/比較 4 中斷
        while(tx_cnt);
}

void IR_TxByte(unsigned char dat)        //發(fā)送一個(gè)字節(jié)函數(shù)
{
        unsigned char i;
        for(i = 0; i < 8; i++)          //先發(fā)bit0
        {
    IR_TxPulse(21);                                                    //發(fā)送高電平脈沖,都是0.5625ms
                if(dat & 1)                   //對(duì)應(yīng)高電平位
                {
                        IR_TxSpace(63);             //發(fā)送空閑函數(shù),發(fā)送63個(gè)38khz脈沖
                }
                else                          //對(duì)應(yīng)低電平位
                {
                        IR_TxSpace(21);             //發(fā)送空閑函數(shù),發(fā)送21個(gè)38khz脈沖
                }
                dat >>= 1;                          //下一個(gè)位
        }
}

void ir_tx_data()                  //發(fā)射一幀數(shù)據(jù)
{
        if(user_data)                                                          //檢測(cè)到鍵碼
        {               
                //一幀數(shù)據(jù)最小長(zhǎng)度 = 9 + 4.5+ 24 * 1.125 + 8 * 2.25 + 0.5625  = 59.0625 ms
                //一幀數(shù)據(jù)最大長(zhǎng)度 = 9 + 4.5+ 8 * 1.125 + 24 * 2.25  + 0.5625 = 77.0625 ms
                IR_TxPulse(342);                                       //對(duì)應(yīng)9ms,                同步頭脈沖9ms
                IR_TxSpace(171);                                       //對(duì)應(yīng)4.5ms,        同步頭空閑4.5ms
   
                IR_TxByte(User_address % 256); //發(fā)用戶(hù)地址碼低字節(jié)
                IR_TxByte(User_address / 256); //發(fā)用戶(hù)地址碼高字節(jié)
                IR_TxByte(user_data);          //發(fā)用戶(hù)數(shù)據(jù)碼
                IR_TxByte(~user_data);         //發(fā)用戶(hù)數(shù)據(jù)反碼
   
    IR_TxPulse(21);                                        //結(jié)束碼,0.5625ms
   
    user_data_uart1();             //uart1顯示鍵功能
                user_data = 0;
                bat_uart();                    //發(fā)送電池電壓
        }
}

Keil代碼下載: Keil代碼.7z (79.92 KB, 下載次數(shù): 190)

作者: lkc8210    時(shí)間: 2022-7-11 10:32
感謝分享
最近也在弄紅外遙控
本來(lái)用delay來(lái)控制發(fā)射管的開(kāi)關(guān)
但一改變晶振頻率就要修改delay函數(shù)
看到你的延時(shí)方法茅室頓開(kāi)
收下了

另外,3V串100歐姆來(lái)驅(qū)動(dòng)發(fā)射管
控制范圍有多遠(yuǎn)?

另另外,為什么用1/3占空比?
作者: pfdqwp    時(shí)間: 2022-7-11 13:33
lkc8210 發(fā)表于 2022-7-11 10:32
感謝分享
最近也在弄紅外遙控
本來(lái)用delay來(lái)控制發(fā)射管的開(kāi)關(guān)

串100歐姆發(fā)射約7,8米,1/3占空比是為了發(fā)射時(shí)省電.
作者: lkc8210    時(shí)間: 2022-7-12 15:01
pfdqwp 發(fā)表于 2022-7-11 13:33
串100歐姆發(fā)射約7,8米,1/3占空比是為了發(fā)射時(shí)省電.

明白~謝謝解答
作者: menwawork    時(shí)間: 2022-12-4 17:53
感謝樓主的無(wú)私分享,剛好想幫RS Media做個(gè)遙控。編程底子不好,希望這個(gè)能用得上。
作者: menwawork    時(shí)間: 2022-12-4 17:55
我有代碼和相關(guān)資料,如果樓主可以幫忙做一個(gè)專(zhuān)用的遙控那就更棒了。當(dāng)然,肯定要給辛苦費(fèi)的。
作者: pfdqwp    時(shí)間: 2023-3-11 02:09
menwawork 發(fā)表于 2022-12-4 17:55
我有代碼和相關(guān)資料,如果樓主可以幫忙做一個(gè)專(zhuān)用的遙控那就更棒了。當(dāng)然,肯定要給辛苦費(fèi)的。

不知你現(xiàn)在還需要不?可以幫你弄下。

作者: 我比黑點(diǎn)子更黑    時(shí)間: 2023-3-11 10:14
pfdqwp 發(fā)表于 2023-3-11 02:09
不知你現(xiàn)在還需要不?可以幫你弄下。

你這個(gè)怎么喚醒的 沒(méi)有看明白
作者: lkc8210    時(shí)間: 2023-3-11 11:39
我比黑點(diǎn)子更黑 發(fā)表于 2023-3-11 10:14
你這個(gè)怎么喚醒的 沒(méi)有看明白



作者: pfdqwp    時(shí)間: 2023-3-11 19:42
lkc8210 發(fā)表于 2023-3-11 11:39

外部中斷!
作者: pfdqwp    時(shí)間: 2023-3-11 19:43
我比黑點(diǎn)子更黑 發(fā)表于 2023-3-11 10:14
你這個(gè)怎么喚醒的 沒(méi)有看明白

K_INT外部中斷。

作者: 我比黑點(diǎn)子更黑    時(shí)間: 2023-3-11 23:21
我喚醒有一個(gè)按鍵忘記放在中斷了  放在普通IO口了  有沒(méi)有其他辦法可以喚醒 據(jù)說(shuō)定時(shí)器中斷喚醒 可以這樣嗎  有沒(méi)有案列
作者: pfdqwp    時(shí)間: 2023-3-12 18:58
我比黑點(diǎn)子更黑 發(fā)表于 2023-3-11 23:21
我喚醒有一個(gè)按鍵忘記放在中斷了  放在普通IO口了  有沒(méi)有其他辦法可以喚醒 據(jù)說(shuō)定時(shí)器中斷喚醒 可以這樣嗎 ...

定時(shí)器中斷不行,如果忘記,可以看下io口中斷。stc8h支持的。

作者: 我比黑點(diǎn)子更黑    時(shí)間: 2023-3-12 23:07
pfdqwp 發(fā)表于 2023-3-12 18:58
定時(shí)器中斷不行,如果忘記,可以看下io口中斷。stc8h支持的。

IO口中斷相關(guān)寄存器 我 研究下 好像這個(gè)寫(xiě)的不明白
作者: 我比黑點(diǎn)子更黑    時(shí)間: 2023-3-13 00:21
pfdqwp 發(fā)表于 2023-3-11 19:43
K_INT外部中斷。

我給外部中斷0 1喚醒好奇怪  我開(kāi)機(jī)要按開(kāi)關(guān)10幾次 后面就能正常喚醒了  前面死活不行  不知道為什么 可以指導(dǎo)下嗎  
作者: wkman    時(shí)間: 2023-3-13 08:20
  簡(jiǎn)單產(chǎn)品,做好接收器就好了(最多定做個(gè)PVC面板),買(mǎi)個(gè)現(xiàn)成的遙控器也才1¥

作者: pfdqwp    時(shí)間: 2023-3-13 14:42
我比黑點(diǎn)子更黑 發(fā)表于 2023-3-13 00:21
我給外部中斷0 1喚醒好奇怪  我開(kāi)機(jī)要按開(kāi)關(guān)10幾次 后面就能正常喚醒了  前面死活不行  不知道為什么 可 ...

應(yīng)該是下降沿喚醒的,你看參考stc8h規(guī)格書(shū)。
作者: billaj    時(shí)間: 2023-3-13 15:19
樓主,能賣(mài)我兩塊板試試嗎
作者: pfdqwp    時(shí)間: 2023-3-14 18:42
billaj 發(fā)表于 2023-3-13 15:19
樓主,能賣(mài)我兩塊板試試嗎

之前公司做過(guò)的產(chǎn)品,我現(xiàn)在手里沒(méi)有這個(gè)板子。
作者: fox_hk    時(shí)間: 2024-11-18 18:55
我正好需要 你正好有。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线性视频 | 91丨九色丨国产在线 | 韩日一级片 | 国产精品一二三四 | 国产福利视频在线观看 | 女人高潮特级毛片 | 精品国产乱码一区二区三 | 在线观看日韩视频 | 中文一区二区 | 久久日韩精品 | 最新国产在线 | 国产精品久久久久久久久久久久久 | 国产91在线看 | 91一区二区三区 | 逼逼操| 国产精品免费一区 | 一区在线观看视频 | 天堂一区二区三区 | 永久黄网站色视频免费观看w | 18在线观看免费入口 | 欧美黄色片在线观看 | 香蕉综合网 | 日韩黄色免费视频 | 国产suv一区二区 | 成人婷婷| 欧美大片一区二区 | 99热国产 | 日韩欧美黄色片 | 这里只有精品视频在线观看 | 欧美视频免费在线观看 | 欧美一区免费 | 天天色影院 | 香蕉视频一区 | 在线观看免费毛片 | 在线视频99 | 国产视频h | 欧美深夜福利 | 天天网综合 | 日韩中文在线观看 | 在线观看黄色片 | 黄色片视频在线观看 |