標題: 單片機最小系統與按鍵消抖 [打印本頁]
作者: 七月雨 時間: 2018-10-5 20:43
標題: 單片機最小系統與按鍵消抖
日常連載8
單片機最小系統:
晶振:
有源晶振:信號質量好精度高,價格較高,依賴特定的工作電壓。
無源晶振:需要外部電路,價格低,不依賴于電壓(有電壓就能起振),依賴電容,又稱為晶體。
復位電路:
1、上電復位分析
2、復位時間計算 t = 1.2RC(1.2*電阻*電容)
3、手動復位分析
圖中R
60是當按鍵按下的一瞬間,電容需要放電,如果沒有這個電阻,會產生很大的電流產生電磁干擾,降低系統的穩定性,故加了這個電阻給電容放電保持系統的穩定。
按鍵消抖的更優方法1:
http://www.360doc.com/showweb/0/0/782209534.aspx(在此網址有詳細介紹,這里只作簡短介紹)


單片機源程序:
- /*————備注:———————*
- 平臺:Keil4 STC89C52RC
- 功能:
- 作者:西片
- 聯系方式:18724145220@163.com
- 日期:2018/ /
- 備注: 晶振12MHz
- 更有效率的消抖方法
- *——————————————————*/
-
-
- //====頭文件定義===*
- #include<reg52.h>
- #include<intrins.h>
- //=================*
-
-
- //====宏定義=======*
- #define uchar unsigned char
- #define uint unsigned int
- //=================*
-
-
- //====引腳說明=====*
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit key1=P1^7;//將矩陣鍵盤變為獨立按鍵,讓第一行的按鍵左端均為低電平,然后通過列的一個高低電平判斷按鍵是否按下
- sbit KEY=P1^3;//第一個按鍵對應的列
- //=================*
-
- bit KeySta=1;//按鍵狀態標志位
-
- //====全局變量=====*
- //=================*
-
-
- //====編碼數組=====*
- uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F,加無顯示碼
- //=================*
-
-
- //====定時器0設定==*
- void SetT0()
- {
- TMOD=0x01;
- TH0=0xf8;
- TL0=0x30;
- EA=1;
- ET0=1;
- TR0=1;
- }
- //=================*
-
-
- //====要添加的函數=*
- //=================*
-
-
- //====主函數=======*
- void main()
- {
- bit backup = 1;//備份上一次的狀態,判斷狀態是否變化,和怎樣變化。從0到1表示已經松開,從1到0表示在按下
- uchar cnt=0;
- LSA=0;
- LSB=0;
- LSC=0;//點亮第一個數碼管(最右邊的)
- key1=0;
- P0=smgduan[cnt];
- SetT0();
- while(1)
- {
- if(KeySta != backup)
- {
- if(backup == 0) //從0到1的變化表示按鍵已經松開,可以執行操作
- {
- cnt++;
- if(cnt >= 16)
- {
- cnt = 0;
- }
- P0 = smgduan[cnt];
- }
- backup = KeySta;//記錄上一次的狀態留作下一次的對比
- }
- }
- }
- //=================*
-
-
- //====定時器0中斷==*
- void Timer0()interrupt 1
- {
- static uchar keybuf = 0xFF;//定義一個靜態變量以記錄按鍵8次狀態是否都相同,相同則為穩定態,認定不是抖動。按鍵掃描緩沖區,保存一段時間內的掃描值。
-
- TH0=0xf8;//每2ms刷新一次狀態記錄,刷新8次即可得到一個字節(8次)的狀態(由于人按下按鍵的最快時間一般不低于20ms,所以16ms可以滿足檢測)
- TL0=0x30;
-
- keybuf = (keybuf <<1) |KEY;//移位加或進行狀態記錄
- if(keybuf == 0x00)//八位全為0為按下轉態
- {
- KeySta = 0;
- }
- else if(keybuf == 0xFF)//八位全為1認為彈起狀態
- {
- KeySta = 1;
- }
- else//其余情況KeySta不變,認為抖動狀態
- {
- }
-
- }
- //=================*
復制代碼
完整的Word格式文檔51黑下載地址:
08-單片機最小系統和消抖.docx
(222.77 KB, 下載次數: 10)
2018-10-5 20:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
精品成人在线
|
91亚洲精品国偷拍自产在线观看
|
日韩中文字幕2019
|
欧美综合国产精品久久丁香
|
亚洲国产网址
|
日韩av免费在线观看
|
久久国产日本
|
2018中文字幕第一页
|
久久久女女女女999久久
|
国产精品91视频
|
精品91视频|
国产欧美日韩一区二区三区在线观看
|
欧美精品在线免费观看
|
99精品视频网
|
一区二区三区视频免费看
|
日本精品一区
|
狠狠干在线
|
成人免费看片
|
亚洲视频在线看
|
亚洲电影免费
|
久久久精品一区二区三区
|
精品一区二区三区在线观看
|
天堂一区二区三区
|
国产午夜精品理论片a大结局
|
欧美精品久久
|
久久久久亚洲
|
国产一区二区三区在线免费
|
妖精视频一区二区三区
|
国产精品美女久久久久久免费
|
天天射夜夜操
|
久久91av
|
一区二区三区精品视频
|
国产精品一区二区三区久久
|
亚洲自拍一区在线观看
|
久久91精品久久久久久9鸭
|
精品国产欧美一区二区三区成人
|
日日夜夜精品视频
|
天天射天天操天天干
|
在线国产视频观看
|
天天操综合网
|
日本一二区视频
|