瞭解S3C2410/S3C2440和觸摸屏的結構; 瞭解電阻觸摸屏的工作原理和等效電路圖; 瞭解S3C2410/S3C2440觸摸屏控制器的多種工作模式; 掌握S3C2410/S3C2440 ADC和觸摸屏的編程方法; ...
本章目標: 瞭解S3C2410/S3C2440和觸摸屏的結構; 瞭解電阻觸摸屏的工作原理和等效電路圖; 瞭解S3C2410/S3C2440觸摸屏控制器的多種工作模式; 掌握S3C2410/S3C2440 ADC和觸摸屏的編程方法; 14.1 ADC和觸摸屏硬體介紹及使用 14.1.1 S3C2410/S3C2440 S3C2410/S3C2440 的ADC可以接收8個通道的模擬信號輸入,並將它們轉換 為10位的二進位數據。在2.5MHz的A/D轉換時鐘下,最大的轉化速率可達500K SPS(SPS:samples per second,每秒的採樣次數)。 S3C2410/S3C2440 都提供觸摸屏的介面,不過它們有所不同。S3C2410的 觸摸屏介面向外提供4個控制信號引腳(nYPON、YMON、nXPON、XMON)和2 個模擬信號輸入引腳(AIN[7]、AIN[5]),這6個引腳通過4個晶體管與觸摸屏的4個 引腳相連。而S3C2440提供了與觸摸屏直接連接的4個引腳,不需要外接晶體管。 S3C2410/S3C2440 ADC和觸摸屏介面有如下特性: ·解析度:10位; ·微分線性度誤差:±1.0LSB; ·積分線性度誤差:±2.0LSB; ·最大轉換速率 :500KSPS; ·低功耗; ·供電電壓 :3.3V; ·輸入模擬電壓範圍:0~3.3V; ·片上採樣保持功能; ·普通轉換模式; ·分離的x/y軸坐標轉換模式; ·自動(連續)x/y軸坐標轉換模式; ·等待中斷模式。 ADC和觸摸屏介面結構如圖14.1、14.2所示。 從圖14.1、14.2可知,ADC和觸摸屏介面只有一個ADC轉換器,可以通過設置寄存器來選擇對 哪路模擬信號(多大8路)進行採樣。圖中有兩個中斷信號:INT_ADC、INT_TC,前者表示A/D轉換 器已經轉換完畢,後者表示觸摸屏被按下了。 對於S3C2410,在使用觸摸屏時,AIN[7]和AIN[5]被用來測量XP、YP的電平,只剩下AIN[6]、 AIN[4:0]共6個引腳用於一般的ADC輸入。 對於S3C2440,在使用觸摸屏時,引腳XP、XM、YP、YM被用於和觸摸屏直接相連,只剩下 AIN[3:0]共4個引腳用於一般的ADC輸入。 當不使用觸摸屏時,XP、XM、YP、YM這4個引腳也可以用於一般的ADC輸入。 S3C2410與觸摸屏的連接比S3C2440複雜,需要增加幾個外接晶體管,如圖14.3所示。 14.1.2 S3C2410/S3C2440 ADC介面的使用方法 ADC的啟動方式有兩種:手工啟動、讀結果時就自動地啟動下一次轉換。也有兩種方法獲 知當前轉換是否結束:查詢狀態位、轉換結束時發出中斷。 ADC的操作只涉及到3個寄存器:ADCCON、ADCTSC、ADCDAT0。下麵介紹它們的用 法,有關觸摸屏的數據位將在14.1.3小節介紹。 這兩個寄存器的格式如表14.1、14.2所示。 ADC的使用分為4個步驟: (1)設置ADCCON寄存器,選擇輸入信號通道,設置A/D轉換器的時鐘。 使能A/D轉換器時鐘的預分頻功能時,A/D時鐘的計算公式如下: A/D時鐘 = PCLK / (PRSCVL + 1); 註意:A/D時鐘最大為2.5MHz,並且應該小於PCLK的1/5. (2)設置ADCTSC寄存器,使用設為普通轉換模式,不使用觸摸屏功能。 ADCTSC寄存器多用於觸摸屏,對於普通ADC,使用它的預設值即可,或設置其位[2] 為0。ADCTSC寄存器的格式在14.13小節介紹。 (3)設置ADCCON寄存器,啟動A/D轉換。 如果設置READ_START位,則讀轉換數據(讀ADCDAT0寄存器)時即啟動下一次 轉換;否則,可以通過設置ENABLE_START位來啟動AD轉換。 (4)轉換結束時,讀取ADCDAT0寄存器獲得數值。 如果使用查詢方式,則可以不斷讀取ADCCON寄存器的ECFLG位來確定轉換是否結束; 否則可以使用INT_ADC中斷,發生INT_ADC中斷時表示轉換結束。 14.1.3 觸摸屏原理及介面 1. 電阻觸摸屏原理 觸摸屏的種類有很多,比如超聲波觸摸屏、紅外觸摸屏、電容觸摸屏、電阻觸摸屏等。 電阻觸摸屏由於造價低廉,在電氣上可以直接接入用戶的系統中而得到大量使用。電阻 觸摸屏有幾種類型,比如“四線”、“五線”和“八線”。線越多,精度就越高,溫度漂移也越 少,但基本的操作是一樣的。它本質上是個電阻分壓器,將矩形區域中觸摸點(x、y)的物 理位置轉換為代表x坐標和y坐標的電壓。 S3C2410/S3C2440 的觸摸屏介面可以驅動四線電阻觸摸屏,四線電阻觸摸屏的等效 電路如圖14.4所示。圖中粗線表示相互絕緣的兩層導電層,當按壓時,它們在觸電處相連; 不同的觸點在x、y方向上的分壓值不同,將這兩個分壓值經過A/D轉換後即可得到x、y坐標。 下麵根據其等效電路說明觸摸屏的工作過程。 (1)平時觸摸屏沒有被按下時,等效電路如圖14.5所示。 S4、S5閉合,S1、S2、S3斷開,即YM接地、XP上拉、XP和YP作為模擬輸入(對CPU而 言)、XM高阻。 平時觸摸屏沒有按下時,由於上拉電阻的關係,Y_ADC為高電平:當x軸和y軸受擠壓而接觸 導通後,Y_ADC的電壓由於連通道y軸接地而變為低電平,此低電平可作為中斷觸發信號來通知 CPU發生“Pen Down”事件,在S3C2410/S3C2440中,稱為等待中斷模式。 (2)採樣X_ADC電壓,得到x坐標,等效電路如圖14.6所示。 S1、S3閉合,S2、S4、S5斷開,即XP接上電源、XM接地、YP作為模擬輸入(對CPU 而言)、YM高阻、XP禁止上拉。這時,YP即X_ADC就是x軸的分壓點,進行AD轉換後 就得到x坐標。 (3)採樣Y_ADC電壓,得到y坐標,等效電路如圖14.7所示。
S2、S4閉合,S1、S3、S5斷開,即YP接電源、YM接地、XP作為模擬輸入(對CPU 而言)、XM高阻、XP禁止上拉。這時,XP即Y_ADC就是y軸的分壓點,進行AD轉換後 就得到y坐標。 2.S3C2410/S3C2440觸摸屏介面 與上面描述的觸摸屏工作過程的3個步驟對應,觸摸屏控制器也有4種工作模式。 (1)等待中斷模式(Waiting for Interrupt Mode) 設置ADCTSC寄存器位0xD3即可令觸摸屏控制器處於這種模式。這時,它在等待觸摸 屏被按下。當觸摸屏被按下時,觸摸屏控制器將發出INT_TC中斷信號,此時觸摸屏控制 器要轉入以下兩種工作模式中的一種,以讀取x、y坐標。 對於S3C2410,當觸摸屏被按下或鬆開時,都產生INT_TC中斷信號。 對於S3C2440,可以設置ADCTSC寄存器的位[8]為0或1,表示等待按下中斷或鬆開中斷。 (2)分離的x/y軸坐標轉換模式(Separate X/Y Position Conversion Mode) 這分別對應上述觸摸屏工作過程的第2、3步驟。設置ADCTSC寄存器為0x69進入x軸 坐標轉換模式,x坐標值轉換完畢後被寫入ADCDAT0,然後發出INT_ADC中斷;相似地, 設置ADCTSC寄存器位0x9a進入y軸坐標轉換模式,y坐標值轉換完畢後被寫入ADCDAT1, 然後發出INT_ADC中斷。
(3)自動(連續)x/y軸坐標轉換模式 上述觸摸屏的工作過程2、3可以合併成一個步驟,設置ADCTSC寄存器為0x0C,進入 自動x/y軸坐標轉換模式,觸摸屏控制器就會自動轉換觸摸點的x、y坐標值,並分別寫入 ADCDAT0、ADCDAT1寄存器中,然後發出INT_ADC中斷。 (4)普通轉換模式 不使用觸摸屏時,觸摸屏控制器處於這種模式。在這種模式下,可以通過設置ADCCON 寄存器啟動普通的A/D轉換,轉換完成時數據被寫入ADCDAT0寄存器中。 14.1.2小節講述ADC介面就是工作於這種模式。 ADCTSC寄存器被用來選擇觸摸屏的工作模式,它的格式如表14.3所示。
註意:① 處於等待中斷模式時,XP_SEN必須設為1(XP接模擬輸入)、PULL_UP必須設為0(使能上拉)。 ② AUTO_PST設為1時,必須處於自動x/y軸坐標轉換模式下。 對於S3C2410,當觸摸屏控制器處於等待中斷模式時,觸摸屏被按下時可以不斷發出INT_TC 中斷信號以便進入自動x/y軸坐標轉換模式轉換x、y坐標。發出中斷信號的間隔可以通過ADCDLY 寄存器來設置。 對於S3C2440,當CPU處於休眠模式時,觸摸屏被按下時可以不斷發出INT_TC中斷信號以喚 醒CPU。發出中斷信號的間隔可以通過ADCDLY寄存器來設置。 另外,對於普通轉換模式、分離的x/y軸坐標轉換模式、自動x/y軸坐標轉換模式,都可以通過 ADCDLY寄存器來設置採樣的延時時間。 ADCDLY寄存器格式如表14.4所示,在等待中斷模式時,延時時鐘為X-tal(3.68MHz),其他情況 為PCLK,可以如圖14.8所示。 ADCDAT1寄存器的格式如表14.5所示。它與ADCDAT0寄存器格式相似,ADCDAT1 寄存器中保存y坐標值;而ADCDAT0中保存x坐標值或普通AD轉換值。 14.2 ADC和觸摸屏操作實例 14.2.1 硬體設計 本開發板中,模擬輸入引腳AIN0、AIN1外接可調電阻器,電路圖如圖14.9所示。 圖中兩個電阻可調,程式將通過AIN0、AIN1這兩個通道採集、轉換電壓值。 觸摸屏的介面是標準的,它的電路圖如圖14.4所示。 14.2.2 程式設計 本實常式序將提供一個菜單,可以從中選擇測試ADC或觸摸屏。當測試ADC是,程式 不斷測量AIN0、1的電壓,併在串口上顯示出來。當測試觸摸屏時,只是測試觸筆按下、 鬆開的事件,並且把按下時的採集到的x,y坐標列印出來,它們只是原始的數據。 本實例的源碼在/work/hardware/adc_ts目錄下,主要文件為adc_ts.c。main.c文件 通過串口輸出兩個菜單共用戶選擇是測試ADC還是觸摸屏,它們分別對應adc_ts.c中的 Test_ADC、Test_Ts函數。 14.2.3 測試ADC的代碼詳解 1.ADC主入口函數Test_Adc ADC測試函數Test_Adc代碼如下:
1 行號 2 94行 /* 3 95行 *測試ADC 4 96行 *通過AD轉換,測量可變電阻的電壓值 5 97行 */ 6 98行 void Test_Adc(void) 7 99行 { 8 100行 float vo10, vo11; 9 101行 int t0, t1; 10 102行 11 103行 printf("Measuring the voltage of AIN0 and AIN1, press any key to exit\n\r"); 12 104行 while(!awaitkey(0)) //串口無輸入,則不斷測試 13 105行 { 14 106行 vo10 = ((float)ReadAdc(0)*3.3)/1024.0; //計算電壓值 15 107行 vo11 = ((fooat)ReadAdc(1)*3.3)/1024.0; //計算電壓值 16 108行 t0 = (vo10 - (int)vo10)*1000; //計算小數部分,程式中的printf無法列印浮點數 17 109行 t1 = (vo11 - (int)voll)*1000; //計算小數部分,程式中的printf無法列印浮點數 18 110行 printf("AIN0 = %d.%-3dV AIN1 = %d.%-3dV\r", (int)vo10, t0, (int)vo11, t1); 19 111行 } 20 112行 printf("\n"); 21 113行 } 22 114行Test_Adc() 第106、107行先調用ReadAdc函數發起AD轉換,返回10位轉換數值(最大為1023); 然後計算實際的電壓值。 2.ReadAdc函數:設置、啟動ADC,獲取轉換結果 ADC操作核心函數ReadAdc,代碼如下:
1 68行 /* 2 69行 *使用查詢方式讀取AD轉換值 3 70行 *輸入參數: 4 71行 * ch:模擬信號通道,取值為0~7 5 72行 */ 6 73行 static int ReadAdc(int ch) 7 74行 { 8 75行 //選擇模擬通道,使能預分頻功能,設置AD轉換器時鐘 = PCLK/(49+1) 9 76行 ADCCON = PRESCALE_EN | PRSCVL(49) | ADC_INPUT(ch); 10 77行 11 78行 //清除位[2],設為普通轉換模式 12 79行 ADCTSC &= ~(1 << 2); 13 80行 14 81行 //設置位[0]為1,啟動AD轉換 15 82行 ADCCON |= ADC_START; 16 83行 17 84行 //當AD轉換真正開始時,位[0]會自動清0 18 85行 while(ADCCON & ADC_START); 19 86行 20 87行 //檢測位[15],當它為1時表示轉換結束 21 88行 while(!(ADCCON & ADC_ENDCVT)); 22 89行 23 90行 //讀取數據 24 91行 return (ADCDAT0 & 0x3ff); 25 92行 }ReadAdc() 程式與前面介紹的ADC的4個步驟一一對應。 (1)第76行選擇模擬通道,使能預分頻功能,設置AD轉換器的時鐘。 本程式中,PCLK為50MHz,所以AD轉換器的時鐘為50MHz/(49+1) = 1MHz,小於 最大AD時鐘2.5MHz。 (2)第79行參考ADCTSC寄存器格式表14.3。 (3)ADC的啟動方式有兩種,如果使用“讀啟動”(此時ADCCON寄存器位[1]被設為 1),則讀一下ADCDAT0寄存器即可啟動;如果使用手動方式,設置ADCCON寄存器位[0]即可 啟動。 (4)第88行迴圈檢測方式,也可以使用中斷方式,當AD轉換結束時,ADC會發出 INT_ADC中斷信號。 (5)最後,第91行讀取ADCDAT0即可得到轉換的數據(低10位有效數據)。 14.2.4 測試觸摸屏代碼詳解 觸摸屏的操作稍微複雜,下麵將流程圖和控制狀態轉換圖合併一起(14.10),以便 後面的代碼分析。
1.觸摸屏的主入口函數Test_Ts Test_Ts函數進行初始化、開啟ADC中斷之後,就不再參與觸摸屏的操作,這都通過中 斷服務程式來完成。代碼如下:
1 187行/* 2 188行 *測試觸摸屏,列印觸點坐標 3 189行 */ 4 190行 void Test_Ts(void) 5 191行 { 6 192行 isr_handle_array[ISR_ADC_OFT] = AdcTsIntHandle; //設置ADC中斷服務程式 7 193行 INTMSK &= ~BIT_ADC; //開啟ADC總中斷 8 194行 INTSUBMSK &= ~(BIT_SUB_TC); //開啟INT_TC中斷,即觸摸屏按下或鬆開時產生中斷 9 195行 INTSUBMSK &= ~(BIT_SUB_ADC); //開啟INT_ADC中斷,即AD轉換結束時產生中斷 10 196行 11 197行 //使能預分頻功能,設置AD轉換器的時鐘 = PCLK/(49+1) 12 198行 ADCCON = PRESCALE_EN | PRSCVL(49); 13 199行 14 200行 /*採樣延時時間 = (1/3.6864M) * 50000 = 13.65ms 15 201行 *即按下觸摸屏後,13.5ms後才採樣 16 202行 */ 17 203行 ADCDLY = 50000; 18 204行 19 205行 wait_down_int(); /*進入“等待中斷模式”,等待觸摸屏被按下*/ 20 206行 21 207行 printf("Touch the screen to test, press any key to exit\n\r"); 22 208行 getc(); 23 209行 24 210行 //屏蔽ADC中斷 25 211行 INTSUBMSK |= BIT_SUB_TC; 26 212行 INTSUBMSK |= BIT_SUB_ADC; 27 213行 INTMSK |= BIT_ADC; 28 214行 }Test_Ts() 第192行設置ADC中斷處理函數。 本程式中,PCLK為50MHz,所以AD轉換器的時鐘為50MHz/(49+1) = 1MHz,小於最大AD轉換時鐘2.5MHz。 第205行調用巨集wait_down_int(),令觸摸屏控制器進入“等待中斷模式”,等待觸摸屏被按下。 wait_down_int()、wait_up_int()、mode_auto_xy()都是巨集定義,用於設置觸摸屏進入 “等待Pen Down中斷模式”、“等待Pen Up中斷模式”、“自動x/y軸坐標轉換模式”。讀者可 以參考14.1.3節的“S3C2410/S3C2440觸摸屏介面”理解這些代碼。 需要註意以下幾點: (1)對於S3C2410,ADCTSC的位[8]屬於保留位,只能設為0; 當處於“等待中斷模式”時,無論“Pend Down”中斷還是“Pen Up”中斷都可以檢測到。 (2)對於S3C2440,ADCTSC的位[8]為0、1時分別表示等待Pen Down中斷或Pen Up 中斷。 (3)要進入“自動x/y軸坐標轉換模式”,XP、XM、YP、YM的狀態不必理會,觸摸屏在 採樣時會自動控制它們。 這些巨集的定義如下:
/*設置進入等待中斷模式,XP_PU、XP_Dis、XM_Dis、YP_Dis、YM_En *(1)對於S3C2410,位[8]只能為0,所以只能使用下麵的wait_down_int; * 它既等待Pen Down中斷,也等待Pen Up中斷。 *(2)對於S3C2440,位[8]為0、1時分別表示等待Pen Down中斷或Pen Up中斷 */ /*進入“等待中斷模式”,等待觸摸屏被按下*/ #define wait_down_int() { ADCTSC = DOWN_INT | XP_PULL_UP_EN | \ XP_AIN | XM_HIZ | YP_AIN | YM_GND | \ XP_PST(WAIT_INT_MODE); } /*進入“等待中斷模式”,等待觸摸屏被鬆開*/ #define wait_up_int() { ADCTSC = UP_INT | XP_PULL_UP_EN | \ XP_AIN | XM_HIZ | YP_AIN | YM_GND | \ XP_PST(WAIT_INT_MODE); } /*進入自動x/y軸坐標轉換模式*/ #define mode_auto_xy() { ADCTSC = CONVERT_AUTO | XP_PULL_UP_DIS | \ XP_PST(NOP_MODE); }然後,程式就在第208行等待串口輸入,以退出等待。等待期間,完全通過中斷來驅 動觸摸屏的操作。 最後,退出時,第211~213行屏蔽ADC中斷。 2.觸摸屏中斷處理函數:轉換觸摸屏的工作模式 從圖14.10可知,執行Test_Ts函數之後,觸摸屏控制器處於“等待Pen Down中斷模 式”。這時,如果按下觸摸屏,則發生INT_TC中斷,進入AdcTsIntHandle中斷處理函數。 它很簡單,只是判斷當前中斷是否是INT_TC還是INT_ADC,然後分別調用它們的中斷 服務程式,代碼如下:
1 174行/* 2 175行 *ADC,觸摸屏的中斷服務函數 3 176行 *對於INT_TC、INT_ADC中斷,分別調用它們的處理程式 4 177行 */ 5 178行 void AdcTsIntHandle(void) 6 179行 { 7 180行 if(SUBSRCPND & BIT_SUB_TC) 8 181行 Isr_Tc(); 9 182行 10 183行 if(SUBSRCPND & BIT_SUB_ADC) 11 184行 Isr_Adc(); 12 185行 }AdcTsIntHandle() INT_TC的中斷服務程式Isr_Tc代碼如下:
1 115行 /* 2 116行 *INT_TC的中斷服務程式 3 117行 *按下時,進入自動x/y軸坐標轉換模式 4 118行 *鬆開始,進入等待中斷模式,再次等待INT_TC中斷 5 119行 */ 6 120行 static void Isr_Tc(void) 7 121行 { 8 122行 if(ADCDAT0 & 0x8000) //鬆開中斷 9 123行 { 10 124行 printf("\nStylus Up!!\n"); 11 125行 wait_down_int(); /*進入“等待中斷模式”,等待按下*/ 12 126行 } 13 127行 else //按下中斷 14 128行 { 15 129行 printf("\nStylus Down: "); 16 130行 17 131行 mode_auto_xy(); /*進入自動x/y軸坐標轉換模式*/ 18 132行 19 133行 /*設置位[0]為1,啟動AD轉換 20 134行 *註意:ADCDLY為50000,PCLK = 50MHz 21 135行 * 要經過(1/50MHz) * 50000 = 1ms之後才開始轉換x坐標 22 136行 * 再經過1ms之後才開始轉換y坐標 23 137行 */ 24 138行 ADCCON |= ADC_START; 25 139行 } 26 140行 27 141行 //清除INT_TC中斷 28 142行 SUBSRCPND |= BIT_SUB_TC; 29 143行 SRCPND |= BIT_ADC; 30 144行 INTPND |= BIT_ADC; 31 145行 }Isr_Tc() 第122行首先判斷是按下還是鬆開中斷,如果是鬆開中斷,表示觸碰完成。 第125行中通過wait_down_int()巨集令觸摸屏控制器進入“等待Pen Down 中斷模式”,等待下一次操作。 如果是按下中斷,則在131行通過mode_auto_xy()巨集令觸摸屏控制器進入 “自動x/y軸坐標轉換模式”,然後在138行啟動AD轉換。也可以使用“分離的x/y 軸坐標轉換模式”手動地分別轉換x、y坐標。 3. 在ADC中斷處理函數中獲取x、y坐標 在“自動x/y軸坐標轉換模式”下,x、y坐標都轉換完畢之後,產生INT_ADC 中斷,進入AdcTsIntHandle中斷處理函數,它進而調用INT_ADC的中斷服務 程式Isr_Adc,代碼如下:
1 148行 /* 2 149行 *INT_ADC的中斷服務程式 3 150行 *AD轉換結束時發生中斷 4 151行 *先讀取x\y坐標值,再進入等待中斷模式 5 152行 */ 6 153行 static void Isr_Adc(void) 7 154行 { 8 155行 //列印x、y坐標值 9 156行 printf("xdata = %4d, ydata = %4d\r\n", (int)(ADCDAT0 & 0x3ff), (int)(ADCDAT1 & 0x3ff)); 10 157行 11 158行 /*判斷是2410還是2440*/ 12 159行 if((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002)) 13 160行 { //S3C2410 14 161行 wait_down_int(); /*進入“等待中斷模式”,等待觸摸屏鬆開*/ 15 162行 } 16 163行 else 17 164行 { //S3C2440 18 165行 wait_up_int(); /*進入“等待中斷模式”,等待觸摸屏鬆開*/ 19 166行 } 20 167行 21 168行 //清除INT_ADC中斷 22 169行 SUBSRCPND |= BIT_SUB_ADC; 23 170行 SRCPND |= BIT_ADC; 24 171行 INTPND |= BIT_ADC; 25 172行 }Isr_Adc() 首先,第156行從ADCDAT0、ADCDAT1寄存器中讀出x、y坐標值,並列印出來。 然後,通過第161或165行(對於S3C2410)或158行(對於S3C2440)令觸摸屏控制器 進入“等待Pen Up中斷模式”,等待觸摸屏鬆開。 S3C2410的觸摸屏控制器既等待PenDown中斷,也等待Pen Up中斷; S3C2440觸摸屏中斷器可以分開設置:等待按下或等待鬆開。 14.2.5 實例測試 本程式在main函數中通過串口輸出一個菜單,用於選擇測試ADC或觸摸屏。操作步驟 如下: (1)使用串口將開發板的COM0和PC的串口相連,打開PC上的串口工具 並設置其波 特率為115200、8N1。 (2)生成可執行程式,adc_ts_2410或adc_ts_2440,燒入NAND Flash後運行。 在ADC_TS目錄下執行“make”命令,生成adc_ts.bin。 (3)在PC上串口工具可以看到如下菜單: #### Test ADC and Touch Screem #### [A] Test ADC [B] Test Touch Screen Enter your selection: (4)輸入"A"以測試ADC,可以看到如下字樣: Measuring the voltage of AIN0 and AIN1,press any key to exit AIN0 = 1.102V AIN1 = 1.108V 然後使用螺絲刀調整可變電阻ADJ0、ADJ1,可以在串口工具上看到它們的電壓值不斷變化。 最後,按任意鍵退回選擇菜單。 (5)輸入“T”以測試觸摸屏,可以看到如下字樣: Touch the screem to test, press any key to exit 點擊觸摸屏可以在串口工具上看到觸點坐標,可以看到類似下麵字樣: Stylus Down: xdata = 489, ydata =516 鬆開觸摸屏時可以看到如下提示: Stylus Up!! 最後按任意鍵返回選擇菜單。 註意:觸摸屏的實際使用中還要考慮初始校正、去抖動、拖曳等功能。 附:代碼: 鏈接: https://pan.baidu.com/s/1kV24a9L 密碼: tfab