• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    技術熱線: 4007-888-234
    設計開發(fā)

    專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

    開發(fā)工具

    提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

    技術支持

    從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產品競爭力

    新聞中心

    提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

    軟件產生PWM與按鍵實時處理-PICC初學例子

    更新時間: 2019-03-23
    閱讀量:2835

    十年專注單片機方案開發(fā)的方案公司英銳恩,分享軟件產生PWM與按鍵實時處理-PICC初學例子。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

    假設現在有個產品,要實現一個按鍵調節(jié)LED的亮度(PWM六檔調光)。要以最低成平,體積要小,抗干擾最好。用PIC12C508A,最適合不過了。

    方案實現如下:

    按鍵功能:
        一個普通的IO口接上拉電阻輸入,通過按鍵拉地。按鍵低電平有效,高電平無效。
    每按一下占空比增加一檔。長按無效,第次增加一檔。要防止干擾。

    調光功能:
        一個普通的IO口外接三極管驅動LED,由于單片機沒有PWM模塊,沒有中斷功能。只能用軟件產生PWM信號。 


       我們都知道用軟件產生PMW 是占用單片機太多的時間,系統(tǒng)很難做其它工作。要如何實時處理按鍵功能,要多下
    功夫才行。

    編譯軟件為HI-PICC。

    為了方面調試,先使用可擦寫的PIC16F84A調試源程序,成功后再移值到PIC12C508A單片機系統(tǒng)。

    《按鍵實時處理流程》 

    聲明申請兩個標志  1,有效標志   2,完成標志  為靜態(tài)私有,初始化只清零一次。

    一,判斷有效標志是否等于 1。是,向下執(zhí)行。否,跳到二處。

        判斷按鍵是否等于     0。是,向下執(zhí)行。否,跳到三處。

        判斷完成標志是否等于 0。是,向下執(zhí)行。否,按鍵長按,無效退出。

        按鍵有效,增加占空比。完成標志置為 1。退出。

    二,判斷按鍵是否等于 0。是,置有效標志為 1。否,沒有按鍵退出。

    三,按鍵受干擾,或按鍵彈開。清所有標志,退出。

    《軟件產生PWM流程》 

    一,根據占空比計算高電平延時,低電平延時。
        輸出高電平,軟件產生高電平延時。
        輸出低電平,軟件產生低電平延時。
    二,循環(huán)執(zhí)行約20毫秒,后退出。

    《主程序主作流程》

    一,調用初始化子程序.
    二,調用按鍵處理子程序。
    三,調用軟件產生PWM子程序。
    四,循環(huán)執(zhí)行 二,三。


    C源程序

    /引入頭文件*********************************************************
    #include      

    //腳位定義***********************************************************
    #define       key       RA3                                //按鍵輸入
    #define       led       RB0                                //輸出指示

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

    //函數名稱:port_init();
    //輸入參數:無
    //輸出參數:無
    //功能描述:端口設置
    //建造日期:2008.06.03
    //*****************************************************************
    void PortInit(void)
     {
         PORTA = 0xfd;                                         //  
         TRISA = 0xfd;                                         //A 口設置   
         
         PORTB = 0x00;                                         //
         TRISB = 0x00;                                         //B 口設置
     }
      

    //*******************************************************************
    //函數名稱:KeyInt(*p);
    //輸入參數:占空比地址
    //輸出參數:無
    //功能描述:按鍵處理函數
    //建造日期:2008.06.03
    //*******************************************************************
    void KeyInt(unsigned char *p)
     {    
         static bit valid = 0;                                 //有效標志
         static bit finish = 0;                                //完成標志
         
         if (valid == 1)
          {
           if (key == 0)
            {
             if (finish == 0)
              {
               finish = 1;                                     //完成置位
               
               if (*p == 251)
                {
                 *p = 0x01;                                    //按鍵有效 
                } 

     else
                {
                 *p += 50;                                     //按鍵有效
                }
              }
            }
         
           else
            {
             valid = 0;                                        //有效清零
             finish = 0;                                       //完成清零 
            }   

     }
           
         else
          {
           if (key == 0) valid = 1;                            //有效置位
          } 
     }

    //*******************************************************************
    //函數名稱:LedPwm(Pwm);
    //輸入參數:占空比
    //輸出參數:無
    //功能描述:led 脈沖調寬輸出
    //建造日期:2008.06.03
    //*******************************************************************
    void LedPwm(unsigned char Pwm)
     {
         unsigned char PwmH;
         unsigned char PwmL;
         unsigned char i;
       
         
         for (i = 0; i < 20; i++)
          {
           PwmH = Pwm;                                         //脈沖高位
           PwmL = 255 - PwmH;                                  //脈沖低位

           led = 1;                                            // 
           while (PwmH--);                                     //高位輸出 

     led = 0;                                            // 
           while (PwmL--);                                     //低位輸出
          }        
     }

    //*******************************************************************
    //函數名稱:main();
    //輸入參數:無
    //輸出參數:無
    //功能描述:主要程序
    //建造日期:2008.06.03
    //*******************************************************************
    void main(void)                                            // 

    {   
         unsigned char Pwm = 0x01;                             //占空初值      

         PortInit();                                           //腳位設置
        
         while (1)
          {
           KeyInt(&Pwm);                                       //按鍵處理
           LedPwm(Pwm);                                        //脈沖輸出
          }  
     } 

    (文源網絡,侵刪)

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>