找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 1763|回復(fù): 0
收起左側(cè)

單片機(jī)最小系統(tǒng)與按鍵消抖

[復(fù)制鏈接]
ID:403543 發(fā)表于 2018-10-5 20:43 | 顯示全部樓層 |閱讀模式
日常連載8

單片機(jī)最小系統(tǒng):
  • MCU
  • 晶振
  • 復(fù)位電路
  • 電源接口
晶振:
              

有源晶振:信號(hào)質(zhì)量好精度高,價(jià)格較高,依賴特定的工作電壓。
無源晶振:需要外部電路,價(jià)格低,不依賴于電壓(有電壓就能起振),依賴電容,又稱為晶體。

復(fù)位電路:
1、上電復(fù)位分析
                            2、復(fù)位時(shí)間計(jì)算  t = 1.2RC(1.2*電阻*電容)
         3、手動(dòng)復(fù)位分析
  • 1.2*4700*0.0000001=564us
圖中R60是當(dāng)按鍵按下的一瞬間,電容需要放電,如果沒有這個(gè)電阻,會(huì)產(chǎn)生很大的電流產(chǎn)生電磁干擾,降低系統(tǒng)的穩(wěn)定性,故加了這個(gè)電阻給電容放電保持系統(tǒng)的穩(wěn)定。

按鍵消抖的更優(yōu)方法1:
http://www.360doc.com/showweb/0/0/782209534.aspx(在此網(wǎng)址有詳細(xì)介紹,這里只作簡短介紹)


單片機(jī)源程序:

  1.     /*————備注:———————*
  2.     平臺(tái):Keil4  STC89C52RC  
  3.     功能:
  4.     作者:西片                                         
  5.     聯(lián)系方式:18724145220@163.com
  6.     日期:2018/ /                     
  7.     備注: 晶振12MHz
  8.           更有效率的消抖方法                                    
  9.     *——————————————————*/  
  10.    
  11.    
  12. //====頭文件定義===*  
  13. #include<reg52.h>  
  14. #include<intrins.h>   
  15. //=================*  
  16.    
  17.    
  18. //====宏定義=======*  
  19. #define uchar unsigned char  
  20. #define uint unsigned int  
  21. //=================*  
  22.    
  23.    
  24. //====引腳說明=====*  
  25. sbit LSA=P2^2;  
  26. sbit LSB=P2^3;  
  27. sbit LSC=P2^4;  
  28. sbit key1=P1^7;//將矩陣鍵盤變?yōu)楠?dú)立按鍵,讓第一行的按鍵左端均為低電平,然后通過列的一個(gè)高低電平判斷按鍵是否按下  
  29. sbit KEY=P1^3;//第一個(gè)按鍵對(duì)應(yīng)的列  
  30. //=================*  
  31.    
  32. bit KeySta=1;//按鍵狀態(tài)標(biāo)志位  
  33.    
  34. //====全局變量=====*  
  35. //=================*  
  36.    
  37.    
  38. //====編碼數(shù)組=====*  
  39. uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  
  40.                          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F,加無顯示碼  
  41. //=================*  
  42.    
  43.    
  44. //====定時(shí)器0設(shè)定==*  
  45. void SetT0()  
  46. {  
  47.      TMOD=0x01;  
  48.      TH0=0xf8;  
  49.      TL0=0x30;  
  50.      EA=1;  
  51.      ET0=1;  
  52.      TR0=1;  
  53. }  
  54. //=================*  
  55.    
  56.    
  57. //====要添加的函數(shù)=*  
  58. //=================*  
  59.    
  60.    
  61. //====主函數(shù)=======*  
  62. void main()  
  63. {         
  64.      bit backup = 1;//備份上一次的狀態(tài),判斷狀態(tài)是否變化,和怎樣變化。從0到1表示已經(jīng)松開,從1到0表示在按下  
  65.      uchar cnt=0;  
  66.      LSA=0;  
  67.      LSB=0;  
  68.      LSC=0;//點(diǎn)亮第一個(gè)數(shù)碼管(最右邊的)  
  69.      key1=0;  
  70.      P0=smgduan[cnt];  
  71.      SetT0();  
  72.      while(1)      
  73.      {  
  74.          if(KeySta != backup)  
  75.         {  
  76.              if(backup == 0) //從0到1的變化表示按鍵已經(jīng)松開,可以執(zhí)行操作  
  77.              {  
  78.                  cnt++;  
  79.                  if(cnt >= 16)  
  80.                  {  
  81.                      cnt = 0;  
  82.                  }  
  83.                  P0 = smgduan[cnt];  
  84.              }  
  85.              backup = KeySta;//記錄上一次的狀態(tài)留作下一次的對(duì)比  
  86.         }      
  87.      }  
  88. }  
  89. //=================*  
  90.    
  91.    
  92. //====定時(shí)器0中斷==*  
  93. void Timer0()interrupt 1  
  94. {     
  95.      static uchar keybuf = 0xFF;//定義一個(gè)靜態(tài)變量以記錄按鍵8次狀態(tài)是否都相同,相同則為穩(wěn)定態(tài),認(rèn)定不是抖動(dòng)。按鍵掃描緩沖區(qū),保存一段時(shí)間內(nèi)的掃描值。  
  96.    
  97.      TH0=0xf8;//每2ms刷新一次狀態(tài)記錄,刷新8次即可得到一個(gè)字節(jié)(8次)的狀態(tài)(由于人按下按鍵的最快時(shí)間一般不低于20ms,所以16ms可以滿足檢測(cè))  
  98.      TL0=0x30;  
  99.    
  100.     keybuf = (keybuf <<1) |KEY;//移位加或進(jìn)行狀態(tài)記錄      
  101.     if(keybuf == 0x00)//八位全為0為按下轉(zhuǎn)態(tài)  
  102.     {  
  103.         KeySta = 0;  
  104.     }  
  105.     else if(keybuf == 0xFF)//八位全為1認(rèn)為彈起狀態(tài)  
  106.     {  
  107.         KeySta = 1;  
  108.     }  
  109.     else//其余情況KeySta不變,認(rèn)為抖動(dòng)狀態(tài)  
  110.     {  
  111.     }  
  112.   
  113. }  
  114. //=================*  
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
08-單片機(jī)最小系統(tǒng)和消抖.docx (222.77 KB, 下載次數(shù): 10)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表