国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

帶按鍵的旋轉(zhuǎn)編碼開關(guān)與C8051F020單片機(jī)的接口設(shè)計(jì)

2015-11-02 06:27:03岳巍李杰文方哲馬讓奎
關(guān)鍵詞:鍵值手柄電平

岳巍,李杰,文方哲,馬讓奎

(陜西寶成航空儀表有限責(zé)任公司,陜西 寶雞 721006)

帶按鍵的旋轉(zhuǎn)編碼開關(guān)與C8051F020單片機(jī)的接口設(shè)計(jì)

岳巍,李杰,文方哲,馬讓奎

(陜西寶成航空儀表有限責(zé)任公司,陜西 寶雞 721006)

介紹了一種帶按鍵的旋轉(zhuǎn)編碼開關(guān)的使用方法,給出了與C8051F020單片機(jī)的接口電路,以及旋鈕轉(zhuǎn)向判斷和按鍵處理程序。

旋轉(zhuǎn)編碼開關(guān);單片機(jī);接口

0 引言

在單片機(jī)系統(tǒng)的人機(jī)接口設(shè)計(jì)中,我們常用按鍵式鍵盤作為人與設(shè)備進(jìn)行信息交流的主要工具。通過按壓不同的按鍵,進(jìn)行菜單的選擇和數(shù)字的輸入等功能。使用按鍵進(jìn)行信息輸入具有效率高、使用方便等優(yōu)點(diǎn),但也有不足之處。比如要方便地完成數(shù)字的輸入,需要0~9共10個數(shù)字按鍵和確認(rèn)鍵、刪除鍵等功能按鍵。在單片機(jī)系統(tǒng)中,這種按鍵信息處理電路通常設(shè)計(jì)為矩陣式電路,直接連接到單片機(jī)的I/O端口,以3×4鍵盤為例要占用7個I/O端口,單片機(jī)通過軟件每隔20ms~50ms對這些I/O端口進(jìn)行定時行列掃描,根據(jù)返回的掃描鍵值,判斷是哪一個按鍵按下。所以使用鍵盤方式具有占用的I/O端口較多,鍵盤掃描程序耗時較長,占用單片機(jī)資源多的缺點(diǎn)。

在一些特殊的應(yīng)用場合,如飛機(jī)儀表的面板,因?yàn)槌叽缢蓿ǔ]有地方安排較多的按鍵,按鍵太小還不利于飛行員的操作,這時就迫切需要一種體積較小、使用方便的器件來替代按鍵鍵盤實(shí)現(xiàn)信息的輸入功能。帶按鍵的旋轉(zhuǎn)編碼開關(guān)就是這樣一種理想的器件。

帶按鍵的旋轉(zhuǎn)編碼開關(guān)是將旋轉(zhuǎn)編碼開關(guān)和一個按鍵集成在一起,通過兩者的配合使用,再結(jié)合相應(yīng)的處理軟件,就可以完成信息的輸入,并且還具有使用快捷、靈活、占用單片機(jī)資源少的優(yōu)點(diǎn)。

C8051F020單片機(jī)具有100個引腳,64個數(shù)字I/O端口,和2路獨(dú)立的12位D/A、4路獨(dú)立的電壓比較器端口。數(shù)字I/O端口可以根據(jù)需要,用軟件對內(nèi)部的3個交叉開關(guān)寄存器編程設(shè)置為讀/寫、定時器、串口、A/ D等多種功能端口,因此該單片機(jī)功能強(qiáng)大,很適合在功能復(fù)雜、需要較多單片機(jī)資源的場合應(yīng)用。

1 接口電路設(shè)計(jì)

1.1帶按鍵的旋轉(zhuǎn)編碼開關(guān)工作原理

帶按鍵的旋轉(zhuǎn)編碼開關(guān)由旋轉(zhuǎn)編碼開關(guān)和按鍵兩部分組成,它包括5個信號引腳,分別是編碼開關(guān)輸出端A和B,編碼開關(guān)公共端C,按鍵輸入輸出端S1、S2,如圖1所示。轉(zhuǎn)動編碼開關(guān)手柄,編碼開關(guān)輸出端A和 B反復(fù)與公共端C接通、斷開,通過后續(xù)電路分別輸出有一定相位差的脈沖信號,如圖2所示。按下編碼開關(guān)手柄,按鍵輸入輸出端S1、S2接通,松開手柄,輸出端S1、S2斷開。

圖1 引腳圖

當(dāng)順時針轉(zhuǎn)動編碼開關(guān)手柄時,輸出端A和B輸出的波形為圖2(a),逆時針轉(zhuǎn)動編碼開關(guān)手柄時,輸出端A和B輸出的波形為圖2(b)。

圖2 輸出波形圖

1.2與單片機(jī)接口電路設(shè)計(jì)

帶按鍵的旋轉(zhuǎn)編碼開關(guān)與單片機(jī)的接口電路如圖3所示。在帶按鍵的旋轉(zhuǎn)編碼開關(guān)的輸出端用3只10k電阻上拉,使得帶按鍵的旋轉(zhuǎn)編碼開關(guān)在旋轉(zhuǎn)、按壓、松開時能產(chǎn)生高低電平。為了消除開關(guān)信號波形的干擾和抖動,使用3只10k電阻和3只10nF電容組成RC濾波電路進(jìn)行濾波,再使用74HC14施密特觸發(fā)器進(jìn)一步改善信號波形為較為理想的矩形波,以使單片機(jī)能對信號可靠采樣。

圖3 與單片機(jī)接口電路圖

C8051F020單片機(jī)電源為+3.3V,但I(xiàn)/O端口可以直接和+5V電源電路相接。在本接口電路中,將旋轉(zhuǎn)編碼開關(guān)的輸出端A、B分別與單片機(jī)的P1.0和P1.1相連,按鍵S2端與P1.2相連。

2 軟件編程

2.1單片機(jī)端口設(shè)置

單片機(jī)通過對交叉開關(guān)寄存器XBR0、XBR1和XBR2相應(yīng)位的設(shè)置來確定各端口的功能。在本接口設(shè)計(jì)中,將與旋轉(zhuǎn)編碼開關(guān)輸出端A相連的P1.0端口設(shè)計(jì)為中斷輸入端/INT0,端口P1.1和P1.2設(shè)置為通用I/O口。此時,XBR1.2應(yīng)置1,XBR1寄存器其余位置0??紤]到已經(jīng)將UART1、UART 2和SDA、SCL總線等特殊功能端口配置到P0口,所以對交叉開關(guān)設(shè)置為XBR0=0xc1,XBR1=0x04,XBR2=0x04即可滿足要求。

2.2旋轉(zhuǎn)編碼開關(guān)轉(zhuǎn)向判斷

單片機(jī)是通過檢測旋轉(zhuǎn)編碼開關(guān)輸出信號的狀態(tài)來判斷旋轉(zhuǎn)方向,在程序設(shè)計(jì)中,采用下降沿邊沿觸發(fā)中斷方式,為此需置TCON.0=1。當(dāng)旋轉(zhuǎn)編碼開關(guān)信號觸發(fā)中斷,則進(jìn)入端口A中斷服務(wù)程序,如果此時輸出端B信號為高電平,則為順時針旋轉(zhuǎn),反之,為逆時針旋轉(zhuǎn),如圖2所示。中斷服務(wù)程序如下:

#define TRUE1

#define FALSE0

unsigned char xdata Key_direct_R,Key_direct_L;

unsigned int xdata Time1=0;;

void INT0_ISR(void)interrupt 0 using 1//中斷服務(wù)程序

EX0=0;//關(guān)中斷

EX1=0;

ET0=0;

if(Port_B==1)//判斷端口B(P1.1)的電平

Key_direct_R=TRUE;//順時針旋轉(zhuǎn)時,Key_direct_R=1

else

Key_direct_L=TRUE;//逆時針旋轉(zhuǎn)時,Key_direct_L=1

Time1=0;//等待時間清零

EX0=1;//開中斷

EX1=1;

ET0=1;

2.3按鍵判斷

旋轉(zhuǎn)編碼開關(guān)的按鍵的狀態(tài),采用定時查詢的方式檢測,定時時間為35ms,程序采用兩次查詢的按鍵去抖方式。此處提供一經(jīng)過實(shí)際驗(yàn)證的程序如下:

#define TRUE1

#define FALSE0

bit Key=FALSE;

bit Key_ok=FALSE;

unsigned char xdata Key_ok=0x00;

unsigned char xdata KeyData=0x00;

unsigned char xdata KeyDataSave=0x00;

void TIMER0()interrupt 1 using 1

unsigned char Te;

TF0=0;

ET0=0;

EX0=0;

EX1=0;

KeyData=0x04;//先將沒有按鍵按下時KeyData的值存下

P1=0xff;//向P1發(fā)送0xff測試電平

KeyData=P1;//讀取P1的電平

KeyData&=0x04;//將讀取的P1電平存入KeyData

if(KeyData!=0x04)//如果有鍵按下KeyData!=0x04時,說明有按鍵按下

if(KeyDataSave==KeyData)//將按壓后的電平情況存到KeyDataSave

{//循環(huán)判斷有無鍵按下,Te==1,表示有1個鍵

for(Te=0;(Te<1)&&(KeyDataSave!= TabKey[Te]);Te++);

if(Te==1)//如果查后沒有按鍵按下

KeyDataSave=0xff;

Key=FALSE;

else//如果按鍵按下

Key=TRUE;

KeyBuf=Te+1;//存入鍵值

else//如果鍵未按下,或第二次去抖判斷鍵值與去抖前鍵值不同

{KeyDataSave=KeyData;//將此次鍵值存下Key=FALSE;//認(rèn)為沒有鍵按下

else//如果沒有按鍵按下,或是按鍵按下后的松開動作,即鍵松開

if(Key==TRUE)//確認(rèn)是按鍵按下后的松開動作

{Key_ok=TRUE;//對按鍵結(jié)果做處理,此處僅對Key_ok置1,表示“確定”KeyDataSave=0xff;//一次按鍵動作處理完畢,重置KeyDataSave的狀態(tài)Key=FALSE;//此次按鍵動作處理完畢,將Key設(shè)置為FALSE,即無鍵按下

TH0=0x00;

TL0=0x00;

ET0=1;

EX0=1;

EX1=1;

2.4數(shù)據(jù)處理

帶按鍵的旋轉(zhuǎn)編碼開關(guān)的旋轉(zhuǎn)方向和按鍵狀態(tài)確定后,即可在主程序main()中進(jìn)行相應(yīng)的處理。以0~9999m的飛機(jī)高度數(shù)值設(shè)定為例,用帶按鍵的旋轉(zhuǎn)編碼開關(guān)可對個位、十位、百位、千位上的數(shù)值分別設(shè)定。按壓旋鈕時,按鍵起作用,循環(huán)選擇個位、十位、百位、千位;旋轉(zhuǎn)旋鈕時,數(shù)值在0~9內(nèi)循環(huán)增加或減小。主程序的流程圖如圖4所示。

圖4 主程序流程圖

3 結(jié)束語

本文對一種帶按鍵的旋轉(zhuǎn)編碼開關(guān)與C8051F020單片機(jī)的接口電路的軟硬件設(shè)計(jì)進(jìn)行了說明,給出了具體的接口電路以及單片機(jī)的端口設(shè)置、編碼器正反轉(zhuǎn)判斷、按鍵處理等程序代碼。帶按鍵的旋轉(zhuǎn)編碼器開關(guān)的應(yīng)用,為單片機(jī)系統(tǒng)的信息輸入提供了一種新的方法,減少了單片機(jī)的資源占用,另外接口程序編程簡單、易用,降低了人機(jī)接口設(shè)計(jì)的復(fù)雜程度,有利于縮短設(shè)計(jì)的周期,降低設(shè)計(jì)和制造成本。經(jīng)實(shí)踐驗(yàn)證,該接口電路及程序工作穩(wěn)定、可靠,完全滿足實(shí)際使用要求,有一定的推廣價(jià)值。

[1]何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京航空航天大學(xué)出版社,1990.

Interface of Rotary Encoder Switch with a Button Based on C8051 MCU

YUE Wei,LI Jie,WEN Fang-Zhe,MA Rang-Kui
(Shaanxi Baocheng Aviation Instrument Co.,Ltd.,Baoji Shaanxi 721006,China)

A rotary encode switch with a button is introduced.Interface based on C8051F020 and program code of the rotate direction and button press determine are given.Practical application shows that the interfacing circuit is stable,effective and reliable.

rotary encode switch;MCU;inerface

TB47

A

10.3969/j.issn.1002-6673.2015.02.043

1002-6673(2015)02-113-03

2015-03-14

岳?。?966-),男,高級工程師。研究方向:現(xiàn)從事機(jī)載儀表技術(shù)方面的設(shè)計(jì)與研究工作;李杰(1981-),男,工程師。研究方向:現(xiàn)從事機(jī)載儀表技術(shù)方面的設(shè)計(jì)與研究工作。

猜你喜歡
鍵值手柄電平
基于PLC控制的手柄座鉆孔攻絲一體機(jī)的研發(fā)
非請勿進(jìn) 為注冊表的重要鍵值上把“鎖”
一種多功能無線手柄的設(shè)計(jì)
電子制作(2018年11期)2018-08-04 03:25:44
一鍵直達(dá) Windows 10注冊表編輯高招
電腦愛好者(2017年9期)2017-06-01 21:38:08
NPC五電平Z源逆變器的設(shè)計(jì)研究
基于三電平光伏并網(wǎng)逆變器控制系統(tǒng)的研究與實(shí)踐
為什么廚具的手柄不是金屬的?
銀行家
基于NPC三電平變換器的STATCOM研究
電測與儀表(2015年2期)2015-04-09 11:28:58
一種多電平逆變器及其并網(wǎng)策略
電測與儀表(2014年7期)2014-04-04 12:09:32
成武县| 太仆寺旗| 剑河县| 沿河| 万安县| 方山县| 景洪市| 芜湖市| 剑河县| 亚东县| 南和县| 上高县| 临桂县| 元阳县| 西和县| 库伦旗| 万安县| 方城县| 京山县| 中牟县| 咸宁市| 怀宁县| 九台市| 奇台县| 梁平县| 遂溪县| 巴林右旗| 清水县| 衡东县| 黄大仙区| 陆川县| 木里| 铜鼓县| 通江县| 沙田区| 开鲁县| 如东县| 开封县| 虎林市| 朝阳区| 且末县|