找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4071|回復(fù): 4
收起左側(cè)

求思路 應(yīng)廣單片機做呼吸燈

[復(fù)制鏈接]
ID:366959 發(fā)表于 2019-9-25 11:39 | 顯示全部樓層 |閱讀模式
500黑幣
單片機是PMS171B_datasheet_CN_v101_20190823,做一個呼吸燈,求個思路

PMS171B_datasheet_CN_v101_20190823.pdf

2.13 MB, 下載次數(shù): 36

最佳答案

查看完整內(nèi)容

//********************************************************************************// // 功能名稱: TM2/TM3產(chǎn)生PWM漸變(呼吸燈功能) // 適應(yīng)芯片: 只有TM2的芯片: // PMS系列:PMS130 PMS131 PMS232 PMS164 PMS154C PMS171B //--------------------------------------------------------------------------------// //程序說明: // 設(shè)置TM2或PB3從PB2腳產(chǎn)生3906.25Hz的頻率 // 初始關(guān)閉TM2或TM3 ...
回復(fù)

使用道具 舉報

ID:249730 發(fā)表于 2019-9-25 11:39 | 顯示全部樓層
//********************************************************************************//
//                功能名稱:        TM2/TM3產(chǎn)生PWM漸變(呼吸燈功能)
//                適應(yīng)芯片:        只有TM2的芯片:
//                                        PMS系列:PMS130   PMS131   PMS232   PMS164   PMS154C   PMS171B   
//--------------------------------------------------------------------------------//
//程序說明:
//        設(shè)置TM2或PB3從PB2腳產(chǎn)生3906.25Hz的頻率
//        初始關(guān)閉TM2或TM3做到0%的占空比,
//        然后打開TM2或TM3開始調(diào)節(jié)占空比至100%
//        再調(diào)節(jié)占空比至最低,關(guān)掉TM2或TM3做到0%,然后重復(fù)做到漸變
//        通過增加TM2B或TM3B的值使占空比不斷增加
//        通過減少TM2B或TM3B的值使占空比不斷減少
//注意事項:
//        1.案例為PMS154C,其他芯片時鐘源和輸出IO腳可能存在不同,其他原理都相同
//********************************************************************************//
#include        "extern.h"

void        TM2_Init(void)//設(shè)置頻率
{
//        $ TM2C SYSCLK,PB2,PWM;                //選擇時鐘源,輸出腳,PWM模式,是否反極性輸出(寫Inverse為啟用,不寫則為停用)
                                                                //根據(jù)要求時鐘可選擇SYSCLK, EOSC, IHRC, ILRC等,輸出腳可以選擇Disable(不選擇), PB2, PB4, PA3
                                                                //注:時鐘源與輸出腳位的選擇請參考對應(yīng)芯片的datasheet,個別芯片有些不同
        $ TM2S 8bit,/1,/1;                        //選擇分辨率,預(yù)分頻,分頻
                                                                //分辨率可選擇8bit,6bit,預(yù)分頻可選擇/1, /4, /16, /64,分頻可選擇/1 ~ /32(對應(yīng)TM2S[4:0]的00000 ~ 11111)
        TM2B = 0;                                        //1/256的亮度

                //        PWM模式的頻率和占空比計算
                        //頻率=時鐘源/(分辨率*預(yù)分頻*分頻)=1M / (2^8 * 1 * 1) = 3906.25Hz
                        //占空比=(TM2B+1)/分辨率*100%=(0 + 1) / 2^8 *100% = 1/256*100% = 0.38%

        $ TM2C Stop;                                //關(guān)閉PWM,即0%的亮度
}
//除腳位不同,其他原理和TM2一樣
void        TM3_Init(void)
{
//        $ TM3C SYSCLK,PB5,PWM;                //輸出腳可選擇Disable(不選擇),PB5, PB6, PB7
                                                                //注:時鐘源與輸出腳位的選擇請參考對應(yīng)芯片的datasheet,個別芯片有些不同
        $ TM3S 8bit,/1,/1;
        TM3B = 0;                                        //1/256的亮度
        $ TM3C Stop;                                //關(guān)閉PWM,0%的亮度
}
bit                Add_Sign;
byte        PWM_Num;
void        PWM_Grad(void)
{
        if(Add_Sign)//PWM遞增
        {
                $ TM2C SYSCLK,PB2,PWM;//打開PWM
        //        $ TM3C SYSCLK,PB5,PWM;
                PWM_Num++;//每次增加1/256
                TM2B = PWM_Num;
        //        TM3B = PWM_Num;
                if(PWM_Num == 255)//如果亮度100%,開始遞減
                {
                        Add_Sign = 0;
                }
                .delay 10000;//延時10ms,控制漸變時長
        }
        else//PWM遞減
        {
                PWM_Num--;
                TM2B = PWM_Num;
        //        TM3B = PWM_Num;
                if(PWM_Num == 0)//亮度1/256,不是全滅
                {
                        $ TM2C Stop;//關(guān)閉PWM來實現(xiàn)0%亮度
                //        $ TM3C Stop;
                        Add_Sign = 1;
                }
                .delay 10000;
        }
}

void        FPPA0 (void)
{
        .ADJUST_IC        SYSCLK=IHRC/16, IHRC=16MHz, VDD=5V;

        PWM_Num = 0;
        Add_Sign = 1;
        TM2_Init();
//        TM3_Init();
        while (1)
        {
                PWM_Grad();
        }
}


void        Interrupt (void)
{
        pushaf;

        if (Intrq.T16)
        {        //        T16 Trig
                //        User can add code
                Intrq.T16        =        0;
                //...
        }

        popaf;
}

回復(fù)

使用道具 舉報

ID:237423 發(fā)表于 2020-6-26 10:11 | 顯示全部樓層
還在用應(yīng)廣嗎?
回復(fù)

使用道具 舉報

ID:300743 發(fā)表于 2020-11-5 22:39 | 顯示全部樓層
pwm或定時器
回復(fù)

使用道具 舉報

ID:960857 發(fā)表于 2022-12-22 14:14 | 顯示全部樓層
老哥你這是深廣例程,直接發(fā)上來了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表