娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | STM8S的按鍵PWM調光燈歷程

發布者:EtherealLight 來源: eefocus關鍵字:STM8S  按鍵  PWM調光燈 手機看文章 掃描二維碼
隨時隨地手機看文章

STM8SPWM應用


前幾天有個項目用到PWM,今天整理下,弄個氛圍燈;記錄下,以后忘記了返回來還能看看。


思路就是在硬件端設置個按鍵,按下全局變量Key_num的值+1,按鍵一開始我用輪詢法做的,后來覺得輪詢法延時可能導致未知的問題,現在用中斷法做;根據Key_num的值,用switch語句選擇要變換的模樣。 

上代碼:


/*****************************************************************************

  * @function  : Tim2_Init

  * @brief     : TIM2初始化函數 CH1用作出LED——G的呼吸變化燈

  * @note      : STM8S005

  * @param     : null

  * @retval    : null

  * @author    : 2016.03.23 by Steam.Yang 

                2016.11.02  RPP 學習并增加注釋

******************************************************************************/

void Tim2_Init(void)                    //TIM2的初始化語句們

{

    //配置通道1

        TIM2_TimeBaseInit(TIM2_PRESCALER_8, 999);              //第一步配置時基單元,先設置預分頻PSCRH/L高低八位 寄存器,再設置自動裝載寄存器ARRH/L。

    TIM2_OC1Init(TIM2_OCMODE_PWM1,

                     TIM2_OUTPUTSTATE_ENABLE,

                     0, 

                     TIM2_OCPOLARITY_LOW);                      //然后配置通道的輸出模式為PWM,啟用輸出比較,占空比設置為0,輸出為低電平

    TIM2_OC1PreloadConfig(ENABLE);

        TIM2_Cmd(ENABLE); 



    //配置通道2

        TIM2_TimeBaseInit(TIM2_PRESCALER_8, 999);              //第一步配置時基單元,先設置預分頻PSCRH/L高低八位 寄存器,再設置自動裝載寄存器ARRH/L。

        TIM2_OC2Init(TIM2_OCMODE_PWM1,

                     TIM2_OUTPUTSTATE_ENABLE,

                     0, 

                     TIM2_OCPOLARITY_LOW);                      //然后配置通道的輸出模式為PWM,啟用輸出比較,占空比設置為0,輸出為(低電平).105s4是低電平點亮

        TIM2_OC2PreloadConfig(ENABLE);                          //開啟預裝載寄存器

        TIM2_Cmd(ENABLE);                                       //最后的開啟  啟用定時器




        //配置通道3

            TIM2_TimeBaseInit(TIM2_PRESCALER_8, 999);            //第一步配置時基單元,先設置預分頻PSCRH/L高低八位 寄存器,再設置自動裝載寄存器ARRH/L。

    TIM2_OC3Init(TIM2_OCMODE_PWM1,

                     TIM2_OUTPUTSTATE_ENABLE,

                     0, 

                     TIM2_OCPOLARITY_LOW);                      //然后配置通道的輸出模式為PWM,啟用輸出比較,占空比設置為0,輸出為低電平

    TIM2_OC3PreloadConfig(ENABLE);

    TIM2_Cmd(ENABLE); 




}


這段代碼為PWM初始化代碼,被折騰了好幾天,手頭上的105S4跟別人就是不一樣,他非要低電平點亮小燈。。。。,心累這段代碼比較重要。


下面的是主函數


int main( void )

{



        CLK_HSICmd(ENABLE);     //配置個時鐘先

        GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);//初始化按鍵的GPIO口 上拉輸入

        Tim2_Init();                        //再初始化TIM2 PWM1輸出模式




    while(1)

    {


    Key_Press();                        //再調用按鍵


                                    //再給PWM呼吸燈占空比的值

        if((!sta) && (PWM<1000))    //比較好的循環


                {

                        PWM++;

            if(PWM == 1000) sta = 1;


        }

                if((sta) && (PWM>0))

                {

                  PWM--;

                  if(PWM == 0) sta = 0;

                }


        Delay_Us(500);               //延時調整呼吸的速度


                switch(Key_num){


                case 0:                         //沒有按下 或者按到第7下時 全滅,進行清零

                TIM2_SetCompare1(0);

                TIM2_SetCompare2(0);

                TIM2_SetCompare3(0);


                break;



                case 1:

                    TIM2_SetCompare1(1000);     //按第一下,計數1, W燈常亮1 (1000常亮 PWM呼吸  0關閉)

                                break;

                case 2:                         //按第二下,計數2,W燈呼吸2

                    //TIM2_Cmd(DISABLE);//本來想關掉PWM來進行關閉燈亮,結果不能關,關了后面就不執行了 要重新做初始化  要做其他處理

                    TIM2_SetCompare1(PWM);

                                break;

                case 3:

                    TIM2_SetCompare1(0);

                    TIM2_SetCompare2(1000);     //按三下,計數3,G燈常亮 ,同時要關掉前面亮著的

                break;


                 case 4:                        //按四下,計數4,G燈呼吸 

                    TIM2_SetCompare2(PWM);      //

                break;


                case 5: 

                    TIM2_SetCompare2(0);        //按第五下,計數5,B燈常亮 

                    TIM2_SetCompare3(1000);     //

                break;


                case 6:                         //按第六下,計數6,B燈呼吸 

                    TIM2_SetCompare3(PWM);      //

                break;


                case 7:                         //全呼吸

                    TIM2_SetCompare1(PWM);


                    TIM2_SetCompare2(PWM);

        `

                TIM2_SetCompare3(PWM);


                }


    }


}


PWM不能關 關了就要重新初始化,所以選變成0 他就不亮了。這個循環結構是非常好的循環結構,很多書上的循環結構都是從0-100 沒有100-0 燈呼吸很突兀,所以建議用這種。 

中斷的按鍵函數 

放在中斷里面


if(GPIO_ReadInputPin(GPIOC, GPIO_PIN_7) == 0)

    {

        delay_us(5000);     //去抖延時

        if(GPIO_ReadInputPin(GPIOC, GPIO_PIN_7) == 0)

        {

            while(GPIO_ReadInputPin(GPIOC, GPIO_PIN_7) == 0);

            Key_num++;

            if(Key_num == 2)

            {

                Key_num=0;


            }

        }

    }

寫完了,有什么再補充吧, 

吐槽這鬼編譯器,惡心 好幾次都代碼上不去


補充: 

我師父教我的 哈哈 

首先該計數器,循環技術,例如從0到ARR,那么這個ARR就決定了PWM的周期, 

PWM周期=(ARR+1)*計數器時鐘的周期. 

PWM頻率=計數器時鐘的頻率/(ARR+1) 

在計數器模塊中還有一個比較器,比較器有兩個輸入,一個是計數器的當前值,另一個是可以設置的數,這個數來著一個比較寄存器.當計數器的值小于比較寄存器的值時,輸出為1(也可以是0),當計數器的值大于或者等于比較器寄存器的值時,輸出為0(也可以是1,與前面對應).


STM8–PWM初始化流程 

1、時基初始化,得出PWM的頻率(周期) 

2、初始化輸出比較通道,確定是哪個模式、通道、脈沖寬度(確定占空比)、和電平。 

3、輸出比較通預裝載使能 

4、允許主輸出(TIM1) 

5、使能定時器


隨時改變PWM頻率: 

void TIM1_SetAutoreload(uint16_t Autoreload);//設置自動重裝寄存器的值 

隨時改變占空比: 

TIM1_SetCompare1(0x0000);//設置捕獲比較寄存器的值

關鍵字:STM8S  按鍵  PWM調光燈 引用地址:STM8S的按鍵PWM調光燈歷程

上一篇:stm8 TIM2 PWM配置
下一篇:STM8S系列單片機TIM1的PWM配置與TIM2的區別

推薦閱讀

根據IDC研究報告,未來10年全球數據量將以40%多的增長速度呈直線上升趨勢,2020年,全球的數據量將達到35ZB(35,000,000PB),是2010年的40倍。換句通俗的話說,也就是每過1分鐘,全世界就有1820TB的新數據產生。大數據的重要性隨著互聯網、移動互聯網、物聯網等技術的發展,一個城市的數據生產在飛速的發展,信息就成了一個企業的戰略子站,市場競爭和政策...
集微網消息,據外媒koreaherald報道,LG電子周一宣布,為了引領未來的市場,該公司將在即將推出的第五代移動通信網絡的基礎上,啟動第六代移動通信網絡的研發計劃。LG在韓國科學技術研究院(KAIST Institute)內開設了一個6G的研究中心。科學技術研究院是一家研究韓國經濟發展技術的機構,由大田市的韓國先進技術研究院(Korea Advanced Institute of Te...
初學AVR的人難免會碰到心愛的單片機熔絲位鎖死,直接罷工的煩惱。絕大部分情況是我們的工作時鐘源設置錯誤導致,下面說說一些預防措施。1、針對新買的AVR,它的內部沒有程序,在電路板第一次通電寫程序前設置與實際工作相符的熔絲位。特別是沒有外部晶振時設置成外部時鐘那肯定必死無疑。2、如果AVR已有程序,且之前沒有用外部晶振電路,中途想加外部晶振...
簡介:單片機控制系統中大多使用控制鍵來實現控制功能。消除按鍵瞬間的抖動是設計者必須要考慮的問題。本文介紹一種很實用的軟件去抖動方法,它借助于單片機內的定時中斷資源,只要運算一下邏輯表達就完成了去抖動。這個方法效率高,不耗機時且易實現。文中使用的邏輯表達式由簡單卡諾圖和真值表推出,使該方法的機理容易理解。文中還提供用C51單片機編程...

史海拾趣

問答坊 | AI 解惑

關于verilog的幾點疑問

1、請問verilog中: 1)4\'h9,4\'d9有什么區別? 2)4\'d1,4\'h1,4\'b1又有什么區別? 我在寫程序的過秤中經常遇到熟知的問題二相當的頭疼。 依照老師的說法:1)中,4\'h9指的是用四位二進制數表示的16進制數9,4\'d9指的是用四位二進制數表示 ...…

查看全部問答∨

FPGA PLL 的問題

請問各位大俠 fpga提供的鎖相環 鎖定的結果是頻率相等,相位差恒定,但每次使用鎖相環最終鎖定的相位差值是不變的嗎??如果對時鐘相位有要求的設計怎么辦?…

查看全部問答∨

大家談談自己的學習歷程,和方向???

這么多年來,總是為自己的發展方向和學習感到迷惑。我想大多數人都有和我一定的感覺吧?不知道大家能否愿意談談自己的的學習歷程和將要發展的方向???…

查看全部問答∨

wince 5下能否通過USB device實現標準的U盤?

開發的wince 5設備有USB device,現在已經可以通過active sync來和Winxp PC實現同步。 但是感覺這個sync功能太強了,不希望用戶能查看所有的wince文件。僅僅需要實現U盤的功能就可以了 就是通過usb device連接PC,用戶僅僅看到一個U盤,可以讀寫 ...…

查看全部問答∨

博基興業專業提供powerpc仿真器

Powerpc仿真器 博基興業科技有限公司專業提供各種開發工具: 現有產品:                                     alt ...…

查看全部問答∨

在X86下如何做USB引導盤

我從網上下載了USBOOT工具和MAXDOS(中文版),在XP系統下制作了USB引導盤(U盤是KingSton),然后去引導VIA 的 EPIA CN(X86架構)班子,在CMOS中已經設定為USB-FDD啟動,可是總是起不來,到了Verifying DMI Pool.............就停止了。 不知道什 ...…

查看全部問答∨

學習 MSP430

按照TI給的樣板程序,照葫蘆畫瓢,控制LED看來沒有什么問題。只控制輸出相對較簡單。根據學習資料,再往下看看,三個時鐘,中斷,寄存器,接下去要學的東西簡直太復雜。在這之前,不如先做點有趣的實驗,給自己壯壯膽,打打氣吧。這個實驗我改裝了 ...…

查看全部問答∨

quartus2 DDS IP核

求、跪求quartus2中DDS的IP核,畢業設計做DDC,程序中DDS需要例化,需要IP核。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 昌乐县| 定兴县| 花垣县| 绵竹市| 花莲县| 黑山县| 屏东县| 东海县| 蒙阴县| 卢氏县| 神木县| 嘉善县| 丹江口市| 辽中县| 临清市| 蓬莱市| 乌鲁木齐市| 墨玉县| 安图县| 开封市| 阿鲁科尔沁旗| 清水县| 水富县| 巴塘县| 泗水县| 富阳市| 鄱阳县| 恭城| 定兴县| 宁武县| 思南县| 昌宁县| 安图县| 霞浦县| 奎屯市| 静宁县| 阿坝| 合作市| 南昌市| 耿马| 始兴县|