1. 程式人生 > >第14章 ADC和觸摸屏接口

第14章 ADC和觸摸屏接口

ctsc lsb tar 詳解 spa 很多 發生 aps 數據位

本章目標: 了解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

第14章 ADC和觸摸屏接口