《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第9、10章 人機(jī)接口開發(fā)、傳感器模塊開發(fā)技術(shù)_第1頁
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第9、10章 人機(jī)接口開發(fā)、傳感器模塊開發(fā)技術(shù)_第2頁
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第9、10章 人機(jī)接口開發(fā)、傳感器模塊開發(fā)技術(shù)_第3頁
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第9、10章 人機(jī)接口開發(fā)、傳感器模塊開發(fā)技術(shù)_第4頁
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第9、10章 人機(jī)接口開發(fā)、傳感器模塊開發(fā)技術(shù)_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第九章人機(jī)接口開發(fā)目錄CONTENT9.1.STN-LCD液晶顯示開發(fā)9.2.狀態(tài)機(jī)設(shè)計9.3.總線擴(kuò)展復(fù)用設(shè)計9.4.人機(jī)接口綜合練習(xí)9.1.STN-LCD液晶顯示開發(fā)液晶顯示終端是單片機(jī)應(yīng)用系統(tǒng)中最常見的人機(jī)接口輸出顯示設(shè)備,單片機(jī)學(xué)習(xí)板通常都預(yù)留液晶顯示接口。圖9.1-1是連接LCD12864顯示屏的插座示例。圖9.1-1液晶LCD12864顯示連接接口9.1.STN-LCD液晶顯示開發(fā)表9.1-1是插座管腳定義。管腳號管腳名管腳功能

管腳號管腳名管腳功能1VSS電源地11DB4數(shù)據(jù)位42VDD電源正極12DB5數(shù)據(jù)位53V0液晶顯示對比度調(diào)節(jié)13DB6數(shù)據(jù)位64RS數(shù)據(jù)/命令選擇14DB7數(shù)據(jù)位75R/W讀/寫選擇15PSB串并選擇:“1”并行;“0”串行。6E使能信號16NC空腳,7DB0數(shù)據(jù)位017/RES復(fù)位信號,低電平有效8DB1數(shù)據(jù)位118VOUTLCD驅(qū)動電壓輸出端9DB2數(shù)據(jù)位219BLA背光源正極10DB3數(shù)據(jù)位320BLK背光源負(fù)極表9.1-1LCD12864管腳定義表如下:9.1.STN-LCD液晶顯示開發(fā)LCD全稱LiquidCrystalDisplay,液晶就是液態(tài)的晶體,是一種特殊的混合物質(zhì),具有固態(tài)物質(zhì)和液態(tài)物質(zhì)的雙重特性。液晶分子的排列受到電場影響會發(fā)生偏轉(zhuǎn),當(dāng)它偏轉(zhuǎn)使得光線通過,就顯示圖像,當(dāng)它偏轉(zhuǎn)阻擋了光線傳播,就沒有圖像。本節(jié)要介紹型號12864的STN-LCD液晶屏。STN-LCD液晶屏,是一種超扭曲向列屏(STN,SuperTwistedNematic),液晶分子在電場作用下,能發(fā)生180度以上的扭曲,從而改變旋光狀態(tài)形成顯示圖像。LCD12864表示像素陣列為128×64像素(列×行),基于128×64=8192個像素陣列,LCD可以顯示漢字及圖形。目前市場有帶字庫和不帶字庫兩種產(chǎn)品,不帶字庫的液晶屏由開發(fā)人員自己編寫字型碼,帶有字庫的程序中無需編寫字形碼,直接顯示字型。圖9.1-2展示了LCD12864的外觀。圖9.1-2LCD12864外觀9.1.STN-LCD液晶顯示開發(fā)液晶的顯示基礎(chǔ)是像素陣列,每個像素類似一個發(fā)光二極管(實際上是液晶分子的偏轉(zhuǎn)),當(dāng)不同位置的像素點(diǎn)亮后就構(gòu)成了字符。一個英文字母或數(shù)字通常使用8列16行個像素點(diǎn),一個漢字通常使用16列16行個像素點(diǎn)。表9.1-2列出了數(shù)字“5”、字母“A”、漢字“漢”的字模(宋體)編碼,它們的顯示情況如圖9.1-3所示,均為縱向取模。符號字模5x00,0x1F,0x11,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x04,0x04,0x04,0x88,0x70,0x00,A0x00,0x00,0x03,0x1C,0x07,0x00,0x00,0x00,0x04,0x3C,0xC4,0x40,0x40,0xE4,0x1C,0x04,漢x08,0x06,0x40,0x30,0x03,0x40,0x78,0x47,0x40,0x40,0x40,0x47,0x78,0x00,0x00,0x00,0x20,0x20,0x3E,0xC0,0x01,0x01,0x02,0x04,0xC8,0x30,0xC8,0x04,0x02,0x01,0x01,0x00,表9.1-2取模編碼9.1.STN-LCD液晶顯示開發(fā)縱向取模是從上到下取字節(jié),如圖9.1-3所示,對字母和數(shù)字,先取(X=0)的8個字節(jié),再取(X=1)的8個字節(jié)。對于漢字,Y方向有16個比特2個字節(jié),先?。╔=0)的16個字節(jié),再?。╔=1)的16個字節(jié)。(c)(b)(a)圖9.1-3字符顯示取模(編碼)原理9.1.STN-LCD液晶顯示開發(fā)LCD液晶顯示屏分為帶字庫和不帶字庫兩種類型。帶字庫的液晶支持ASCII字符集和GB2312字符集,一個漢字占用16×16個點(diǎn),所以12864液晶屏最多可顯示4行8列共32個漢字?;蛘?行16列共64個ASCII碼。不帶字庫的LCD需要開發(fā)人員自己提供圖形編碼,設(shè)計靈活,開發(fā)人員根據(jù)自己的應(yīng)用場景靈活選擇。1.LCD液晶有顯示緩存(DisplayDataRAM,DDRAM)。顯示緩存DDRAM存放要顯示字符的編碼。此外,LCD液晶模塊還有字庫存儲區(qū),分為三個存儲區(qū):中文字庫CGROM、ASCII碼半寬字庫HCGROM、自定義的字形空間CGRAM。9.1.STN-LCD液晶顯示開發(fā)LCD顯示區(qū)域與DDRAM的緩存地址一一映射,作為編程人員要記住它們的對應(yīng)關(guān)系,見表9.1-3。上表中80H是第一行的第一個漢字顯示區(qū)域,如果要顯示ASCII字符,那么地址80H可顯示兩個字符。行號第1列第2列第3列第4列第5列第6列第7列第8列第一行80H81H82H83H84H85H86H87H第二行90H91H92H93H94H95H96H97H第三行88H89H8AH8BH8CH8DH8EH8FH第四行98H99H9AH9BH9CH9DH9EH9FH表9.1-3LCD12864的顯示區(qū)域與緩存DDRAM的對應(yīng)關(guān)系任務(wù)1.在LCD12864屏幕上顯示信息任務(wù)要求:在LCD12864屏幕上顯示課程名字、開發(fā)人姓名以及班級學(xué)號。任務(wù)說明:點(diǎn)陣式圖形液晶顯示屏LCD能夠動態(tài)顯示圖形漢字以及各種符號信息,相對于數(shù)碼管而言,顯示內(nèi)容更豐富,為各種電子產(chǎn)品提供了友好的人機(jī)界面,具有工作電壓低、微功耗、體積小、可視面積大、無電磁輻射、數(shù)字接口、壽命長等特點(diǎn)。開發(fā)任務(wù)使用的液晶控制器是ST7920。任務(wù)資訊:1.液晶工作時序如下:(1)寫時序,單片機(jī)寫數(shù)據(jù)到液晶的時序(并行)如圖9.1-4所示:在RS周期時間內(nèi),R/W低電平、E高電平時,單片機(jī)在DB0--DB7輸出有效數(shù)字。圖9.1-4寫數(shù)據(jù)到液晶(并行)任務(wù)1.在LCD12864屏幕上顯示信息(2)讀時序,單片機(jī)從液晶讀數(shù)據(jù)的時序(并行)如圖9.1-5所示:在RS周期時間內(nèi),R/W高電平、E高電平,LCD將數(shù)據(jù)發(fā)送到DB0-DB7數(shù)據(jù)線上。圖9.1-5讀數(shù)據(jù)到單片機(jī)(并行)在圖9.1-4和圖9.1-5中,RS是命令和顯示數(shù)據(jù)內(nèi)容的指示信號(數(shù)據(jù)/命令選擇),當(dāng)單片機(jī)寫指令給液晶的時候,RS是低電平;當(dāng)單片機(jī)讀/寫顯示內(nèi)容時,RS是高電平。任務(wù)1.在LCD12864屏幕上顯示信息2.液晶顯示的指令控制液晶的游標(biāo)、顯示狀態(tài)等都受到指令的控制。在如圖9.1-4和圖9.1-5所示的時序中,當(dāng)RS為低電平時,單片機(jī)向液晶發(fā)送操作指令,其數(shù)據(jù)線上DB0-DB7上的數(shù)值為指令碼。液晶控制器(以ST7920為例)提供基本指令和擴(kuò)充指令兩套控制命令,常用指令見表9.1-4所示。指令RSR/W指令碼DB7DB6DB5DB4DB3DB2DB1DB0功能功能設(shè)定000x3000110RE00RE=0基本指令集清除顯示000x0100000001DDRAM的地址計數(shù)器AC設(shè)定為00H,并清除DDRAM里的顯示內(nèi)容。地址歸位000x0200000010DDRAM的地址計數(shù)器AC設(shè)定為00H,游標(biāo)也回到原點(diǎn),DDRAM內(nèi)容不發(fā)生變化。進(jìn)入點(diǎn)設(shè)定000x04+偏移地址000001I/DSI/D=0,光標(biāo)左移,DDRAM地址計數(shù)器AC減1;I/D=1,光標(biāo)右移,AC加1;S=0,畫面整體不變S=1,畫面整體移動顯示狀態(tài)開關(guān)000x08+偏移地址00001DCBD:整體顯示控制位當(dāng)D=1,整體顯示ON;當(dāng)D=0,整體顯示OFF,DDRAM里的內(nèi)容不變。C:光標(biāo)控制位,1:光標(biāo)ON;0:光標(biāo)OFF。B:光標(biāo)位置反白控制位。1:ON,光標(biāo)所在地址上的數(shù)據(jù)反白顯示;0:OFF。任務(wù)1.在LCD12864屏幕上顯示信息指令RSR/W指令碼DB7DB6DB5DB4DB3DB2DB1DB0功能游標(biāo)或顯示移位控制000x10+偏移值0001S/CR/L00設(shè)定游標(biāo)的移動與顯示的移位控制位,不改變DDRAM內(nèi)容。R/L=1:光標(biāo)向右移動;R/L=0:光標(biāo)向左移動S/C=1:光標(biāo)顯示跟著光標(biāo)移動;S/C=0:光標(biāo)顯示移位off。設(shè)定CGRAM地址000x60+偏移地址01AC5AC4AC3AC2AC1AC0設(shè)定CGRAM地址到地址計數(shù)器AC。設(shè)定DDRAM地址000x80+偏移地址1AC6AC5AC4AC3AC2AC1AC0設(shè)定DDRAM地址到地址計數(shù)器AC。讀取忙碌標(biāo)志01讀出值BFAC6AC5AC4AC3AC2AC1AC0BF:1,忙碌標(biāo)志位,1表示忙碌,同時可以讀出地址計數(shù)器AC的值。寫資料到RAM10寫入的數(shù)D7D6D5D4D3D2D1D0寫入資料到內(nèi)部的RAM。讀出RAM11讀出的值D7D6D5D4D3D2D1D0從內(nèi)部RAM讀取資料功能設(shè)定000x3400110RE00RE=1擴(kuò)充指令集設(shè)定繪圖RAM地址000x80+偏移地址1AC6AC5AC4AC3AC2AC1AC0在擴(kuò)充指令集下,設(shè)定CGRAM地址到地址計數(shù)器AC。任務(wù)1.在LCD12864屏幕上顯示信息(1)寫數(shù)據(jù)的子函數(shù)。在寫數(shù)據(jù)的時候沒有讀忙標(biāo)志,而是做了延時處理。voidLCD12864_Write_Data(unsignedchardat){LCD_E=0;LCD_RW=0;//選擇寫模式LCD_RS=1;//選擇數(shù)據(jù)模式//延時Delay100us(1);//將數(shù)據(jù)準(zhǔn)備LCD_Data=dat;Delay100us(1);LCD_E=1;//表示開始寫入數(shù)據(jù),上升沿寫入數(shù)據(jù)Delay100us(50);//延時等待數(shù)據(jù)全部發(fā)送完成}任務(wù)1.在LCD12864屏幕上顯示信息(2)向12864中寫入命令的子函數(shù)voidLCD12864_Write_Com(unsignedcharcom){//首先我們設(shè)置片選信號LCD_E=0;//片選信號一般設(shè)置為0表示片選LCD_RW=0;//選擇寫模式LCD_RS=0;//選擇命令模式//延時Delay100us(1);//數(shù)據(jù)準(zhǔn)備LCD_Data=com;Delay100us(1);LCD_E=1;//表示開始寫入數(shù)據(jù),上升沿寫入數(shù)據(jù)Delay100us(50);}任務(wù)1.在LCD12864屏幕上顯示信息(3)讀12864的狀態(tài)ucharReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;Delay100us(1);LCD_E=1;Delay100us(1);while(LCD_Data&Busy);//檢測忙信號LCD_E=0;return(LCD_Data);}任務(wù)1.在LCD12864屏幕上顯示信息任務(wù)具體代碼:此代碼基于圖9.1-1接口電路STC15F2K60S2單片機(jī)開發(fā),如果使用其它接口電路更改管腳定義即可。#include<STC15F2K60S2.H>#include<math.h>#include<INTRINS.H>#defineucharunsignedchar#defineuintunsignedint#definexcharunsignedcharcode#define LCD_DataP0#define DELAYMS80//MCUInterfaceDefinationsbitLCD_RS = P2^0;任務(wù)1.在LCD12864屏幕上顯示信息sbitLCD_RW = P2^1;sbitLCD_E =P1^2;sbitLCD_PSB= P2^6;sbitLCD_RST = P3^4;ucharcodelesson[]={"單片機(jī)應(yīng)用"};ucharcodename[]={"姓名:王小明"};ucharcodeclasses[]={"班級:天才班"};ucharcodeID[]={"學(xué)號:203011758"};#defineBusy0x80//用于檢測LCD狀態(tài)字中的Busy標(biāo)識voidDelay100us(unsignedchark) //@11.0592MHz{任務(wù)1.在LCD12864屏幕上顯示信息unsignedchari,j;while(k--) { _nop_(); _nop_(); i=2; j=15; do { while(--j); }while(--i); }}

任務(wù)1.在LCD12864屏幕上顯示信息//向12864中寫入數(shù)據(jù)voidLCD12864_Write_Data(unsignedchardat){LCD_E=0;LCD_RW=0;//選擇寫模式LCD_RS=1;//選擇數(shù)據(jù)模式//延時Delay100us(1);//將數(shù)據(jù)準(zhǔn)備LCD_Data=dat;Delay100us(1);LCD_E=1;//表示開始寫入數(shù)據(jù),上升沿寫入數(shù)據(jù)任務(wù)1.在LCD12864屏幕上顯示信息Delay100us(50);//延時等待數(shù)據(jù)全部發(fā)送完成}//向12864中寫入命令voidLCD12864_Write_Com(unsignedcharcom){//首先我們設(shè)置片選信號LCD_E=0;//片選信號一般設(shè)置為0表示片選LCD_RW=0;//選擇寫模式LCD_RS=0;//選擇命令模式//延時Delay100us(1);//將數(shù)據(jù)準(zhǔn)備任務(wù)1.在LCD12864屏幕上顯示信息LCD_Data=com;Delay100us(1);LCD_E=1;//表示開始寫入數(shù)據(jù),上升沿寫入數(shù)據(jù)Delay100us(50);}//讀狀態(tài)ucharReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;Delay100us(1);任務(wù)1.在LCD12864屏幕上顯示信息LCD_E=1;Delay100us(1);while(LCD_Data&Busy);//檢測忙信號LCD_E=0;return(LCD_Data);}//對LCD12864進(jìn)行初始化voidLCD12864_Init(){LCD_PSB=1;//并口,如果是0則為SPI串口 /*開始初始化的步驟*/LCD12864_Write_Com(0x30); //基本指令集任務(wù)1.在LCD12864屏幕上顯示信息LCD12864_Write_Com(0x08); //光標(biāo)畫面都OFFLCD12864_Write_Com(0x01); //顯示歸零LCD12864_Write_Com(0x06); //光標(biāo)右移,畫面整體不變LCD12864_Write_Com(0x0c); //畫面、光標(biāo)都開啟顯示}/*顯示中文和ascii碼。單個字符實際坐標(biāo):0x80->0x870x90->0x970x88->0x8f0x98->0x9f//這個坐標(biāo)我們自己規(guī)定的,再換算成上面的實際坐標(biāo)就可以了任務(wù)1.在LCD12864屏幕上顯示信息輸入坐標(biāo)(1,1)->(1,8)(4,1)->(4,8)再指出需要顯示的字符*/unsignedcharLCD_addr[]={0x80,0x90,0x88,0x98};voidLCD12864_Display_Char(ucharx,uchary,uchardat){LCD12864_Write_Com(0x30);LCD12864_Write_Com(0x06);//寫入地址LCD12864_Write_Com(LCD_addr[x-1]+(y-1));//上面的輸入坐標(biāo)//寫入數(shù)據(jù)LCD12864_Write_Data(dat);任務(wù)1.在LCD12864屏幕上顯示信息}//顯示漢字voidLCD12864_Display_Chars(unsignedcharx,unsignedchary,unsignedchar*dat){LCD12864_Write_Com(0x30);LCD12864_Write_Com(0x06);//寫入地址LCD12864_Write_Com(LCD_addr[x-1]+(y-1));//寫入數(shù)據(jù)while(*dat!='\0'){LCD12864_Write_Data(*dat);dat++;}}任務(wù)1.在LCD12864屏幕上顯示信息voidmain(){ Delay100us(10); LCD12864_Init(); LCD12864_Display_Chars(1,1,lesson);//顯示字庫中的中文數(shù)字LCD12864_Display_Chars(2,1,name);//顯示字庫中的中文數(shù)字LCD12864_Display_Chars(3,1,classes);//顯示字庫中的中文LCD12864_Display_Chars(4,1,ID);//顯示字庫中的中文數(shù)字 while(1) { ; } }任務(wù)1.在LCD12864屏幕上顯示信息二維碼9.1-1LCD顯示12864屏應(yīng)用程序任務(wù)25參考代碼及開發(fā)結(jié)果見二維碼9.1-1。9.2.狀態(tài)機(jī)設(shè)計狀態(tài)機(jī)是有限狀態(tài)機(jī)(Finite-statemachine,F(xiàn)SM)的簡稱,也稱有限狀態(tài)自動機(jī)。有限狀態(tài)機(jī)表示一個系統(tǒng)是有限個狀態(tài),有限狀態(tài)機(jī)中的狀態(tài)可以在事件觸發(fā)下自動轉(zhuǎn)移到下一個狀態(tài),在轉(zhuǎn)移過程中通常伴隨有某個動作。通常用狀態(tài)轉(zhuǎn)移圖描述狀態(tài)轉(zhuǎn)移的過程。狀態(tài):指物質(zhì)系統(tǒng)所處的狀況。將一個系統(tǒng)離散化,可以得到很多種狀態(tài),例如:地鐵閘機(jī)有打開、關(guān)閉兩個狀態(tài),電風(fēng)扇可以劃分為一檔、二檔、三檔、關(guān)閉等狀態(tài)。狀態(tài)可以用狀態(tài)變量來表示。轉(zhuǎn)移:一個狀態(tài)在某個事件觸發(fā)后,進(jìn)入到另外一個狀態(tài)的過程,就稱為轉(zhuǎn)移。地鐵閘機(jī)從關(guān)閉到打開,就說狀態(tài)發(fā)生了轉(zhuǎn)移。事件:執(zhí)行某個操作的觸發(fā)條件或者口令,是狀態(tài)機(jī)中進(jìn)入某個狀態(tài)的條件,比如過地鐵閘機(jī),“刷卡”就是一個事件。動作:也稱輸出或響應(yīng),指在某個狀態(tài)時特定發(fā)生的事情。比如,地鐵閘機(jī)在關(guān)閉或打開兩個狀態(tài)轉(zhuǎn)換的過程中,就有關(guān)門、開門的動作。9.2.狀態(tài)機(jī)設(shè)計FSM設(shè)計可以將復(fù)雜的問題分解為狀態(tài)管理和狀態(tài)轉(zhuǎn)換,是數(shù)字電路中非常重要的設(shè)計方法。狀態(tài)機(jī)設(shè)計首先要畫狀態(tài)遷移圖。以地鐵閘機(jī)為例,狀態(tài)遷移過程如圖9.2-1所示。圖中圓方框是狀態(tài),方框內(nèi)“|”左邊是狀態(tài),右邊是該狀態(tài)的響應(yīng)動作,箭頭表示轉(zhuǎn)移過程,箭頭曲線上的文字表明了狀態(tài)變化的條件(事件)。圖9.2-1狀態(tài)遷移圖第五章使用行列掃描矩陣按鍵法獲得兩行8個按鍵的鍵值,本章介紹使用狀態(tài)機(jī)獲得鍵值的方法。9.2.狀態(tài)機(jī)設(shè)計矩陣按鍵檢測的狀態(tài)轉(zhuǎn)移圖如圖9.2-2所示,一共有四個狀態(tài),起始狀態(tài)空閑;當(dāng)有按鍵按下,先進(jìn)行軟件消抖,防止誤操作;當(dāng)檢測到按鍵持續(xù)按下,則確認(rèn)有按鍵按下,同時記錄按下的時間,以區(qū)分短按和長按。當(dāng)按鍵釋放,則回到起始空閑狀態(tài)。圖9.2-2按鍵檢測狀態(tài)圖傳統(tǒng)做法都是在程序中增加延時消除按鍵抖動,但是頻繁調(diào)用延時delay子函數(shù)讓單片機(jī)空操作,實用性不高,采用狀態(tài)機(jī)則可以避免單片機(jī)的空跑,任務(wù)26采用狀態(tài)機(jī)編程思想編寫按鍵檢測代碼。任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描任務(wù)要求:4行4列矩陣式鍵盤,當(dāng)任一按鍵短時按下,就在數(shù)碼管上顯示該按鍵值;當(dāng)任一按鍵長時按下就熄滅顯示。1.任務(wù)資訊及分析:(1)鍵盤是人機(jī)接口的重要輸入設(shè)備,4×4、4×2鍵盤在電子產(chǎn)品中應(yīng)用十分廣泛。同學(xué)們在理解鍵盤掃描原理的基礎(chǔ)上,還要了解數(shù)碼管顯示鍵值的技巧。(2)矩陣式鍵盤由行線和列線組成,按鍵的兩端分別連接一個行線、一個列線,按鍵電路和第5章圖5.2-4一致。鍵值從左到右、從上往下在0~15編號,鍵值=行號×4+列號(行號、列號均在0~3之間取值)如圖9.2-4所示,圖5.2-4矩陣鍵盤只有兩行,因此對應(yīng)鍵值0~7。圖9.2-3矩陣鍵盤的鍵值任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描(3)檢測按鍵鍵值的方法有逐列掃描法、行列反轉(zhuǎn)法。本次采用行列反轉(zhuǎn)法編寫程序。(4)為了避免單片機(jī)延時空轉(zhuǎn),保證實時性,采用狀態(tài)機(jī)思想編程。2.代碼規(guī)劃:(1)編寫鍵盤掃描程序,行列反轉(zhuǎn)法獲得鍵值,同時讓鍵值顯示在數(shù)碼管上。程序流程如圖9.2-4所示:圖9.2-4程序流程圖任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描(2)采用模塊化編程思想,定義狀態(tài)機(jī)及按鍵相關(guān)數(shù)據(jù)類型://狀態(tài)typedefenum_keyState_TypeDef{ keyStateIdle=0, keyStateDebounce, keyStateConfirm, keyStatePressLong, }keyStateTypeDef;//響應(yīng)typedefenum_keyRESP_TypeDef{任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描keyRESPNull=0x00, keyRESPClick=0x01, keyRESPLongPress=0x02}keyRESPTypeDef;//事件typedefenum{ keyEventPress=0, keyEventRelease}keyEventTypeDef;//與按鍵有關(guān)的數(shù)據(jù)(或?qū)傩裕﹖ypedefstruct_keyData_TypeDef{任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描unsignedintkeyCount;//按鍵次數(shù) keyRESPTypeDefkeyRESP;//按鍵事件 keyStateTypeDefkeyState;//按鍵狀態(tài) keyEventTypeDefkeyEvent;//按鍵管腳電平}keyDataTypeDef;//變量定義,函數(shù)定義keyDataTypeDefkeyData;voidKeyEventCheck(void);voidKeyReadStateMachine(void);任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描(3)狀態(tài)機(jī)函數(shù)/************檢測是否有按鍵按下************************/staticvoidKeyEventCheck(void)//檢查是否有按鍵按下{ P0=0x0f;//列線Y拉高,行線X拉低 if(P0!=0x0f)//檢查列線,是否有按鍵按下 keyData.keyEvent=keyEventPress; else keyData.keyEvent=keyEventRelease;}/******狀態(tài)機(jī),讀取矩陣鍵盤鍵值************************/voidKeyReadStateMachine(void){9.2.狀態(tài)機(jī)設(shè)計staticu8col; KeyEventCheck(); switch(keyData.keyState) { casekeyStateIdle: if(keyData.keyEvent==keyEventPress)//如果有按鍵按下 keyData.keyState=keyStateDebounce;//去抖 break; casekeyStateDebounce: if(keyData.keyEvent==keyEventPress)//去抖后依舊按下 { keyData.keyState=keyStateConfirm;

keyData.keyRESP=keyRESPNull;任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描if(P00==0)col=1;//確定列號//查詢按鍵號碼 if(P01==0)col=2; if(P02==0)col=3; if(P03==0)col=4; P0=0xf0;//列線Y拉低,行線X拉高 if(P06==0){key_value=col-1;} if(P07==0){key_value=col+3; } } else { keyData.keyState=keyStateIdle; keyData.keyRESP=keyRESPNull; }任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描 break;

casekeyStateConfirm: if((keyData.keyEvent==keyEventPress)&(keyData.keyCount>=keyLongPressTime)) { keyData.keyState=keyStatePressLong; keyData.keyCount=0; } elseif((keyData.keyEvent==keyEventPress)&(keyData.keyCount<keyLongPressTime)) {任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描 keyData.keyCount++; keyData.keyState=keyStateConfirm; } else { keyData.keyCount=0; keyData.keyState=keyStateIdle;//按鍵釋放 keyData.keyRESP=keyRESPClick;//按鍵響應(yīng) } break; casekeyStatePressLong: if(keyData.keyEvent==keyEventPress) //一直等待釋放任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描{ keyData.keyState=keyStatePressLong; keyData.keyRESP=keyRESPNull; keyData.keyCount=0; } else { keyData.keyState=keyStateIdle; keyData.keyRESP=keyRESPLongPress; keyData.keyCount=0; } break; default:break; } }任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描(4)定時器中斷程序/******定時器0中斷服務(wù)函數(shù),定時事件1ms***********************/voidTimer0_Isr(void)interrupt1{ staticu8intr=0; DisplayScan();//每隔1ms數(shù)碼管掃描一次 if(++intr==10) { intr=0; KeyReadStateMachine();//每隔10ms掃描按鍵一次 } if(keyData.keyRESP==keyRESPClick) {任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描dspbuf[7]=key_value%10;//按鍵值的個位數(shù) dspbuf[6]=key_value/10;//按鍵值的十位數(shù) } if(keyData.keyRESP==keyRESPLongPress)//數(shù)碼管熄滅 { dspbuf[7]=10; dspbuf[6]=10; dspbuf[5]=10; dspbuf[4]=10; dspbuf[3]=10; dspbuf[2]=10; dspbuf[1]=10; dspbuf[0]=10; }}任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描二維碼9.2-1狀態(tài)機(jī)矩陣按鍵掃描應(yīng)用程序任務(wù)26參考代碼及開發(fā)結(jié)果見二維碼9.2-1。以上程序依靠狀態(tài)機(jī)完成了按鍵掃描,沒有調(diào)用延時函數(shù),防止了單片機(jī)空轉(zhuǎn)。9.3.總線擴(kuò)展復(fù)用設(shè)計盡管現(xiàn)代單片機(jī)管腳功能豐富,但在實際應(yīng)用中還存在著因為管腳數(shù)量不夠用而需要系統(tǒng)擴(kuò)展的時候。為此引入總線的概念??偩€是計算機(jī)系統(tǒng)的重要組成部分,它是一組信號線的集合,是計算機(jī)系統(tǒng)各模塊間傳送地址、數(shù)據(jù)和控制信息的公共通路??偩€是各部件聯(lián)系的紐帶,它是計算機(jī)通信接口的重要技術(shù)。單片機(jī)總線就是單片機(jī)連接擴(kuò)展設(shè)備的一組公共信號線。按照功能劃分,總線可以劃分為地址總線、數(shù)據(jù)總線和控制總線:地址總線(AddressBus,AB),單片機(jī)向外發(fā)出的地址信號,以選擇外部設(shè)備或者設(shè)備內(nèi)部存儲單元。數(shù)據(jù)總線(DataBus,DB),單片機(jī)與外部設(shè)備之間進(jìn)行數(shù)據(jù)傳送的一組信號線。數(shù)據(jù)總線是雙向的,既可以由單片機(jī)向外部輸出數(shù)據(jù),也可以由外部向單片機(jī)輸入數(shù)據(jù)。控制總線(ControlBus,CB),單片機(jī)發(fā)出的一組控制命令信號線。按照總線的數(shù)量又可以劃分為并行擴(kuò)展總線和串行擴(kuò)展總線:9.3.總線擴(kuò)展復(fù)用設(shè)計并行擴(kuò)展總線:單片機(jī)一次傳輸一個字節(jié),數(shù)據(jù)總線有8條。串行擴(kuò)展總線:單片機(jī)一次傳輸一個位,數(shù)據(jù)總線只有1條。當(dāng)單片機(jī)連接設(shè)備時,如果管腳數(shù)量不夠用,可以將設(shè)備通過擴(kuò)展總線與單片機(jī)連接起來,如圖9.3-1所示。每次只有一個設(shè)備被選中傳輸信息。圖9.3-1三總線擴(kuò)展示意圖9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計如果擴(kuò)展總線上的設(shè)備數(shù)量太多,為了節(jié)省地址線,通常增加譯碼器電路。圖9.3-2展示了一種地址總線電路設(shè)計方法。P0端口是數(shù)據(jù)總線,P27、P26、P25經(jīng)過譯碼后與WR或非后構(gòu)成了地址總線。圖9.3-2譯碼器地址總線擴(kuò)展示意圖9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計3-8譯碼器電路見圖9.3-3。地址選擇管腳CBA分別連接P27、P26、P25,使能端G1、G2A、G2B直接連接到相應(yīng)的高電平或地,輸出則連接到了圖9.3-4或非門的輸入一端?;蚍情T的另一端WR受跳線J13控制,連接單片機(jī)P42腳或者接地。單片機(jī)自帶WR和RD功能腳,WR和RD時序由51單片機(jī)自動產(chǎn)生,在執(zhí)行MOVXA,@DPTR時,RD自動跳變到低電平;在執(zhí)行MOVX@DPTR,A時,WR自動跳變到低電平。指令MOVX意味著要訪問寄存器片外存儲器DPTR。圖9.3-4電路可以利用單片機(jī)自帶WR功能節(jié)約編程量。圖9.3-3譯碼器電路9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計鎖存器電路見圖9.3-5,使能/OE直接連接GND,LE連接或非門輸出,當(dāng)LE是高電平,鎖存器輸出跟隨輸入;當(dāng)LE是低電平時,鎖存器閉鎖,輸入不起作用,輸出Q保持原有電平。圖9.3-4或非門電路

圖9.3-5鎖存器電路9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計器的編碼情況如表9.3-1所示,僅使用了4個編碼。P2.7、P2.6、P2.5作用說明111數(shù)碼管的段選共陽數(shù)碼管1108位數(shù)碼管的位選101蜂鳴器、電機(jī)、繼電器控制P0高電平時,蜂鳴器、繼電器動作100控制LED指示燈組P0低電平時,LED點(diǎn)亮其他無無表9.3-1總線擴(kuò)展3-8譯碼器的編碼表9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計LED燈組的總線復(fù)用電路如圖9.3-6所示,LED的負(fù)極連接鎖存器輸出,譯碼器選中Y4C后,P0控制LED的亮滅。圖9.3-6LED指示燈電路9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計LED燈組的總線復(fù)用電路如圖9.3-6所示,LED的負(fù)極連接鎖存器輸出,譯碼器選中Y4C后,P0控制LED的亮滅。圖9.3-6LED指示燈電路9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計LED燈組的總線復(fù)用電路如圖9.3-6所示,LED的負(fù)極連接鎖存器輸出,譯碼器選中Y4C后,P0控制LED的亮滅。圖9.3-6LED指示燈電路任務(wù)2.狀態(tài)機(jī)實現(xiàn)鍵盤掃描二維碼9.3-1總線復(fù)用LED點(diǎn)亮應(yīng)用程序點(diǎn)亮LED燈的程序參考二維碼9.3-1:9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計數(shù)碼管總線復(fù)用數(shù)碼管連接電路如圖9.3-7所示。8位數(shù)碼管的顯示段碼短接在一起,受鎖存器U7的控制,當(dāng)Y7C被3-8譯碼器選中(高電平),顯示段碼按照P0的輸出顯示字型;當(dāng)Y7C釋放后(低電平),顯示段碼維持原有字型。因為數(shù)碼管其實就是異形發(fā)光二極管組成,因此,顯示段碼也串聯(lián)了限流電阻。8位數(shù)碼管的位選受鎖存器U8的控制,當(dāng)Y6C被3-8譯碼器選中,P0端口的輸出就決定了哪個數(shù)碼管被選中,注意,同一時刻一次只能選中一個數(shù)碼管。圖9.3-7數(shù)碼管顯示連接電路9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計二維碼9.3-2總線復(fù)用數(shù)碼管動態(tài)顯示應(yīng)用程序數(shù)碼管顯示年月日的程序參考二維碼9.3-2:9.4.人機(jī)接口綜合練習(xí)在學(xué)習(xí)了人機(jī)接口電路的基本模塊后,現(xiàn)在開始人機(jī)接口綜合練習(xí)。生活中很多產(chǎn)品如空調(diào)、冰箱、電視機(jī)、測控系統(tǒng)等都是典型單片機(jī)應(yīng)用系統(tǒng),本節(jié)以前面章節(jié)的知識為基礎(chǔ)進(jìn)行綜合性練習(xí)。任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)任務(wù)要求:模擬一個風(fēng)扇控制系統(tǒng)。按鍵控制風(fēng)扇的轉(zhuǎn)動速度和定時時間,數(shù)碼管實時顯示風(fēng)扇的工作模式,動態(tài)倒計時顯示剩余的定時時間。圖9.4-1是系統(tǒng)框圖,由數(shù)碼管顯示、單片機(jī)最小系統(tǒng)、按鍵輸入和PWM控制保護(hù)電路組成。圖9.4-1模擬風(fēng)扇控制系統(tǒng)框圖(第七屆藍(lán)橋杯預(yù)賽試題)任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)模擬風(fēng)扇控制系統(tǒng)功能描述如下:1.工作模式設(shè)備具有“睡眠風(fēng)”、“自然風(fēng)”和“常風(fēng)”三種工作模式,可以通過按鍵切換,通過單片機(jī)管腳輸出PWM信號控制電機(jī)運(yùn)行,信號頻率為1KHz。(1)“睡眠風(fēng)”模式下,對應(yīng)PWM占空比為20%;(2)“自然風(fēng)”模式下,對應(yīng)PWM占空比為30%;(3)“常風(fēng)”模式下,對應(yīng)占空比為70%。2.數(shù)碼管顯示數(shù)碼管實時顯示設(shè)備當(dāng)前工作模式和剩余工作時間(倒計時),如圖9.4-2所示。圖9.4-2工作模式和剩余工作時間顯示前3位顯示工作模式:1-睡眠風(fēng);2-自然風(fēng);3-常風(fēng)。后4位顯示剩余工作時間(單位秒)。任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)3.按鍵控制控制系統(tǒng)一共有四個按鍵,每個按鍵的功能如下:(1)第1個按鍵是工作模式切換按鍵。每按下一次,設(shè)備循環(huán)切換三種工作模式;(2)第2個按鍵是定時按鍵。為了簡化開發(fā),定時時間在0、1、2分鐘間切換,假設(shè)每按下一次,定時時間就重置一次,倒計時重新開始。設(shè)備剩余工作時間為0時,停止PWM信號輸出。第3個按鍵定義為“停止”按鍵。按下后,立即清零剩余工作時間,PWM信號停止輸出,除非第2個按鍵重新設(shè)置定時時間。(4)第4個按鍵定義為“室溫”按鍵。按下后,數(shù)碼管顯示當(dāng)前室溫,數(shù)碼管顯示格式如圖9.4-3所示,再次按下該按鍵,返回工作模式和剩余工作時間顯示。室溫測量功能不應(yīng)影響設(shè)備正在執(zhí)行的PWM信號輸出、停止、模式切換和計時等功能。圖9.4-3當(dāng)前室溫顯示任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)4.LED指示燈“睡眠風(fēng)”模式下L1點(diǎn)亮,“自然風(fēng)”模式下L2點(diǎn)亮,“常風(fēng)”模式下L3點(diǎn)亮;按下停止按鍵或倒計時結(jié)束時,LED全部熄滅。任務(wù)分析:風(fēng)扇電機(jī)的輸入信號是PWM波形,頻率固定1KHz,占空比在20%、30%、70%可調(diào)。令定時器0的定時周期時間100us。開始輸出PWM信號時,輸出高電平,當(dāng)定時到200us、或者300us、700us時輸出低電平。以20%占空比為例,PWM波形如圖9.4-4所示。圖9.4-4占空比20%的PWM波形任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)開啟定時器1,用于數(shù)碼管周期性動態(tài)掃描。該系統(tǒng)平時都顯示工作狀態(tài)和時間,有按鍵輸入時,則切換顯示內(nèi)容、調(diào)整PWM占空比或測量室溫,因此在main函數(shù)的大循環(huán)里實施按鍵檢測。圖9.4-5和圖9.4-6展示了程序流程,在主程序中要執(zhí)行兩個功能,一個是檢測按鍵,一個是管理顯示內(nèi)容。任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)圖9.4-5主流程圖任務(wù)3.人機(jī)接口綜合練習(xí)——模擬風(fēng)扇控制系統(tǒng)圖9.4-6數(shù)碼管顯示內(nèi)容管理的流程圖9.3.1.總線擴(kuò)展應(yīng)用電路設(shè)計二維碼9.4-1風(fēng)扇控制系統(tǒng)應(yīng)用編程

任務(wù)25具體代碼參考二維碼9.4-1:謝謝&提問網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第十章傳感器模塊開發(fā)技術(shù)目錄CONTENT10.1.傳感器知識簡介10.2.溫度傳感DS18B20數(shù)據(jù)的讀取10.3.超聲波數(shù)據(jù)的讀取10.1.傳感器知識簡介傳感器是人工智能的基礎(chǔ),傳感器代替了人對周圍環(huán)境的感知能力,人的“五官”——眼、耳、鼻、舌、皮膚分別具有視覺、聽覺、嗅覺、觸覺等功能,能直接感受外部環(huán)境和世界的變化,人的大腦對“五官”感受到的信息進(jìn)行加工、處理,從而調(diào)節(jié)人的行為活動。傳感器可以代替人的五官功能,甚至其能力比人的感官功能更加強(qiáng)大。比如,攝像頭可以代替人的眼睛,錄音機(jī)可以采集聲音,各種化學(xué)試劑可以代替代替鼻子和舌頭分辨物品的成分,壓力傳感器、溫度傳感器可以代替皮膚獲得重量以及冷熱信息。表征世界和環(huán)境的參量有很多種,我們可以分為電量和非電量兩大類。10.1.傳感器知識簡介電量:電壓、電流、電阻等。非電量:壓力、位移、重量、速度、溫度、酸堿度等。我們知道人工智能的核心是計算機(jī),就是說能和計算機(jī)連接的數(shù)據(jù)才屬于人工智能的范疇。計算機(jī)能檢測到的是電參量。因此非電量要轉(zhuǎn)換成電參量。能將非電量按照一定的規(guī)律(數(shù)學(xué)函數(shù)法則)轉(zhuǎn)換成電量的器件或裝置,就稱為傳感器。隨著科學(xué)技術(shù)的發(fā)展,傳感器技術(shù)、通信技術(shù)和計算機(jī)技術(shù)構(gòu)成了現(xiàn)代信息產(chǎn)業(yè)的三大支柱產(chǎn)業(yè),分別充當(dāng)著信息系統(tǒng)的“感官”、“神經(jīng)”和“大腦”,它們可以構(gòu)成一個完整的自動檢測系統(tǒng)。10.1.1.傳感器電路傳感器通常由敏感元件和轉(zhuǎn)換元件組成,如圖10.1-1所示。圖中敏感元件是指傳感器中能直接感受和響應(yīng)被測量的部分;轉(zhuǎn)換元件是指傳感器中能將敏感元件感受或響應(yīng)的被測量轉(zhuǎn)換成適于傳輸和測量的電信號部分;調(diào)理電路是把傳感元件輸出的電信號轉(zhuǎn)換成便于處理、控制、記錄和顯示的有用電信號所涉及的有關(guān)電路,如放大、濾波、阻抗變換等電路。圖10.1-1傳感器的組成框圖10.1.傳感器知識簡介以溫度傳感器為例,溫度傳感器內(nèi)部電路說明如下。1.圖10.1-2中RT是鉑電阻,是敏感元件。金屬鉑在溫度變化時自身電阻值也隨之改變,因此可以利用這個特性測量溫度。2.圖10.1-2中電阻橋是溫度測量電路。測量電阻橋電壓就得到溫度值。測量原理如下:是非平衡電橋的輸出電壓。電源流過電橋臂的電流見公式(10.1-1)、(10.1-2),輸出電壓公式(10.1-3)。(10.1-1)(10.1-2)10.1.傳感器知識簡介當(dāng)

時,電橋平衡,;當(dāng)RT發(fā)生變化,電橋非平衡,,根據(jù)電壓差就可以得到鉑電阻對應(yīng)的溫度。圖10.1-2電阻橋法的測溫原理圖

(10.1-3

)10.1.2.傳感器的分類1.按照工作原理分類:傳感器按其傳感的工作原理不同,大體上可分為物理型、化學(xué)型及生物型三大類。(1)物理傳感器利用某些變換元件的物理性質(zhì),以及某些功能材料的特殊物理性能制成的傳感器。如利用金屬、半導(dǎo)體材料在被測量作用下引起的電阻值變化的電阻式傳感器;利用磁阻隨被測量變化的電感、差動變壓器式傳感器;利用壓電晶體在被測力作用下產(chǎn)生的壓電效應(yīng)而制成的壓電式傳感器等。特別值得提及的是近年來利用半導(dǎo)體材料的某些特殊性質(zhì)又制成了多種傳感器,如利用半導(dǎo)體材料的壓阻效應(yīng)、光電效應(yīng)和霍爾效應(yīng)制成的壓敏、光敏和磁敏傳感器。10.1.2.傳感器的分類物理傳感器中又可分為物性型傳感器和結(jié)構(gòu)型傳感器、所謂物性型傳感器是利用某些功能材料本身所具有的內(nèi)在特性及效應(yīng)把被測量直接轉(zhuǎn)換為電量的傳感器。如利用壓電晶體制成的壓力傳感器,就是利用壓電材料本身所具有的正壓電效應(yīng)而實現(xiàn)壓力測量的;又例如光敏電阻,則是利用半導(dǎo)體材料對光強(qiáng)的變化使其電導(dǎo)率發(fā)生變化的所謂光電導(dǎo)效應(yīng)而制成的傳感器。結(jié)構(gòu)型傳感器是以結(jié)構(gòu)(如形狀、尺寸等)為基礎(chǔ),利用某些物理規(guī)律實現(xiàn)把被測信息轉(zhuǎn)換為電量,例如氣隙型電感式傳感器,它必須由按規(guī)定尺寸制成的鐵芯、一定匝數(shù)的線圈以及和鐵芯有一定間隙的銜鐵組成,只有滿足這些結(jié)構(gòu)與尺寸上的要求,才能保證在被測量使銜鐵與鐵芯間間隙變化時使其磁阻變化,從而產(chǎn)生相應(yīng)的電信號;10.1.2.傳感器的分類(2)化學(xué)傳感器是利用電化學(xué)反應(yīng)原理,把無機(jī)和有機(jī)化學(xué)物質(zhì)的成分、濃度等轉(zhuǎn)換為電信號的傳感器。最常用的是離子選擇性電極,利用這種電極來測量溶液中的pH值或某些離子的活度,如K、Na、Ca等?;瘜W(xué)傳感器廣泛應(yīng)用于化學(xué)分析,以及化學(xué)工業(yè)的在線檢測及環(huán)保監(jiān)測。(3)生物傳感器它是一種利用生物活性物質(zhì)選擇性的識別和測定生物化學(xué)物質(zhì)的傳感器,生物活性物質(zhì)對某種物質(zhì)具有選擇性親和力,也稱其為功轉(zhuǎn)換能識別能力,利用這種單一的識別能力來判斷某種物質(zhì)是否存在,其濃度是多少,進(jìn)而利用電化學(xué)的方法進(jìn)行電信號的轉(zhuǎn)換。10.1.2.傳感器的分類2.按照被測物理量分類按傳感器的被測物理量進(jìn)行分類,這種分類方法可以表現(xiàn)傳感器的功能。比如:位移、速度,加速度、力、壓力、流速、溫度、光強(qiáng)、濕度、黏度和濃度等傳感器。這種分類方法通常忽略傳感器的工作原理,如溫度傳感器中就包含有用不同材料和方法制成的各種溫度傳感器,如熱電偶溫度傳感器、熱敏電阻溫度傳感器、PN結(jié)二極管溫度傳感器、熱釋電溫度傳感器等。3.按輸出信號分類:按照傳感器輸出的信號特征,可以分為模擬傳感器、數(shù)字傳感器、開關(guān)傳感器。模擬傳感器:將被測量的非電學(xué)量轉(zhuǎn)換成模擬電信號。數(shù)字傳感器:將被測量的信號量轉(zhuǎn)換成數(shù)字輸出信號(二進(jìn)制數(shù)字構(gòu)成的碼字輸出)。開關(guān)傳感器:當(dāng)一個被測量的信號達(dá)到某個特定閾值時,傳感器相應(yīng)地輸出一個特定地低電平或高電平信號。10.1.3.傳感器的主要特征參數(shù)1.分辨率(Resolution)分辨率是傳感器在規(guī)定測量范圍內(nèi)所能檢測出的被測輸入量的最小變化量,有時用該值對滿量程輸入值百分?jǐn)?shù)表示,則稱為分辨力。比如一個溫度傳感器的分辨率是0.5℃,那么只有溫度變化超過0.5度,傳感器的輸出值才會發(fā)生變化。2.靈敏度(Sensitivity)靈敏度是指傳感器在穩(wěn)態(tài)工作情況下輸出量變化△y對輸入量變化△x的比值,即輸出、輸入量的量綱之比。傳感器靈敏度是輸出——輸入特性曲線的斜率。如果傳感器的輸出和輸入之間顯線性關(guān)系,則靈敏度S是一個常數(shù)。否則,它將隨輸入量的變化而變化。當(dāng)傳感器的輸出、輸入量的量綱相同時,靈敏度可理解為放大倍數(shù)。提高靈敏度,可得到較高的測量精度。但靈敏度愈高,測量范圍愈窄,穩(wěn)定性也往往愈差。10.1.3.傳感器的主要特征參數(shù)3.精度精度反應(yīng)了傳感器的測量準(zhǔn)確度,可以用測量誤差來表示。誤差越小,表明測量值越接近真實值;反之則表明測量值偏離真實值較大。誤差的表示方法有三種,分別是引用誤差、相對誤差和絕對誤差。(1)引用誤差引用誤差=(絕對誤差的最大值/測量滿量程)×100%(2)相對誤差相對誤差=(絕對誤差的最大值/測量值)×100%(3)絕對誤差絕對誤差值=|測量值-真實值|,絕對誤差表明了測量值偏離真實值的大小程度。工業(yè)測量中儀表銘牌上會注明精度等級,精度等級是最大誤差去掉正負(fù)號及百分號。常見的精度等級有0.005、0.02、0.05、0.1、0.2、0.35、0.4、0.5、1.0、1.5、2.5、4.0等,數(shù)值越小,代表精度越高。10.1.3.傳感器的主要特征參數(shù)例1:一臺精度為0.5級、量程范圍500~700℃的溫度傳感器,它最大允許誤差是多少?檢驗時某點(diǎn)最大絕對誤差是4℃,問此表是否合格?根據(jù)精度定義表達(dá)式,允許的絕對誤差的最大值=滿量程×(精度/100)=700×0.005=3.5℃此溫度傳感器最大允許誤差3.5℃.檢驗?zāi)滁c(diǎn)的最大絕對誤差為4℃,大于3.5℃,因此傳感器不合格。例2:某溫度傳感器測量范圍是0~500℃,根據(jù)工藝要求,測量誤差不允許超過±2℃,應(yīng)該如何選擇其精度才能滿足要求?知道了量程和誤差,現(xiàn)在問的是傳感器選取多大的精度合適,因為精度是引用誤差的值,所以先計算引用誤差引用誤差=(絕對誤差的最大值/測量滿量程)×100%=2/500×100%=0.4%精度是0.4,因此,精度要選擇0.4或者小于0.4的傳感器才能滿足要求。10.2.1.DS18B20功能概述DS18B20是美信(MAXIM)公司開發(fā)的一款數(shù)字溫度傳感器,它提供9~12位的攝氏溫度測量精度,并具有用戶可編程的過溫和低溫報警功能。1.芯片外觀及管腳DS18B20采用1-wire即單線通信方式——單根數(shù)據(jù)線(圖10.2-1中的DQ)與微控制器交換數(shù)據(jù)。傳感器溫度檢測范圍是-55℃至+125℃,即使溫度范圍超過-10℃至+85℃依然有±0.5℃的精度的精度。圖10.2-1溫度傳感器18B20芯片的外觀圖10.2.1.DS18B20功能概述18B20只有三種功能管腳。(1)VDD:電源管腳,在圖10.2-2外部供電方式下,VDD提供3.0~5.5V電源;在圖10.2-3寄生電源供電模式下,VDD要和GND連接在一起,此時DQ高電平時給內(nèi)部寄生電容供電,低電平時內(nèi)部寄生電容放電。圖10.2-2寄生電源供電模式下的電路連接圖圖10.2-3外部供電模式下的電路連接圖10.2.1.DS18B20功能概述(2)DQ:數(shù)據(jù)線。DQ連接DS18B20和微控制器,DQ是開漏管腳,在使用的時候,必須在該管腳上連接一個上拉電阻4.7K,DQ支持?jǐn)?shù)據(jù)輸入和輸出雙向傳輸。(3)VSS:接地線。2.溫度值存儲和計算DS18B20內(nèi)部有一組暫存存儲器(scratchpadmemory),如圖10.2-5所示。Byte0、1存儲溫度測量結(jié)果;Byte2、3存儲過溫和低溫報警值;Byte4是配置寄存器;Byte8是CRC校驗寄存器。圖10.2-4暫存寄存器的存儲內(nèi)容10.2.1.DS18B20功能概述(1)溫度寄存器Byte0、Byte1DS18B20的核心功能是溫度測量并通過內(nèi)置的模數(shù)轉(zhuǎn)換器,將溫度值轉(zhuǎn)換為數(shù)字形式存儲。Byte0、Byte1分別存儲了溫度的低8位和高8位。兩個字節(jié)的內(nèi)部定義如表10.2-1所示。表10.2-1兩個溫度寄存器的位定義10.2.1.DS18B20功能概述溫度寄存器2個字節(jié)共16位。Byte0的Bit7~bit5:整數(shù)部分。Byte0的Bit4~bit0:小數(shù)部分,小數(shù)點(diǎn)后面的值。Byte1的Bit15~bit11:符號位,當(dāng)S=0的時候,是正數(shù),當(dāng)S=1是負(fù)數(shù)。Byte1的Bit10~bit8:整數(shù)部分。DS18B20模數(shù)轉(zhuǎn)換精度有9、10、11、12位四種精度可選,它們的分辨率分別是0.5℃、0.25℃、0.125℃、0.0625℃。上電后默認(rèn)是12位轉(zhuǎn)換精度。當(dāng)12位精度時,兩個字節(jié)里所有位的值都有效;當(dāng)11位精度時,bit0無效;當(dāng)10位精度時,bit1和bit0無效;當(dāng)9位精度時,bit2、bit1、bit0無效。10.2.1.DS18B20功能概述(2)閾值寄存器Byte2和Byte3圖10.2-5是閾值寄存器的位定義,注意:最高位是符號位,其余是整數(shù)數(shù)值。圖10.2-5TH和TL寄存器的位定義(3)配置寄存器Byte4圖10.2-6是配置寄存器的位定義,bit6和bit5是不同分辨率的選擇設(shè)置,見表10.2-2。。圖10.2-6配置寄存器的位定義表10.2-2不同分辨率的轉(zhuǎn)換時間10.2.1.DS18B20功能概述(4)CRC校驗寄存器CRC校驗公式:CRC校驗(即循環(huán)冗余校驗)是數(shù)據(jù)通訊中最常用的差錯檢測措施。在使用的時候,對通訊數(shù)據(jù)進(jìn)行多項式計算,并將得到的結(jié)果附在幀的后面(如圖10.2-4所示,是DS18B20傳輸數(shù)據(jù)的最后一個字節(jié))。接收設(shè)備在接收到幀數(shù)據(jù)后做同樣的計算,如果計算結(jié)果為0,就表示通信正確,否則錯誤。單片機(jī)讀取DS18B20的寄存器值后,要轉(zhuǎn)換成溫度值,在寄存器值基礎(chǔ)上乘以分辨率。表10.2-3是12位轉(zhuǎn)換精度下溫度寄存器輸出數(shù)據(jù)與測量值之間的關(guān)系表。10.2.1.DS18B20功能概述計算舉例:第1行:07D0H×0.0625=125,溫度值125℃。第3行:0191H×0.0625=25.0625,溫度值25.0625℃。第7行:(FFFFH-FFF8+1)×0.0625=(7H+1)×0.0625=0.5,人為加上符號位后是-0.5℃。第7行開始,符號位是1,表明溫度值負(fù)數(shù)。轉(zhuǎn)換時,要反碼加1后再進(jìn)行計算。表10.2-3溫度值與溫度寄存器內(nèi)容轉(zhuǎn)換關(guān)系10.2.2.DS18B20的單總線數(shù)據(jù)通信過程單片機(jī)訪問DS18B20有三個步驟:第1步:總線復(fù)位,見圖10.2-7。首先單片機(jī)拉低總線最少480μs,DS18B20等待16-60μs后,DS18B20主動拉低總線60-240μs。圖10.2-7總線復(fù)位過程第2步:單片機(jī)發(fā)送ROM地址,選定器件。第3步:單片機(jī)發(fā)送DS18B20功能命令10.2.2.DS18B20的單總線數(shù)據(jù)通信過程這兩個步驟都有讀和寫總線的過程,其時序如圖10.2-8所示,在單片機(jī)“寫”18B20的過程中,數(shù)據(jù)至少要維持45μs讓18B20采樣;在單片機(jī)“讀”的過程中,CPU至少要在總線拉低維持15us后再讀總線數(shù)據(jù)。圖10.2-8主機(jī)寫和讀的時間順序10.2.2.DS18B20的單總線數(shù)據(jù)通信過程按照兩個時序圖編寫DS18B20的底層驅(qū)動代碼。1.首先編寫延時函數(shù):voidDelay_OneWire(unsignedintt)//延時t個微秒{ unsignedchari; while(t--){ for(i=0;i<12;i++); }}2.初始化bitinit_ds18b20(void)10.2.2.DS18B20的單總線數(shù)據(jù)通信過程{ bitinitflag=0; DQ=1;//在復(fù)位之前,確認(rèn)DQ在高電平 Delay_OneWire(12); DQ=0;//下降沿,提醒從機(jī)有事件發(fā)生 Delay_OneWire(80);//延時大于480us DQ=1;//交出總線,等待從機(jī)的應(yīng)答 Delay_OneWire(10);//14 initflag=DQ;//從機(jī)將總線拉低,表示復(fù)位正確,否則失敗 Delay_OneWire(5); returninitflag;}10.2.2.DS18B20的單總線數(shù)據(jù)通信過程3.數(shù)據(jù)寫,通過單總線向DS18B20寫一個字節(jié)voidWrite_DS18B20(unsignedchardat){ unsignedchari; for(i=0;i<8;i++)//循環(huán)8次,完成8個位的傳輸 { DQ=0;//搶占總線 DQ=dat&0x01;//LSB開始 Delay_OneWire(5); DQ=1;//釋放總線 dat>>=1; } Delay_OneWire(5);}10.2.2.DS18B20的單總線數(shù)據(jù)通信過程4.數(shù)據(jù)讀,從DS18B20讀取一個字節(jié)unsignedcharRead_DS18B20(void){ unsignedchari; unsignedchardat; for(i=0;i<8;i++)//循環(huán)8次,讀完整字節(jié) { DQ=0;//下降沿,提醒從機(jī)有事件

10.2.2.DS18B20的單總線數(shù)據(jù)通信過程 dat>>=1; DQ=1;//釋放總線 if(DQ)//dat初始化是0,如果讀到1,就改變dat的值 { dat|=0x80;//先獲得LSB,最后MSB } Delay_OneWire(5); } returndat;}任務(wù)1.DS18B20溫度測量應(yīng)用開發(fā)圖10.2-9是DS18B20電路連接圖,使用表10.2-5的通信過程。圖10.2-9DS18B20連接電路表10.2-4推薦通信過程,注意:Tx是主機(jī)發(fā)送數(shù)據(jù)給從機(jī),Rx表示主機(jī)等待從機(jī)發(fā)送數(shù)據(jù)給它。序號MastermodeData(LSBfirst)說明1TxReset主機(jī)發(fā)布復(fù)位脈沖2RxPresenceDS18B20應(yīng)答脈沖3TxCCh主機(jī)發(fā)布跳過ROM命令4Tx44h主機(jī)發(fā)布溫度轉(zhuǎn)換命令5

等待等待18B20轉(zhuǎn)換結(jié)束,等待時間見表6TxReset主機(jī)發(fā)布復(fù)位脈沖7RxPresenceDS18B20應(yīng)答脈沖8TxCCh主機(jī)發(fā)布跳過ROM命令9TxBEh主機(jī)發(fā)布溫度讀取命令10Rx9databytes18B20將暫存寄存器的內(nèi)容發(fā)送給主機(jī)。任務(wù)1.DS18B20溫度測量應(yīng)用開發(fā)具體任務(wù)要求如下:1.查詢DS18B20的溫度值,要求能顯示正溫度和負(fù)溫度,正數(shù)的時候符號位數(shù)碼管熄滅,負(fù)數(shù)的時候符號位顯示“-”。2.按鍵切換是否顯示小數(shù)點(diǎn)后溫度值,第一次按下,帶小數(shù)的顯示,溫度值精確到小數(shù)點(diǎn)后3位;再次按下溫度值只顯示整數(shù)部分。-25℃整數(shù)的顯示格式:

-25.125℃小數(shù)的顯示格式:任務(wù)1.DS18B20溫度測量應(yīng)用開發(fā)3.為了調(diào)試方便,溫度值同步發(fā)送到電腦串口。任務(wù)分析:單片機(jī)按照表10.2-5的流程讀寫DS18B20獲取溫度值。unsignedintrd_temperature(void){unsignedinttemp;unsignedcharlow,high;init_ds18b20();Write_DS18B20(0xCC);Write_DS18B20(0x44);//啟動溫度轉(zhuǎn)換任務(wù)1.DS18B20溫度測量應(yīng)用開發(fā)Delay_OneWire(200);init_ds18b20();Write_DS18B20(0xCC);Write_DS18B20(0xBE);//讀取寄存器low=Read_DS18B20();//低字節(jié)high=Read_DS18B20();//高字節(jié) temp=(high&0x0f); temp<<=8; temp|=low; returntemp;}任務(wù)1.DS18B20溫度測量應(yīng)用開發(fā)1.由于DS18B20的溫度有兩個字節(jié)構(gòu)成,在上面的程序中我

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論