試了下面的方法:
一、在網上搜尋關於觸控螢幕教程的資料,找到網友寫的觸控螢幕校正程式,但用arm-eabi-gcc編譯不通過,提示缺少stdio.h等標頭檔案,可能是arm-eabi-gcc存在問題;
二、按照網友tstest.c程式中的校正演算法進行校正:第二種辦法也失敗。
雖然失敗,但還是有可取的地方,以後有時間可以據需研究:
sample_array[0]-[3]依次為topleft,topright,bottomleft和bottomright,按下面的公式計算x1、x2、y1和y2
x1=(sample_array[0].x+ sample_array[2].x )/2; x2=(sample_array[1].x+ sample_array[3].x )/2; y1=(sample_array[0].y+ sample_array[1].y )/2; y2=(sample_array[2].y+ sample_array[3].y )/2;
通過:disx=240-(240*(value-x2)/(x1-x2));和disy=320-(320*(value-y2)/(y1-y2));進行座標轉換
參考http://www.100ask.net/showtopic-1946.aspx
三、按friendlyarm論壇上網友提供的方法:
第三種方法應該算成功吧
具體如下:
1、首先在touch_timer_fire中增加printk(kern_info "x: %d, y: %d/n", xp, yp);用於列印4個頂點的座標;
2、列印的4個頂點座標依次為:(xp,yp)
top left (156, 886)
top right (824, 871)
bottom left (149, 141)
bottom right (856, 146)
3、將s3c2410ts_init中的
input_set_abs_params(dev, abs_x, 0, 0x3ff, 0, 0);
input_set_abs_params(dev, abs_y, 0, 0x3ff, 0, 0);
改為input_set_abs_params(dev, abs_x, 156, 856, 0, 0);
input_set_abs_params(dev, abs_y, 146, 886, 0, 0);
(注:採用的是topleft和bottomright兩個點)
4、按步驟123進行改寫後,燒入核心,發現y軸方向反了,因此在touch_timer_fire中增加:yp = yp - 2*(yp-(886+146)/2)
就是將y座標相對y軸中線做對稱。
5、重新編譯核心,燒入2440,觸控螢幕校正成功。
但也存在一些問題:
1、校準的精度還是很差,尤其是x軸靠近原點的部分,錯開乙個格;
2、mini2440的cpu和ram不夠給力(64m ram),sd卡啟動,速度很慢;
3、好像沒有物理按鍵,進入乙個應用程式後,假死,按觸控螢幕無反應,只能關機重啟。
觸控螢幕驅動
輸入子系統體系 核心層 linux dir drivers input input.c 提供最核心函式 裝置事件層 linux dir drivers input evdev.c 提供handler 提供輸入裝置產生的原始資料並上報給應用程式,這適用於 所有輸入裝置,該觸控螢幕也不例外 編寫基於輸入...
UCOS II MINI2440 觸控螢幕
前面已經完成了ucos ii到mini2440的移植 現在來進行基本的應用程式設計 已經完成4個led程式,用來測試移植是否成功 下面把裸奔的觸控螢幕程式移植上來。1.建立touch任務 1 設定好任務堆疊長度 define taskstklengh 1024 2 設定好任務優先順序 define ...
UCOS II TQ2440 觸控螢幕
前面已經完成了ucos ii到mini2440的移植 現在來進行基本的應用程式設計 已經完成4個led程式,用來測試移植是否成功 下面把裸奔的觸控螢幕程式移植上來。1.建立touch任務 1 設定好任務堆疊長度 view plain copy to clipboard print?define ta...