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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6180|回復: 19
收起左側

stc8h單片機做的紅外遙控器程序,帶休眠電流0.4ua,帶電池電壓檢測,帶串口調試

  [復制鏈接]
ID:82809 發表于 2022-7-10 13:47 | 顯示全部樓層 |閱讀模式
stc8h做的紅外遙控器,休眠電流0.4ua,帶電池電壓檢測,帶串口調試,注釋齊全,和大家探討一下!
原理圖和布線如下:
pcb.PNG 原理圖.PNG pcb3d.PNG

單片機源程序如下:

//---------------------注意!!!!!--------------------------
//下載時,下載界面"硬件選項"中下面的項要設置如下:
//   1. 設置用戶EEPROM大小為 >1K。
//   2. 在程序的結束處添加重要測試參數
//   3. 不勾選  允許低壓復位(禁止低壓中斷)。
//   4. 低壓檢測電壓  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; //設置為準雙向口
        P1M1 = 0x00;
        P1M0 = 0x00; //設置為準雙向口
        P2M1 = 0x00;
        P2M0 = 0x00; //設置為準雙向口
        P3M1 = 0x00;
        P3M0 = 0x00; //設置為準雙向口
        P4M1 = 0x00;
        P4M0 = 0x00; //設置為準雙向口
        P5M1 = 0x00;
        P5M0 = 0x00; //設置為準雙向口
        P6M1 = 0x00;
        P6M0 = 0x00; //設置為準雙向口
        P7M1 = 0x00;
        P7M0 = 0x00; //設置為準雙向口

        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;                 //風速25%
        Delay1ms(300);
        LD1_25 = 1;                 //風速25%
        LD2_50 = 0;                 //風速50%
        Delay1ms(300);
        LD2_50 = 1;                 //風速50%
        LD3_75 = 0;                 //風速75%
        Delay1ms(300);
        LD3_75 = 1;                 //風速75%
        LD4_100 = 0;                 //風速100%
        Delay1ms(300);
        LD4_100 = 1;                 //風速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();                    //定時器0初始化
        timer1_init();                    //定時器1初始化
        timer3_init();                    //定時器3初始化
        uart1_init();                                                          //串口1初始化
        BAT_AD_init();                    //BAT_AD初始化
  EEPROM_init();                    //EEPROM初始化
  
        EA = 1;                                       //打開總中斷

        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 已上電次數:");        //串口1
  uart1_Sendword(PownOn_cnt / 1000 + 48); //發送用戶碼千位
        uart1_Sendword(PownOn_cnt % 1000 / 100 + 48); //發送用戶碼百位
        uart1_Sendword(PownOn_cnt % 100 / 10 + 48); //發送用戶碼十位
        uart1_Sendword(PownOn_cnt % 10 + 48);   //發送用戶碼個位
  
        while(1)
        {
                WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_32);//1.13s喂狗
                KeyScan();
                key_gongneng();                 //鍵功能
                ir_tx_data();                   //發射一幀數據

                fs_led();                       //風速顯示
        }
}

/*******************  功能說明  測試OK *************************/
//模擬NEC編碼,紅外發射程序,能設置用戶碼.
//使用PWM4產生38KHZ載波, 1/3占空比, 每個38KHZ周期發射管發射9us,關閉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脈沖計數, 紅外頻率為38KHZ=周期26.3us

unsigned char  user_data;                            //用戶數據碼, 0-255
unsigned char  user_data_time;    //用戶數據碼發送間隔時間
void ir_init()                    //紅外PWM初始化
{
  P3M1 &= 0x10;                   //P34
        P3M0 &= 0x10;                   //設置為準雙向口
  IR_TX = 1;                                                          //關閉發射io口
  
        P_SW2 |= 0x80;
        PWMA_CCER2 = 0x00;                                             //寫 CCMRx 前必須先清零 CCxE 關閉通道
        PWMA_CCMR4 = 0x60;                                             //設置 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;   //設置周期時間0x0123=291,0x0124=292
                                                                                                                                        //11.0592MHz/(37.9K/38K)=38KHz/291.03=37.9KHz/292(291.8)
        PWMA_CCR4 = MAIN_Fosc/IR_Fosc/2;//設置占空比時間291/3=97,33%
        PWMA_ENO = 0x40;                                                     //使能 PWM4P 輸出
        PWMA_BKR = 0x80;                                                     //使能主輸出
  IP2 |= 0x04;                    //1級中斷優先級
        PWMA_CR1 |= 0x01;                                             //PWMA開始計時
}

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

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

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

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

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

評分

參與人數 1黑幣 +15 收起 理由
lkc8210 + 15 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:161164 發表于 2022-7-11 10:32 | 顯示全部樓層
感謝分享
最近也在弄紅外遙控
本來用delay來控制發射管的開關
但一改變晶振頻率就要修改delay函數
看到你的延時方法茅室頓開
收下了

另外,3V串100歐姆來驅動發射管
控制范圍有多遠?

另另外,為什么用1/3占空比?
回復

使用道具 舉報

ID:82809 發表于 2022-7-11 13:33 | 顯示全部樓層
lkc8210 發表于 2022-7-11 10:32
感謝分享
最近也在弄紅外遙控
本來用delay來控制發射管的開關

串100歐姆發射約7,8米,1/3占空比是為了發射時省電.

評分

參與人數 1黑幣 +15 收起 理由
lkc8210 + 15 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:161164 發表于 2022-7-12 15:01 | 顯示全部樓層
pfdqwp 發表于 2022-7-11 13:33
串100歐姆發射約7,8米,1/3占空比是為了發射時省電.

明白~謝謝解答
回復

使用道具 舉報

ID:89420 發表于 2022-12-4 17:53 | 顯示全部樓層
感謝樓主的無私分享,剛好想幫RS Media做個遙控。編程底子不好,希望這個能用得上。
回復

使用道具 舉報

ID:89420 發表于 2022-12-4 17:55 | 顯示全部樓層
我有代碼和相關資料,如果樓主可以幫忙做一個專用的遙控那就更棒了。當然,肯定要給辛苦費的。
回復

使用道具 舉報

ID:82809 發表于 2023-3-11 02:09 | 顯示全部樓層
menwawork 發表于 2022-12-4 17:55
我有代碼和相關資料,如果樓主可以幫忙做一個專用的遙控那就更棒了。當然,肯定要給辛苦費的。

不知你現在還需要不?可以幫你弄下。
回復

使用道具 舉報

ID:235359 發表于 2023-3-11 10:14 | 顯示全部樓層
pfdqwp 發表于 2023-3-11 02:09
不知你現在還需要不?可以幫你弄下。

你這個怎么喚醒的 沒有看明白
回復

使用道具 舉報

ID:161164 發表于 2023-3-11 11:39 | 顯示全部樓層
我比黑點子更黑 發表于 2023-3-11 10:14
你這個怎么喚醒的 沒有看明白

2023-03-11_113843.png
回復

使用道具 舉報

ID:82809 發表于 2023-3-11 19:42 | 顯示全部樓層
回復

使用道具 舉報

ID:82809 發表于 2023-3-11 19:43 | 顯示全部樓層
我比黑點子更黑 發表于 2023-3-11 10:14
你這個怎么喚醒的 沒有看明白

K_INT外部中斷。
回復

使用道具 舉報

ID:235359 發表于 2023-3-11 23:21 | 顯示全部樓層
我喚醒有一個按鍵忘記放在中斷了  放在普通IO口了  有沒有其他辦法可以喚醒 據說定時器中斷喚醒 可以這樣嗎  有沒有案列
回復

使用道具 舉報

ID:82809 發表于 2023-3-12 18:58 | 顯示全部樓層
我比黑點子更黑 發表于 2023-3-11 23:21
我喚醒有一個按鍵忘記放在中斷了  放在普通IO口了  有沒有其他辦法可以喚醒 據說定時器中斷喚醒 可以這樣嗎 ...

定時器中斷不行,如果忘記,可以看下io口中斷。stc8h支持的。
回復

使用道具 舉報

ID:235359 發表于 2023-3-12 23:07 | 顯示全部樓層
pfdqwp 發表于 2023-3-12 18:58
定時器中斷不行,如果忘記,可以看下io口中斷。stc8h支持的。

IO口中斷相關寄存器 我 研究下 好像這個寫的不明白
回復

使用道具 舉報

ID:235359 發表于 2023-3-13 00:21 | 顯示全部樓層

我給外部中斷0 1喚醒好奇怪  我開機要按開關10幾次 后面就能正常喚醒了  前面死活不行  不知道為什么 可以指導下嗎  
回復

使用道具 舉報

ID:433219 發表于 2023-3-13 08:20 | 顯示全部樓層
  簡單產品,做好接收器就好了(最多定做個PVC面板),買個現成的遙控器也才1¥
1.jpg
回復

使用道具 舉報

ID:82809 發表于 2023-3-13 14:42 | 顯示全部樓層
我比黑點子更黑 發表于 2023-3-13 00:21
我給外部中斷0 1喚醒好奇怪  我開機要按開關10幾次 后面就能正常喚醒了  前面死活不行  不知道為什么 可 ...

應該是下降沿喚醒的,你看參考stc8h規格書。
回復

使用道具 舉報

ID:388929 發表于 2023-3-13 15:19 | 顯示全部樓層
樓主,能賣我兩塊板試試嗎
回復

使用道具 舉報

ID:82809 發表于 2023-3-14 18:42 | 顯示全部樓層
billaj 發表于 2023-3-13 15:19
樓主,能賣我兩塊板試試嗎

之前公司做過的產品,我現在手里沒有這個板子。
回復

使用道具 舉報

ID:607642 發表于 2024-11-18 18:55 | 顯示全部樓層
我正好需要 你正好有。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久网日本 | 日韩成人在线免费视频 | 综合亚洲视频 | 欧美另类视频 | www.夜夜骑| 夜夜骚| 亚洲欧美一区二区三区视频 | 久久99精品国产麻豆婷婷 | 成人妇女免费播放久久久 | 国产精品高潮呻吟久久 | 成人激情视频免费在线观看 | 成人精品在线观看 | 精品综合在线 | 一区二区三区精品视频 | 精品99在线 | 国产午夜精品视频 | 亚洲国产精品91 | 国产美女黄色片 | 日本色高清 | 日韩欧美综合 | 欧美日韩一 | 午夜视频免费在线观看 | 国内自拍视频在线观看 | 97精品视频在线 | 亚洲综合色丁香婷婷六月图片 | 久久三区| 九九导航| 亚洲 欧美 激情 另类 校园 | 国产精品亚洲综合 | 久久久91精品国产一区二区三区 | www.黄色网| 日韩免费视频一区二区 | 97日韩精品 | 一区二区三区欧美 | 午夜久久久久久久久久一区二区 | 日日夜夜天天 | 日本一区二区高清不卡 | 成人av观看| 午夜激情影院 | 国产在线精品一区二区三区 | 涩涩99|