大香蕉大香蕉在线播放-日韩av在线一区中文字幕-日韩熟女熟妇久久精品综合-精品免费视频一区二区三区

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

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

開發(fā)工具

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

技術(shù)支持

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

新品推廣

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

新聞中心

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

軟件產(chǎn)生PWM與按鍵實時處理-PICC初學例子

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

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

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

方案實現(xiàn)如下:

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

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


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

編譯軟件為HI-PICC。

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

《按鍵實時處理流程》 

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

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

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

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

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

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

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

《軟件產(chǎn)生PWM流程》 

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

《主程序主作流程》

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


C源程序

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

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

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

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

//*******************************************************************
//函數(shù)名稱:KeyInt(*p);
//輸入?yún)?shù):占空比地址
//輸出參數(shù):無
//功能描述:按鍵處理函數(shù)
//建造日期: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;                            //有效置位
      } 
 }

//*******************************************************************
//函數(shù)名稱:LedPwm(Pwm);
//輸入?yún)?shù):占空比
//輸出參數(shù):無
//功能描述:led 脈沖調(diào)寬輸出
//建造日期: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--);                                     //低位輸出
      }        
 }

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

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

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

(文源網(wǎng)絡(luò),侵刪)

大鸡巴抽插小骚逼视频免费| 国产欧美一二区不卡视频| 男的鸡巴插女的视频| 国产污污污在线观看视频| 青娱乐欧美性爱视频| 日本老熟妇毛茸茸| 激烈18禁高潮视频免费| 哈啊慢点不要了视频| 国产精品操大屁股老淑女| 日韩一区二区三区夜色视频| a一级毛片免费高清在线| 日本高清一区二区三区不卡| 欧美日韩亚洲人人夜夜澡| 大男人在线无码直播| 欧美国产三级片久久高清| 裸毛片视频在线视频| 精品麻豆国产免费一区二区三区 | 久久久久黑人强伦姧人妻| 国产女主播喷出白浆视频| 好想插进去捅一捅| 女生的鸡鸡色色软件| 黄色片视频1024| 国产一区二区三区精品片| 国产一区二区三区免费观在线| 国产老妇伦国产熟女91| 美女主播被操流水| 亚洲综合区欧美一区二区| 国产 推油 性爱| 日韩激情视频在线看免费| 大鸡巴操淫逼视频| 中国美女操逼的视频| 玩弄邻居少妇呻吟11p| 日本公共厕所mmm撒尿| 老色鬼精品视频二区三区| 男人摸女人下面视频| 无遮挡粉嫩久久久久久久| 福利国产第一视频| 国产尤物蜜臀AV| 国产成人无码91精品一区| 护士毛片在线看中文字幕| 大鸡吧天天草黑逼|