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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10858|回復: 6
收起左側

用PIC10F202單片機制作兩路開關源程序

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

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


  1. //=======================================用戶配置區,供用戶修改===========================================

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

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









  4. //************************************  以下為代碼區,請勿改動!  *****************************************
  5. //************************************  以下為代碼區,請勿改動!  *****************************************
  6. //************************************  以下為代碼區,請勿改動!  *****************************************
  7. //************************************  以下為代碼區,請勿改動!  *****************************************
  8. //************************************  以下為代碼區,請勿改動!  *****************************************
  9. //************************************  以下為代碼區,請勿改動!  *****************************************
  10. //************************************  以下為代碼區,請勿改動!  *****************************************

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


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

  32.         2.按鍵是帶有狀態機的鍵盤掃描程序,可有效對按鍵消抖,抗干擾能力極強。

  33.         3.長按鍵的時間可通過程序頂端的參數進行方便的設置,以滿足現場需求。
  34.      
  35.         4.GP1、GP2在單片機默認狀態和復位后輸出電平為低。

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

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


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

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



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

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

  45. #define KEY_IO                GP0         //按鍵信號輸入
  46. #define Short_Out         GP1                //短按按鍵響應數出口

  47. bit short_out;                                //記錄Short_Out當前狀態
  48. bit short_IF;                                //短按響應標志

  49. #define Long_Out         GP2                //長按按鍵響應數出口

  50. bit long_out;                                //記錄Long_Out當前狀態
  51. bit long_IF;                                //長按響應標志

  52. unsigned char KEY_State=0;        /*按鍵的狀態變量*/


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

  56. #define INITIAL_25MS 161         //相對于本系統與定時器時鐘,本數據為固定值。定時器增計數,計數周期為256us,計97個數約為25mS。256-97+2=161

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

  106. /****************************************************************************
  107. * 名    稱:Key_Answer()
  108. * 功    能:根據按鍵狀態作出響應,控制IO管腳輸出電平翻轉
  109. * 入口參數:Ticklong:長按鍵有效時長,單位ms
  110. * 出口參數:無
  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. 入口參數:無
  131. 出口參數:無
  132. ***************************************************************************************/
  133. void main()
  134. {
  135.        
  136.      //設置時鐘周期Fosc = 4MHz,系統時鐘,無法設置
  137.         OPTION = 0x97;                  //復位值0xFF。TIMER0的時鐘源是Fosc/4,1us。TIMER0 256預分頻,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;                //增計數,計數周期為256us,計97個數約為25mS。256-125+2=97

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


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

  156.         }

  157. }

  158. //====================================================代碼結束!=================================================
復制代碼



回復

使用道具 舉報

ID:156185 發表于 2016-12-20 11:54 | 顯示全部樓層
初學者,學習一下
回復

使用道具 舉報

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

使用道具 舉報

ID:120517 發表于 2017-12-12 15:05 | 顯示全部樓層
學習一下!!!
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:767774 發表于 2020-6-2 19:09 | 顯示全部樓層
謝謝分享,我是來學習的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 波多野结衣一区二区三区 | 国产免费观看视频 | 免费一区 | 中文字幕精品视频 | 黄色日本片 | 可以看黄的视频 | 天天射影院 | a黄视频 | 精品国产视频在线观看 | 91精品国产91久久久久游泳池 | 久久精品一 | 国产精品1区 | 黄色大片免费播放 | 黄色a三级 | 欧美性网站 | 奇米在线 | 日韩高清黄色 | 欧洲一区二区视频 | 天天干天天爱天天爽 | 中文字幕11页| 亚卅毛片| 视频1区2区 | 国产美女网站 | 一区二区国产在线 | 日韩中文字幕在线免费 | 欧美日韩国产精品激情在线播放 | 国产小网站 | 精品一区在线免费观看 | 日韩一二区 | 七七婷婷婷婷精品国产 | 欧美一级大黄 | 夜夜撸av | 毛片区| 日韩av一区二区在线观看 | 精品一二区| 欧美日韩国产免费 | 欧美视频三级 | 久久一级| 国精日本亚洲欧州国产中文久久 | 激情a| 亚洲精品观看 |