人機交互輸入接口_第1頁
人機交互輸入接口_第2頁
人機交互輸入接口_第3頁
人機交互輸入接口_第4頁
人機交互輸入接口_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

人機交互輸入接口第1頁,課件共72頁,創(chuàng)作于2023年2月概述隨著計算機科學技術的飛速發(fā)展,嵌入式系統(tǒng)技術作為一門新興的技術已經(jīng)應用到人類活動的各個領域,而外圍設備則在發(fā)展和應用過程中起著重要作用。外圍設備包括輸入設備、輸出設備、外存設備、通信設備等。嵌入式應用系統(tǒng)不論是研制開發(fā)還是應用,必然都有人的積極參與,人機交互則是通過外圍設備來提供聯(lián)系通道。常見的輸入的手段有:

1、串口輸入;

2、按鍵;

3、觸摸屏。第2頁,課件共72頁,創(chuàng)作于2023年2月一、串口輸入/輸出應用宿主機和嵌入式產(chǎn)品之間的數(shù)據(jù)交換借助符合RS232標準的串口來實現(xiàn)。

宿主機和嵌入式產(chǎn)品之間要通信就得將兩者的電壓相互轉換。實現(xiàn)這種轉換的芯片有很多,如SP3232E、MAX232。

SP3232E是一個2驅動器/2接收器的器件,可以完成2路TTL電平與RS-232電平之間的轉換。第3頁,課件共72頁,創(chuàng)作于2023年2月

芯片內(nèi)主要由3個基本電路模塊組成:1、驅動器:

它將TTL/CMOS邏輯電平轉換為與輸入邏輯電平相反的EIA/TIA-232電平;2、接收器:

接收器把EIA/TIA-232電平轉換成TTL或CMOS邏輯輸出電平;3、電荷泵:

電荷泵仍然需要4個外接電容,運用一種4相電壓轉換技術,保持輸出對稱的5.5V電源。SP3232E的典型工作電路1.1SP3232E芯片介紹第4頁,課件共72頁,創(chuàng)作于2023年2月1.2實驗目的與內(nèi)容

1、PC機通過串口向ARM硬件實驗板發(fā)送數(shù)據(jù),ARM硬件實驗板采用中斷方式接收宿主機的信息。2、通過UART0接口接收上位機的數(shù)據(jù),并根據(jù)接收的數(shù)字內(nèi)容控制LED燈亮的數(shù)目。第5頁,課件共72頁,創(chuàng)作于2023年2月1.3與中斷相關的寄存器描述UART0模塊中與中斷相關的寄存器,主要有3個: 1、FIFO控制寄存器U0FCR;

2、中斷使能寄存器U0IER; 3、中斷標識寄存器U0IIR。第6頁,課件共72頁,創(chuàng)作于2023年2月1.UART0FIFO控制寄存器(U0FCR)

U0FCR控制UART0Rx(接收)和Tx(發(fā)送)FIFO的操作

U0FCR功能描述復位值0FIFO使能為1時使能對UART0Rx和TxFIFO以及U0FCR[7:1]的訪問。該位的任何變化都將使UART0FIFO清空。01RxFIFO復位該位置位會清零UART0RxFIFO中的所有字節(jié)并復位指針邏輯。該位會自動清零。02TxFIFO復位該位置位會清零UART0TxFIFO中的所有字節(jié)并復位指針邏輯。該位會自動清零。05:3保留保留,用戶軟件不要向其寫入1NA7:6Rx觸發(fā)選擇00:觸發(fā)點0(默認1字節(jié))01:觸發(fā)點1(默認4字節(jié))10:觸發(fā)點2(默認8字節(jié))11:觸發(fā)點3(默認14字節(jié))這2位決定在激活中斷前,接收UART0FIFO必須寫入多少字符。4個觸發(fā)點由用戶在編程時定義,可以選擇所需要的觸發(fā)深度。0第7頁,課件共72頁,創(chuàng)作于2023年2月2.UART0中斷使能寄存器(U0IER) U0IER用于使能中斷源U0IER功能描述復位值0RBR中斷使能0:禁止RBR中斷1:使能RBR中斷01THRE中斷使能0:禁止THRE中斷1:使能THRE中斷該中斷的狀態(tài)可從U0LSR5讀出。02Rx線狀態(tài)中斷使能0:禁止Rx線狀態(tài)中斷1:使能Rx線狀態(tài)中斷該中斷的狀態(tài)可從U0LSR[4:1]讀出。07:3保留保留,用戶軟件不要向其寫入1NAUART可判斷四種中斷源:接收數(shù)據(jù)可用中斷(RDA),接收超時中斷(CTI),數(shù)據(jù)發(fā)送完中斷(THRE),Rx線狀態(tài)中斷。第8頁,課件共72頁,創(chuàng)作于2023年2月3.UART0中斷標識寄存器(U0IIR)

U0IIR提供狀態(tài)代碼用于指示一個掛起中斷的中斷源和優(yōu)先級。U0IIR功能描述復位值0中斷掛起0:至少有一個中斷被掛起1:沒有掛起的中斷U0IIR0為低有效。掛起的中斷可通過U0IIR[3:1]查詢13:1中斷標識011:1.接收線狀態(tài)(RLS)010:2a.接收數(shù)據(jù)可用(RDA)110:2b.字符超時指示(CTI)001:3.THRE中斷U0IER的bit3指示對應于UART0RxFIFO的中斷。05:4保留保留,用戶軟件不要向其寫入1NA7:6FIFO使能這些位等效于U0FCR的bit00

第9頁,課件共72頁,創(chuàng)作于2023年2月優(yōu)先級高的中斷事件屏蔽優(yōu)先級低的中斷事件。①UART0RLS中斷是最高優(yōu)先級的中斷。②UART0RDA和CTI中斷是第二優(yōu)先級。③UART0THRE中斷是第三優(yōu)先級中斷。在退出中斷服務程序前,必須清除中斷標志。UART0中斷源和中斷使能關系圖第10頁,課件共72頁,創(chuàng)作于2023年2月1.4電路原理圖第11頁,課件共72頁,創(chuàng)作于2023年2月1.5主程序

uint8 KeyCode; //定義全局變量/*******************************************************文件名:main()*功能:接收PC機傳送的數(shù)據(jù)(0~8),并用LED燈顯示******************************************************/intmain(void){

KeyCode=0;

LS164_Init();

//LS164初始化

UART0_Init(115200); //UART0模塊初始化

while(1)

//通過LS164發(fā)送數(shù)據(jù),控制LEDLS164_SendData(KeyCode);

return(0);}當PC機發(fā)來數(shù)據(jù),ARM啟動UART0的中斷服務程序,把接收的數(shù)據(jù)放到KeyCode全局變量中。第12頁,課件共72頁,創(chuàng)作于2023年2月

程序中讀取宿主機發(fā)來的數(shù)據(jù),然后把接收的數(shù)據(jù)處理后,發(fā)送給全局變量KeyCode作為按鍵值,最后退出中斷。程序清單UART0中斷服務程序/*********************************************************************文件名:UART0_IRQ()*功能:UART0中斷服務子程序*全局變量:KeyCode********************************************************************/void__irqUART0_IRQ(void){ uint8 Data; Data=U0RBR; //取得宿主機發(fā)來的數(shù)據(jù)

KeyCode=Data-0x30; //把數(shù)字字符轉換成相應的數(shù)字

while((U0IIR&0x04)==0x04) Data=U0IIR; //通過讀取U0IIR寄存器來清除中斷標志

VICVectAddr=0; //通知中斷結束}UART0中斷服務程序第13頁,課件共72頁,創(chuàng)作于2023年2月/***************************************************************************名稱:UART0_Init(uint32UART_BPS)*功能:初始化串口0,設置波特率,數(shù)據(jù)位長度8,停止位長度1,無奇偶校驗

UART0中斷使能,設置中斷服務程序地址**************************************************************************/voidUART0_Init(uint32UART_BPS){ uint16 Fdiv; PINSEL0=0x00000005; //設置I/O連接到UART0 U0LCR=0x83; //DLAB=1,可設置波特率

Fdiv=(Fpclk/16)/UART_BPS; //

計算分頻值

U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03;

//8位字符長度、1個停止位、禁止奇偶效驗

U0IER=0x01;

//使能RDA中斷

//----------設置外部中斷---------- VICIntSelect=0x00000000; //設置所有的通道為IRQ中斷

VICVectCntl6=0x26;

//UART0分配到IRQ6 VICVectAddr6=(uint32)UART0_IRQ;

//設置UART0中斷服務程序的地址

VICIntEnable=VICIntEnable|(1<<6);

//使能UART0中斷 }

UART0初始化程序第14頁,課件共72頁,創(chuàng)作于2023年2月1.6實驗結果單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數(shù)處;繼續(xù)全速運行,在PC機上的“串口調(diào)試助手”的發(fā)送對話框輸入數(shù)字,如下圖所示,實驗板上的LED亮滅狀態(tài)隨著輸入數(shù)字的不同發(fā)生相應的變化。第15頁,課件共72頁,創(chuàng)作于2023年2月二、鍵盤應用鍵盤的用途:

用PC機鍵盤控制計算機;用手機鍵盤發(fā)送短信息;用遙控器控制家用電器等等。

鍵盤是最為直接的控制手段,也是最容易被人們接收的控制方法。應用鍵盤可以大大提高應用系統(tǒng)的靈活性和可控制性。鍵盤按照結構形式可分兩大類: 編碼鍵盤:

由專用鍵盤接口芯片連接的鍵盤電路模塊; 非編碼鍵盤:

采用直接I/O端口方式。

第16頁,課件共72頁,創(chuàng)作于2023年2月1.1非編碼鍵盤的電路組成結構2、矩陣式按鍵結構矩陣式鍵盤由行線、列線及位于行列線交叉點上的按鍵組成。需要通過讀取連接到按鍵上的兩根I/O口線的狀態(tài)共同來確定鍵的狀態(tài)。

鍵盤狀態(tài)的監(jiān)測方法也有兩種:查詢方式和中斷方式。按鍵多時,與第一種按鍵結構相比,能節(jié)省I/O口資源。1、獨立式按鍵結構

獨立式鍵盤是指直接用I/O口線構成的單個按鍵電路。微處理器通過向此I/O口發(fā)出讀指令來得到當前按鍵的狀態(tài)。

獨立式鍵盤狀態(tài)的監(jiān)測方法主要有兩種:查詢方式和中斷方式。優(yōu)點:配置靈活,軟件簡單;缺點:占用I/O資源多。

第17頁,課件共72頁,創(chuàng)作于2023年2月①查詢方式在查詢方式下不管有沒有鍵按下,CPU需要不斷地進行查詢操作,以判斷是否有鍵按下。

②中斷方式在電路結構方面,中斷方式并不復雜,比查詢方式只多了一個與門,相與后的結果送入CPU的中斷引腳。查詢方式的獨立式按鍵結構中斷方式的獨立式按鍵結構獨立式按鍵結構第18頁,課件共72頁,創(chuàng)作于2023年2月矩陣式鍵盤由于采用矩陣式結構,需要通過連接到鍵上的兩根I/O口線的狀態(tài)共同來確定鍵的狀態(tài)。通過確定按鍵的行數(shù),由行數(shù)和列數(shù)就可以唯一確定按鍵位置。矩陣式按鍵結構第19頁,課件共72頁,創(chuàng)作于2023年2月 矩陣式鍵盤狀態(tài)的兩種監(jiān)測方法:查詢方式和中斷方式。

中斷方式的矩陣式鍵盤電路圖

第20頁,課件共72頁,創(chuàng)作于2023年2月1.2按鍵位置判別的軟件方法1.掃描法掃描法可以采用行掃描或列掃描。當所有行掃描完成之后,我們就可以確定按鍵的個數(shù)以及每個按鍵的位置。第21頁,課件共72頁,創(chuàng)作于2023年2月 2.行列反轉法

行列反轉法也是判別按鍵位置的常用方法,行列反轉法只需要掃描兩次就可以判定按鍵位置。在程序設計時,將各個鍵對應的代碼放在一個表中,程序通過查表來確定具體按下的是哪一個鍵。(a)行線輸出,列線輸入(b)列線輸出,行線輸入按鍵位置判別的軟件方法第22頁,課件共72頁,創(chuàng)作于2023年2月1.3從電路或軟件的角度應解決的問題按鍵抖動波形濾波消抖電路1.消除抖動影響為了確保CPU對一次按鍵動作只確認一次按鍵,必須消除抖動的影響。按鍵的消抖方法:硬件消抖和軟件消抖。第23頁,課件共72頁,創(chuàng)作于2023年2月2.采取串鍵保護措施

串鍵是指同時有一個以上的鍵按下。采取的策略:單鍵按下有效,多鍵同時按下無效。3.選擇按鍵確認方式

按鍵有效的確認方式可分為兩類: 第一類為“按下→釋放鍵”方式; 第二類為連擊方式,就是一次按鍵可以產(chǎn)生多次擊鍵效果從電路或軟件的角度應解決的問題第24頁,課件共72頁,創(chuàng)作于2023年2月1.4實驗目的與內(nèi)容對16個矩陣式按鍵編號為1~16,當有按鍵事件發(fā)生時,蜂鳴器蜂鳴。如果1號鍵按下則蜂鳴一聲,2號鍵按下則蜂鳴兩聲,依此類推。第25頁,課件共72頁,創(chuàng)作于2023年2月1.5電路原理圖1:控制列的引腳設置為輸出,初始狀態(tài)為低電平;控制行的引腳設置為輸入。2:未按鍵時,行輸入引腳都為高電平,經(jīng)與門相與后仍為高電平,輸入到INT0引腳;當有按鍵發(fā)生時,行輸入引腳中至少有一個為低電平,經(jīng)與門相與后為低電平,輸入到INT0引腳,觸發(fā)外部中斷通知ARM處理器3:ARM處理器接收到中斷信號后,掃描鍵盤,判別按鍵位置。第26頁,課件共72頁,創(chuàng)作于2023年2月1.6按鍵掃描算法

第27頁,課件共72頁,創(chuàng)作于2023年2月按鍵識別中斷服務程序volatileuint8Key; //定義全局變量,保存按鍵值/*********************************************************************文件名:KEY_IRQ()*功能:外部中斷服務程序,判斷兩次按鍵值是否相等*入口參數(shù):無*出口參數(shù):按鍵值保存在全局變量Key中********************************************************************/void__irqKEY_IRQ(void){ uint32i,key1,key2;

for(i=0;i<=1000;i++); //延時一段時間,消抖

key1=KEY_Scan(); //按鍵掃描

for(i=0;i<=1000;i++); //延時一段時間key2=KEY_Scan(); //按鍵掃描if(key1==key2) Key=key1;

//如果兩次掃描得到的鍵值相同,則保存這個按鍵

while((EXTINT&0x01)!=0) //清除中斷標志

{EXTINT=0x01;}

VICVectAddr=0; //中斷結束}第28頁,課件共72頁,創(chuàng)作于2023年2月按鍵掃描子程序/****************************************************************文件名:unsignedKEY_Scan()*功能:按鍵的掃描,掃描結束后返回按鍵的代碼.*出口參數(shù):key,按鍵碼***************************************************************/uint8KEY_Scan(void){ uint8key=0;

//--------------掃描第1列--------------

IO2CLR=COL1;

//列線COL1輸出置低

IO2SET=COL2;IO1SET=COL3|COL4; //其他列線輸出置高

if((IO2PIN&ROW1)==0)key=1;

//如果按鍵發(fā)生在第一行

if((IO2PIN&ROW2)==0) key=2;

//如果按鍵發(fā)生在第二行

if((IO2PIN&ROW3)==0) key=3;

//如果按鍵發(fā)生在第三行

if((IO2PIN&ROW4)==0) key=4;

//如果按鍵發(fā)生在第四行第29頁,課件共72頁,創(chuàng)作于2023年2月

//--------------掃描第2列--------------IO2CLR=COL2; //列線COL2輸出置低

IO2SET=COL1; IO1SET=COL3|COL4; //其他列線輸出置高

if((IO2PIN&ROW1)==0) key=5; if((IO2PIN&ROW2)==0) key=6;if((IO2PIN&ROW3)==0) key=7;//--------------掃描第3列--------------IO1CLR=COL3; //列線COL3輸出置低

IO2SET=COL1|COL2;IO1SET=COL4; //其他列線輸出置高

if((IO2PIN&ROW1)==0) key=9;if((IO2PIN&ROW2)==0) key=10;if((IO2PIN&ROW3)==0) key=11;if((IO2PIN&ROW4)==0) key=12;//--------------掃描第4列--------------IO1CLR=COL4; //列線COL4輸出置低

IO2SET=COL1|COL2;IO1SET=COL3; //其他列線輸出置高

if((IO2PIN&ROW1)==0) key=13;if((IO2PIN&ROW2)==0) key=14;if((IO2PIN&ROW3)==0) key=15;if((IO2PIN&ROW4)==0) key=16;//----------------四列全清0----------------------IO1CLR=COL3|COL4;IO2CLR=COL1|COL2;return(key); }第30頁,課件共72頁,創(chuàng)作于2023年2月/*********************************************************************文件名:main()*功能:讀鍵盤值,根據(jù)鍵盤值控制蜂鳴器響********************************************************************/intmain(void){uint8 i;IO1DIR=IO1DIR|BEE; //設置控制蜂鳴器引腳P1.24為I/O輸出

KEY_Init(); //按鍵初始化

while(1){ if(Key!=0){ for(i=0;i<Key;i++) { BEEON(); //蜂鳴器響

DelayMS(10); BEEOFF(); //關蜂鳴器}Key=0;}}return(0);}主程序第31頁,課件共72頁,創(chuàng)作于2023年2月實驗結果單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數(shù)處;繼續(xù)全速運行,然后實驗板等待用戶按鍵,蜂鳴器根據(jù)接收按鍵碼確定蜂鳴次數(shù)。以上參考程序中定義的按鍵與鍵碼對應的關系圖如下所示。(實驗板上S1對應數(shù)字1,S2對應數(shù)字2,以此類推,注意:Key是一個獨立的中斷按鍵)第32頁,課件共72頁,創(chuàng)作于2023年2月三、觸摸屏應用

觸摸屏由于其體積小、輕便和接口簡單的特點,目前在嵌入式系統(tǒng)中已經(jīng)成為一種應用廣泛的輸入設備。觸摸屏的基本類型:

1、電阻技術觸摸屏;

2、電容技術觸摸屏;

3、表面聲波技術觸摸屏;

4、紅外線掃描技術觸摸屏;

5、向量壓力傳感技術觸摸屏。觸摸屏系統(tǒng)一般包括兩個部分:

1、觸摸檢測裝置;

2、觸摸屏控制器。第33頁,課件共72頁,創(chuàng)作于2023年2月

1.1觸摸檢測裝置觸摸檢測裝置一般由兩層透明的阻性導體層和隔離層共3層組成。第34頁,課件共72頁,創(chuàng)作于2023年2月1.2觸摸屏的坐標系統(tǒng)

假設觸摸屏X方向的電壓值為從大到小(Xmax至Xmin),Y方向的電壓值為從小到大(Ymin至Ymax),實際測量的電壓值為(Yv,Xv),分辨率為320×240的液晶顯示屏。X、Y向的坐標(x,y)按下式計算:

x=((Yv-Xmin)/(Xmax-Xmin))×320

y=((Xv-Ymin)/(Ymax-Ymin))×240第35頁,課件共72頁,創(chuàng)作于2023年2月ADS7843控制芯片要完成兩件事情: 其一,是完成電極電壓的切換; 其二,是采集接觸點處的電壓值(即A/D)。ADS7843的引腳配置與典型應用電路1.3觸摸屏的控制芯片ADS7843第36頁,課件共72頁,創(chuàng)作于2023年2月引腳號引腳名功能描述1、10+Vcc供電電源2.7~5V2、3X+、Y+接觸摸屏正電極,內(nèi)部A/D通道4、5X-、Y-接觸摸屏負電極6GND電源地7、8IN3、IN4兩個附屬A/D通道9VREFA/D參考電壓輸入

11PENIRQ中斷輸出,必須外接上拉電阻(觸摸顯示屏后引發(fā)一個中斷)12、14、16DOUT、DIN、DCLK串行接口引腳,完成與MCU通信13BUSY忙指示,低電平有效15CS片選芯片ADS7843的引腳說明第37頁,課件共72頁,創(chuàng)作于2023年2月ADS7843的內(nèi)部結構第38頁,課件共72頁,創(chuàng)作于2023年2月一種是SER單端模式,參考電壓固定為VREF;

一種是DFR差分模式,參考電壓來自驅動電極。兩種輸入模式的原理示意圖ADS7843的兩種參考電壓輸入模式第39頁,課件共72頁,創(chuàng)作于2023年2月

ADS7843的具體工作通道的選擇由控制字(A2、A1、A0)來決定。A2A1A0X+Y+IN3IN4X開關Y開關001+INOFFON101+INONOFF010+INOFFOFF110+INOFFOFF第7位第6位第5位第4位第3位第2位第1位第0位SA2A1A0MODESER/DFRPD1PD0ADS7843的控制字第40頁,課件共72頁,創(chuàng)作于2023年2月 工作時序2:16個時鐘周期ADS7843的工作時序 工作時序1:20個時鐘周期第41頁,課件共72頁,創(chuàng)作于2023年2月1.4實驗目的與內(nèi)容目的:監(jiān)測觸摸屏觸摸的位置,然后在顯示屏上實時顯示觸摸位置的坐標。內(nèi)容:

1、啟動ADS7843芯片對數(shù)據(jù)進行采集,并等待AD轉換完成2、從ADS7843芯片中讀取轉換完成后的數(shù)據(jù)3、根據(jù)公式將具體的數(shù)據(jù)轉換成觸摸屏位置坐標4、將位置坐標顯示在屏幕上。第42頁,課件共72頁,創(chuàng)作于2023年2月1.5電路連接原理示意圖第43頁,課件共72頁,創(chuàng)作于2023年2月 宏定義和ADS7843的初始化函數(shù)#defineDIN(1<<19)//DIN連接P0.19#defineDOUT(1<<18)//DOUT連接P0.18#defineBUSY(1<<20)//BUSY連接P1.20#defineDCLK(1<<17)//DCLK連接P0.17#defineCS(1<<14)//CS連接P0.14#definePENIRQ(1<<15)//PENIRQ連接P015EINT2#defineDIN_High() IO0SET=DIN //DIN引腳置1#defineDIN_Low() IO0CLR=DIN //DIN引腳清0#defineDCLK_High() IO0SET=DCLK#defineDCLK_Low() IO0CLR=DCLK#defineCS_High() IO0SET=CS#defineCS_Low() IO0CLR=CS1.6軟件編寫第44頁,課件共72頁,創(chuàng)作于2023年2月/*********************************************************************文件名:ADS7843_Init()*功能:觸摸屏模塊所用的引腳初始化,包括引腳功能的選擇*入口參數(shù):無*出口參數(shù):無********************************************************************/voidADS7843_Init(void){

//設置CS、PENIRQ、DIN、DOUT、DCLK為GPIO口 PINSEL0=PINSEL0&0x0FFFFFFF;

PINSEL1=PINSEL1&0xFFFFFF03;

//CS、DCLK、DIN等引腳為輸出,DOUT腳為輸入

IO0DIR=IO0DIR|CS|DCLK|DIN;

IO0DIR=IO0DIR&(~DOUT)&(~PENIRQ); IO1DIR=IO1DIR&(~BUSY); //BUSY腳為輸入}第45頁,課件共72頁,創(chuàng)作于2023年2月/*********************************************************************文件名:intADS_Read()*功能:讀函數(shù),讀觸摸點值并返回Number位測量結果*入口參數(shù):Number讀取Number位測量結果,Number=8、12*出口參數(shù):返回結果back********************************************************************/uint32ADS7843_Read(uint8Number){

uint32back,i,j; back=0; //back用于保存讀取的數(shù)據(jù)

CS_Low();

DIN_Low();//DCLK_Low();//DCLK、DIN、CS輸出低電平 for(i=0;i<Number;i++)

/*從ADS7843讀出數(shù)據(jù),先高位再低位*/

{

back<<=1; //左移1位

DCLK_High(); //從DOUT引腳讀出數(shù)據(jù),下降沿有效。DCLK置1

for(j=0;j<2;j++); //軟件小段延時

if(DOUT&IO0PIN)//如果為1,將back相對應的位置1 back++;

DCLK_Low(); //DCLK置0

} for(;i<(16-Number);i++)

/*發(fā)送多余的脈沖周期*/

{

DCLK_High(); //從DOUT引腳讀出數(shù)據(jù),下降沿有效。DCLK置1

for(j=0;j<2;j++); //軟件小段延時

DCLK_Low(); //DCLK置0

for(j=0;j<2;j++); //軟件小段延時

}

return(back);

}

第46頁,課件共72頁,創(chuàng)作于2023年2月/*********************************************************************文件名:intADS_Send()*功能:寫函數(shù),發(fā)送控制字給ADS7843*入口參數(shù):uint8command********************************************************************/

voidADS7843_Send(uint8command)

{ uint8i,j; /*啟動SPI傳輸*/ CS_Low(); DCLK_Low(); DIN_High(); DCLK_High(); //發(fā)送開始標志S=1 for(j=0;j<2;j++); //軟件小段延時

while(IO1PIN&BUSY); //等待ADS7843的busy線變?yōu)榈碗娖?/p>

DCLK_Low(); /*發(fā)送控制字,采用模擬時序,一次發(fā)送一個字節(jié)(起始標志位S已發(fā)送,只發(fā)送7個位)*/ for(i=0;i<7;i++) //發(fā)送一個字節(jié)的控制字,其中高位在先

{ command<<=1; if((command&0x80)!=0)//判斷最高位是否為1 DIN_High(); //DIN引腳輸出1 else DIN_Low(); DCLK_Low(); //DCLK清0,從DIN引腳輸入數(shù)據(jù),上升沿有效。

for(j=0;j<2;j++); //軟件小段延時

DCLK_High(); //DCLK置1 } DCLK_Low();

}第47頁,課件共72頁,創(chuàng)作于2023年2月1.7坐標測量算法觸摸屏控制的流程圖第48頁,課件共72頁,創(chuàng)作于2023年2月1.8Read_Touch函數(shù)/*********************************************************************文件名:voidRead_Touch(uint32*X,uint32*Y)*功能:讀取觸摸屏的觸摸位置,結果保存在X,Y指針變量中*入口參數(shù):X保存x坐標Y保存y坐標********************************************************************/voidRead_Touch(uint32*X,uint32*Y){ uint32DATA1,DATA2,i; *X=0;*Y=0; //-------------------排除錯誤觸發(fā)--------------------------- for(i=0;i<10;i++); //軟件延時小段時間

if((IO0PIN&PENIRQ)!=0) return; //如果中斷輸出引腳PENIRQ不為0

//-----------軟件去抖,設置PINIRQ引腳輸出低電平------------- DelayMS(10); //軟件延時30ms時間

IO0DIR=IO0DIR|PENIRQ;

IO0CLR=PENIRQ; //-----------------------測量Y坐標--------------------------- ADS7843_Send(0xd3);//發(fā)一個字節(jié)的讀Y坐標的控制字給ADS7843(Y+輸入) for(i=0;i<4;i++); while(IO1PIN&BUSY); //等待BUSY為0,如果BUSY信號不好使可以刪除不用

DATA1=ADS7843_Read(12);

//從ADS7843讀出采集過來的8位數(shù)據(jù)

ADS7843_Send(0xd3); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12);

第49頁,課件共72頁,創(chuàng)作于2023年2月

while(DATA1!=DATA2) //將讀取兩次的結果進行比較

{ DATA1=DATA2; ADS7843_Send(0xd3); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); } *Y=DATA2; //-----------------------測量X坐標--------------------------- ADS7843_Send(0x93);//發(fā)一個字節(jié)的讀X坐標的控制字給ADS7843,選擇轉換精度12位

while(IO1PIN&BUSY); //等待BUSY為0,如果BUSY信號不好使可以刪除不用

DATA1=ADS7843_Read(12);//從ADS7843讀出采集過來的8位數(shù)據(jù)

ADS7843_Send(0x93); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); while(DATA1!=DATA2) //對兩次采樣的結果進行比較

{ DATA1=DATA2; ADS7843_Send(0x93); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); } *X=DATA2; ADS7843_Send(0x90);//發(fā)送控制字0x90,7843芯片進入省電模式且中斷允許

IO0DIR=IO0DIR&(~PENIRQ);//PINIRQ設置為輸入

DCLK_Low(); CS_High();}第50頁,課件共72頁,創(chuàng)作于2023年2月參考主程序//8位測量數(shù)據(jù)的邊緣點(x,y)坐標的經(jīng)驗值#defineXmin 0x1A#defineXmax 0xE7#defineYmin 0x24#defineYmax 0xDD/*********************************************************************函數(shù)名:main()*功能:控制對ADS7843的讀寫,且將讀出的數(shù)據(jù)進行換算*入口參數(shù):無*出口參數(shù):0********************************************************************/intmain(void){ uint32x,y; GRA_Initialize(); GUI_SetColor(Black,White); ADS7843_Init();//系統(tǒng)初始化

ADS7843_Send(0x90);

第51頁,課件共72頁,創(chuàng)作于2023年2月

while(1) { if((IO0PIN&PENIRQ)==0) {

Read_Touch(&x,&y);

//---坐標值計算,以觸摸屏的左下角為原點,往右X值增長,往上Y值增長---

if(x<Xmin) x=Xmin;

if(x>Xmax) x=Xmax;

if(y<Ymin) y=Ymin;

if(y>Ymax) y=Ymax;

x=(320*(x-Xmin))/(Xmax-Xmin);

x=320-x;

y=(240*(y-Ymin))/(Ymax-Ymin); y=240-y;

//把坐標值輸出在屏幕上

DISP_XY(150,100,white,x,y);

GRA_Refresh(100,80,220,170);//根據(jù)緩沖區(qū)的內(nèi)容刷新顯示屏

} }return0;}第52頁,課件共72頁,創(chuàng)作于2023年2月1.9實驗步驟與結果1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實驗的程序代碼,按F7快捷鍵編譯鏈接整個工程。編譯報錯則修改源程序中的錯誤,如果編譯通過則在相應的目錄下產(chǎn)生我們所需要的二進制文件和可執(zhí)行映像文件。2.運行H-Flasher軟件,將產(chǎn)生的二進制文件燒寫到實驗板上。3.打開AXD調(diào)試環(huán)境,并加載剛剛產(chǎn)生的可執(zhí)行映像文件進行調(diào)試。4.單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數(shù)處;繼續(xù)全速運行,然后等待用戶觸摸觸摸屏。液晶屏上會實時顯示觸摸點位置的X與Y坐標。第53頁,課件共72頁,創(chuàng)作于2023年2月四、附錄--CH451功能及應用

CH451是一個整合了數(shù)碼管顯示驅動和鍵盤掃描控制以及μP監(jiān)控的多功能外圍芯片。CH451的電路結構示意圖第54頁,課件共72頁,創(chuàng)作于2023年2月1.1CH451功能特點1.顯示驅動內(nèi)置大電流驅動級,段電流不小于25mA,每位字的電流不小于150mA。動態(tài)顯示掃描控制,直接驅動8位數(shù)碼管或者64位發(fā)光管LED??蛇x數(shù)碼管的段與數(shù)據(jù)位相對應的不譯碼方式或者BCD譯碼方式。數(shù)碼管的字數(shù)據(jù)左移、右移、左循環(huán)、右循環(huán)。各數(shù)碼管數(shù)字獨立閃爍控制。通過占空比設定提供16級亮度控制。支持段電流上限調(diào)整,可以省去所有限流電阻。掃描極限控制,支持1到8個數(shù)碼管,只為有效數(shù)碼管分配掃描時間。第55頁,課件共72頁,創(chuàng)作于2023年2月2.鍵盤控制內(nèi)置64鍵鍵盤控制器,基于8×8矩陣鍵盤掃描。內(nèi)置按鍵狀態(tài)輸入的下拉電阻,內(nèi)置去抖動電路。鍵盤中斷,低電平有效輸出。提供按鍵釋放標志位,可供查詢按鍵按下與釋放。3.其他功能

完全內(nèi)置時鐘振蕩電路,通常不需要外接晶體或者阻容振蕩。內(nèi)置上電復位和看門狗Watch-Dog,提供高電平有效和低電平有效復CH451功能特點第56頁,課件共72頁,創(chuàng)作于2023年2月1.2引腳與封裝

第57頁,課件共72頁,創(chuàng)作于2023年2月CH451的引腳描述28腳封裝的引腳號24腳封裝的引腳號引腳名稱類型引腳說明232VCC電源正電源端915GND電源公共接地端254LOAD輸入串行接口的數(shù)據(jù)加載,內(nèi)置上拉電阻265DIN輸入串行接口的數(shù)據(jù)輸入,內(nèi)置上拉電阻276DCLK輸入串行接口的數(shù)據(jù)時鐘,內(nèi)置上拉電阻同時用于看門狗的清除輸入243DOUT輸出串行接口的數(shù)據(jù)輸出和鍵盤中斷22~151、24~18SEG7~SEG0輸入/輸出數(shù)碼管的段驅動,高電平有效;鍵盤掃描輸入,高電平有效。1~87~14DIG7~DIG0輸出數(shù)碼管的字驅動,低電平有效;鍵盤掃描輸出,高電平有效。1216RST輸出上電復位和看門狗復位,高電平有效17NC不連接,禁止使用13RST#輸出上電復位和看門狗復位,低電平有效14ADJ輸入段電流上限調(diào)整,內(nèi)置強下拉電阻10CLK輸入可選外接電阻電容調(diào)整內(nèi)部時鐘頻率11CLKO輸出CLK引腳時鐘的二分頻輸出28RSTI輸入手工復位輸入,高電平有效第58頁,課件共72頁,創(chuàng)作于2023年2月1.3CH451的內(nèi)部寄存器 CH451內(nèi)部具有一個12位的移位寄存器和一個12位的命令寄存器,處理器通過向命令寄存器發(fā)送12位的控制命令,從而控制CH451完成相應的功能。 CH451通過以下4根線與處理器進行數(shù)據(jù)交換。 串行數(shù)據(jù)輸入線DIN、 串行數(shù)據(jù)時鐘線DCLK、 串行數(shù)據(jù)加載線LOAD、 串行數(shù)據(jù)輸出線DOUT。第59頁,課件共72頁,創(chuàng)作于2023年2月 處理器發(fā)送數(shù)據(jù)給命令寄存器的輸出過程如下: ①向DIN輸出最低位數(shù)據(jù)B0,并向DCLK輸出低電平脈沖; ②輸出位數(shù)據(jù)B1~B11; ③向LOAD輸出低電平脈沖。輸出數(shù)據(jù)過程示意圖1.4CH451的通信過程第60頁,課件共72頁,創(chuàng)作于2023年2月1.5CH451的操作命令種類操作命令位11位10位9位8位7位6位5位4位3位2位1位0控制芯片內(nèi)部復位001000000000設置系統(tǒng)參數(shù)010000000DogKeyDisp鍵盤讀取按鍵代碼0111XXXXXXXX1.芯片內(nèi)部復位:001000000001B

內(nèi)部復位命令將CH451的各個寄存器和各種參數(shù)復位到默認的狀態(tài)。2.設定系統(tǒng)參數(shù):010000000[WDOG][KEYB][DISP]B 用于設定CH451的系統(tǒng)級參數(shù)。3.讀取按鍵代碼:0111XXXXXXXXB 用于獲得CH451最近檢測到的有效按鍵的按鍵代碼。CH451的操作命令均為12位。第61頁,課件共72頁,創(chuàng)作于2023年2月1.6CH451的鍵盤連接圖第62頁,課件共72頁,創(chuàng)作于2023年2月1.7CH451的按鍵代碼按鍵代碼DIG0DIG1DIG2DIG3DIG4DIG5DIG6DIG7SEG040H41H42H43H44H45H46H47HSEG148H49H4AH4BH4CH4DH4EH4FHSEG250H51H52H53H54H55H56H57HSEG358H59H5AH5BH5CH5DH5EH5FHSEG460H61H62H63H64H65H66H67HSEG568H69H6AH6BH6CH6DH6EH6FHSEG670H71H72H73H74H75H76H77HSEG778H79H7AH7BH7CH7DH7EH7FH第63頁,課件共72頁,創(chuàng)作于2023年2月1.8鍵盤管理操作第64頁,課件共72頁,創(chuàng)作于2023年2月處理器從CH451獲得按鍵代碼的過程時序圖。

CH451的讀取按鍵代碼命令只有位數(shù)據(jù)B8~B11是有效的,所以處理器不必發(fā)出讀取按鍵代碼命令的B0~B7。1.9鍵盤管理過程時序圖第65頁,課件共72頁,創(chuàng)作于2023年2月2.0實驗箱上的電路連接圖第66頁,課件共72頁,創(chuàng)作于2023年2月2.1驅動程序設計

#defineDOUT (1<<16) //P0.16#defineLOAD (1<<20) //P2.20#defineDIN (1<<18) //P2.18#defineDCLK (1<<16) //P2.16CH451的寫函數(shù)CH451_Write(uint16Data,uint8Length),CH451的讀函數(shù)uint8CH451_Read()兩個驅動程序我們先對幾個要用到的IO引腳定義如下:第67頁,課件共72頁,創(chuàng)作于2023年2月

/******************************************************************** *函數(shù)名:CH451_Write() *功能:實現(xiàn)對CH451寫入給定長度的數(shù)據(jù) *入口參數(shù):uint16Data 待發(fā)送的數(shù)據(jù) *uint8 Length

溫馨提示

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

評論

0/150

提交評論