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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用PIC10F202單片機(jī)制作兩路開關(guān)源程序

[復(fù)制鏈接]
ID:262 發(fā)表于 2016-8-15 01:28 | 顯示全部樓層 |閱讀模式

完整代碼下載:http://www.zg4o1577.cn/bbs/dpj-53553-1.html


  1. //=======================================用戶配置區(qū),供用戶修改===========================================

  2. #define TIME2  1000            //長按鍵時(shí)間設(shè)置,單位ms ,1000 = 1s  范圍:1~10s

  3. //=========================================================================================================









  4. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  5. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  6. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  7. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  8. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  9. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************
  10. //************************************  以下為代碼區(qū),請勿改動(dòng)!  *****************************************

  11. //=============================================硬件連接示意===============================================
  12. //
  13. //    ___短 _      長   _______
  14. //       |_| |_________|    PIC10F200/202
  15. //                          +---------+
  16. //         KEY 長/短按鍵 ---|GP0   GP3|---
  17. //                          |         |
  18. //                          |GND   VDD|
  19. //                          |         |                    __      ___
  20. //        長按鍵翻轉(zhuǎn)輸出 ---|GP1   GP2|---短按鍵翻轉(zhuǎn)輸出 _|  |____|   |____
  21. //                          +---------+
  22. //      __________             _____________
  23. //    _|          |___________|             |____
  24. //
  25. //--------------------------------------------------------------------------------------------------------
  26. /*
  27.                
  28.                              長/短按鍵IO口電平翻轉(zhuǎn)程序


  29.   說明:1.該程序通過檢測GP0管腳的有效按鍵長短,循環(huán)翻轉(zhuǎn)GP2和GP1管腳的輸出電平高低。
  30.           每檢測到一個(gè)短按鍵,則對GP2管腳輸出電平進(jìn)行一次翻轉(zhuǎn),每檢測到一個(gè)長按鍵,
  31.           則對GP1管腳輸出電平進(jìn)行一次翻轉(zhuǎn)。

  32.         2.按鍵是帶有狀態(tài)機(jī)的鍵盤掃描程序,可有效對按鍵消抖,抗干擾能力極強(qiáng)。

  33.         3.長按鍵的時(shí)間可通過程序頂端的參數(shù)進(jìn)行方便的設(shè)置,以滿足現(xiàn)場需求。
  34.      
  35.         4.GP1、GP2在單片機(jī)默認(rèn)狀態(tài)和復(fù)位后輸出電平為低。

  36.         5.待機(jī)功耗為400uA(@5V),長按鍵功耗為500uA(@5V)。

  37.         6.已啟用內(nèi)部弱上拉,按鍵可以不加上拉電阻,如果要保證信號可靠,可以加上拉電阻,
  38.           建議選擇>=100K的電阻,以降低長時(shí)間按下按鍵在電阻上的功耗。


  39.        日期:2014/09/04        版本:V2.0
  40.   
  41. */

  42. //=========================================================================================================



  43. #include <pic.h>      //本代碼可支持單片機(jī)型號:PIC10F200/202

  44. #define Key_Read_T 25 //等間隔讀取鍵值,單位ms

  45. #define KEY_IO                GP0         //按鍵信號輸入
  46. #define Short_Out         GP1                //短按按鍵響應(yīng)數(shù)出口

  47. bit short_out;                                //記錄Short_Out當(dāng)前狀態(tài)
  48. bit short_IF;                                //短按響應(yīng)標(biāo)志

  49. #define Long_Out         GP2                //長按按鍵響應(yīng)數(shù)出口

  50. bit long_out;                                //記錄Long_Out當(dāng)前狀態(tài)
  51. bit long_IF;                                //長按響應(yīng)標(biāo)志

  52. unsigned char KEY_State=0;        /*按鍵的狀態(tài)變量*/


  53. #define NOKEY     0
  54. #define PUSH_KEY  1
  55. #define LONG_PUSH 2

  56. #define INITIAL_25MS 161         //相對于本系統(tǒng)與定時(shí)器時(shí)鐘,本數(shù)據(jù)為固定值。定時(shí)器增計(jì)數(shù),計(jì)數(shù)周期為256us,計(jì)97個(gè)數(shù)約為25mS。256-97+2=161

  57. /****************************************************************************
  58. * 名    稱:Key_ScanIO()
  59. * 功    能:掃描鍵盤IO口并判斷按鍵事件
  60. * 入口參數(shù):Ticklong:長按鍵有效時(shí)長,單位ms
  61. * 出口參數(shù):無
  62. * 說    明: 該函數(shù)需要每隔25(Key_Read_T)ms,調(diào)用一次。最好放在定時(shí)中斷內(nèi)執(zhí)行。
  63.             如果中斷間隔太長,可能丟鍵;間隔太短不能消除抖動(dòng)。
  64. ****************************************************************************/
  65. void Key_ScanIO(int Ticklong)
  66. {
  67.   static unsigned int KeyTimerS;
  68.   
  69. //===============================按鍵========================================   
  70.   if(KEY_State==PUSH_KEY)  KeyTimerS++;    /*定時(shí)器,時(shí)間間隔25ms*/
  71.   else                     KeyTimerS=0;
  72.   
  73.   switch(KEY_State)                  //根據(jù)按鍵的狀態(tài)決定程序分支
  74.   {
  75.      case NOKEY:         //------------------在未按鍵狀態(tài)下--------------------------
  76.        {                              //若鍵被按下,按鍵狀態(tài)變?yōu)?quot;短按狀態(tài)"。
  77.           if(KEY_IO==0) KEY_State=PUSH_KEY;
  78.           break;
  79.        }
  80.      case PUSH_KEY:        //-------------按鍵處于"短按狀態(tài)"時(shí)------------------------
  81.        {
  82.           if(KEY_IO!=0)              //若鍵被釋放,認(rèn)為是一次短按鍵
  83.             {
  84.               KEY_State=NOKEY;       //并回到"未按下狀態(tài)"
  85.                           short_IF  = 0;
  86.                           long_IF  = 0;              
  87.             }
  88.           else if(KeyTimerS>Ticklong) //若按鍵時(shí)間超過Ticks毫秒,認(rèn)為是一次長按鍵,
  89.             {
  90.               KEY_State=LONG_PUSH;           // 按鍵狀態(tài)變?yōu)?quot;長按狀態(tài)"         
  91.             }      
  92.           break;         
  93.        }
  94.      case LONG_PUSH: //------------按鍵處于"長按狀態(tài)"時(shí)--------------------
  95.        {
  96.           if(KEY_IO!=0)                //若鍵被釋放,回到未按鍵狀態(tài)
  97.             {
  98.               KEY_State=NOKEY;
  99.                           short_IF  = 0;
  100.                           long_IF  = 0;
  101.             }     
  102.           break;            
  103.        }
  104.   }   
  105. }

  106. /****************************************************************************
  107. * 名    稱:Key_Answer()
  108. * 功    能:根據(jù)按鍵狀態(tài)作出響應(yīng),控制IO管腳輸出電平翻轉(zhuǎn)
  109. * 入口參數(shù):Ticklong:長按鍵有效時(shí)長,單位ms
  110. * 出口參數(shù):無
  111. ****************************************************************************/
  112. void Key_Answer(void)
  113. {
  114.   if((KEY_State==PUSH_KEY)&&(short_IF == 0))  
  115.   {
  116.         short_out = ~short_out;
  117.     Short_Out =  short_out;
  118.         short_IF  = 1;       
  119.   }
  120.   if((KEY_State==LONG_PUSH)&&(long_IF == 0))
  121.   {
  122.         long_out = ~long_out;
  123.         Long_Out =  long_out;
  124.         long_IF  =        1;
  125.   }                 
  126. }

  127. /**************************************************************************************
  128. 名    稱:main()
  129. 功    能:主程序
  130. 入口參數(shù):無
  131. 出口參數(shù):無
  132. ***************************************************************************************/
  133. void main()
  134. {
  135.        
  136.      //設(shè)置時(shí)鐘周期Fosc = 4MHz,系統(tǒng)時(shí)鐘,無法設(shè)置
  137.         OPTION = 0x97;                  //復(fù)位值0xFF。TIMER0的時(shí)鐘源是Fosc/4,1us。TIMER0 256預(yù)分頻,256us
  138. //        CMCON0 = 0xE1;

  139.     TRISGPIO = 0x09;                //GP1、GP2配置為輸出。0為輸出,1為輸入
  140.         short_out = 0;
  141.     Short_Out = short_out;
  142.         long_out = 0;   
  143.         Long_Out = long_out;    //為輸出賦初值       

  144.         TMR0 = INITIAL_25MS;                //增計(jì)數(shù),計(jì)數(shù)周期為256us,計(jì)97個(gè)數(shù)約為25mS。256-125+2=97

  145.         while(1)
  146.         {
  147.                 #asm
  148.                 CLRWDT     
  149.                 #endasm       


  150.                 if(TMR0 < INITIAL_25MS) //1ms 進(jìn)入1次
  151.                 {
  152.                   TMR0 = INITIAL_25MS;  //增計(jì)數(shù),計(jì)數(shù)周期為256us,計(jì)97個(gè)數(shù)約為25mS。256-125+2=97
  153.                   Key_ScanIO(TIME2/Key_Read_T);//判斷按鍵值
  154.                   Key_Answer();         //根據(jù)鍵值控制輸出IO電平翻轉(zhuǎn)
  155.                 }

  156.         }

  157. }

  158. //====================================================代碼結(jié)束!=================================================
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:156185 發(fā)表于 2016-12-20 11:54 | 顯示全部樓層
初學(xué)者,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:257739 發(fā)表于 2017-12-5 15:51 | 顯示全部樓層
我司有PIC現(xiàn)貨,另有可替換的單片機(jī),不需要修改程序跟軟件,如有需要請聯(lián)系顏,13430885511
回復(fù)

使用道具 舉報(bào)

ID:120517 發(fā)表于 2017-12-12 15:05 | 顯示全部樓層
學(xué)習(xí)一下!!!
回復(fù)

使用道具 舉報(bào)

ID:262020 發(fā)表于 2017-12-15 14:43 | 顯示全部樓層
能配上電路,更為完善!!!
回復(fù)

使用道具 舉報(bào)

ID:136083 發(fā)表于 2018-7-12 11:57 | 顯示全部樓層
功能還能更低嗎,傳說的2uA呢
回復(fù)

使用道具 舉報(bào)

ID:767774 發(fā)表于 2020-6-2 19:09 | 顯示全部樓層
謝謝分享,我是來學(xué)習(xí)的
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区在线观看 | av免费看片 | 国内自拍视频在线观看 | 精品1区2区 | 国产在线精品一区二区 | 精品视频亚洲 | 成人国产精品久久久 | 日本一本在线 | 成人免费黄色片 | 懂色中文一区二区在线播放 | 欧美xxxx色视频在线观看免费 | 久草视频2 | 国产精品69久久久久水密桃 | 青青久久 | 亚洲一区二区在线播放 | 成人av影院 | 三级黄色网址 | 黄频免费 | pacopacomama在线 | 成人欧美一区二区三区在线播放 | 欧洲尺码日本国产精品 | 亚洲一区二区三区免费 | 日韩欧美视频 | 成人一区二区三区在线观看 | 精品在线99 | 国产午夜精品久久久久 | 亚洲天堂精品久久 | 亚洲视频一区在线观看 | 天堂在线一区 | 久久专区 | 久在线视频播放免费视频 | 欧美jizzhd精品欧美巨大免费 | 91久久国产 | 一级日韩 | 久久久久久国产 | 成人激情视频在线播放 | 国产激情精品一区二区三区 | 亚洲日韩中文字幕一区 | 午夜免费视频 | 在线一区二区三区 | 男女激情网站免费 |