1 引言
  嵌入å¼ç³»çµ±æ‹‰è¿‘了人與計算機的è·é›¢ï¼Œå½¢æˆä¸€å€‹äººæ©Ÿå’Œè«§çš„工作與生活環境。從æŸä¸€å€‹è§’度來看,觸摸å±ä½œç‚ºåµŒå…¥å¼è¨ˆç®—機系統ä¸ä¸€é«”化的輸入輸出è¨å‚™ï¼Œåœ¨åˆ¶é€ å·¥æ¥ã€éŽç¨‹æŽ§åˆ¶ã€é€šè¨Šã€å„€å™¨ã€å„€è¡¨ã€æ±½è»Šã€èˆ¹èˆ¶ã€èˆªç©ºã€èˆªå¤©ã€è»äº‹è£å‚™ã€æ¶ˆè²»é¡žç”¢å“ç‰æ–¹é¢å‡å¾—到廣泛應用,影響到人類工作與生活的å„å€‹é ˜åŸŸå¹¶æ¥µå…·æ‡‰ç”¨å‰æ™¯ï¼Œå®ƒèˆ‡åµŒå…¥å¼ç³»çµ±çš„交互功能的程åºè¨è¨ˆæ˜¯æ•´å€‹ç³»çµ±è¨è¨ˆçš„é—œéµã€‚本文æè¿°çš„這樣的è¨è¨ˆéŽç¨‹ï¼Œå°å…¶ä¸çš„æŠ€è¡“å•題給出了詳細的解釋。功能è¨è¨ˆåŸºäºŽARM920Tå…§æ ¸çš„S3C2410芯片,以GX開發æ¿ç‚ºç¡¬ä»¶å¹³è‡ºï¼Œæ˜¯ä»¥ Windows CE為æ“作系統實ç¾çš„åœ–æ–‡äº¤äº’ç•Œé¢æ¨¡å¡Šã€‚
  [b]2 系統交互功能的è¨è¨ˆ
  2.1 系統構架[/b]
  通常嵌入å¼ç³»çµ±çš„æ§‹æž¶å¯ä»¥åˆ†æˆå››å€‹éƒ¨åˆ†ï¼šè™•ç†å™¨ã€å˜å„²å™¨ã€è¼¸å…¥è¼¸å‡ºï¼ˆI/O)和軟件部分。由于多數嵌入å¼è¨å‚™çš„æ‡‰ç”¨è»Ÿä»¶å’Œæ“作系統都是緊密çµåˆçš„,在這里我們å°å…¶ä¸åŠ å€åˆ†ï¼Œé€™ä¹Ÿæ˜¯åµŒå…¥å¼ç³»çµ±å’Œé€šç”¨PC 系統的最大å€åˆ¥ã€‚觸摸å±åµŒå…¥å¼è¨è¨ˆæ¡†åœ–見圖一。
[align=center]

圖一 觸摸å±åµŒå…¥å¼è¨è¨ˆæ¡†åœ–[/align]
  
2.2 Windows CE的主è¦åŠŸèƒ½
  它是一個全新開發的模塊化的圖形用戶界é¢çš„多任務æ“作系統,是一
個支æŒå¤šç¨®CPUï¼Œæ“æœ‰è‰¯å¥½é€šä¿¡èƒ½åŠ›çš„é«˜æ€§èƒ½ã€é«˜æ•ˆçŽ‡çš„å¯¦æ™‚æ“作系統。OEMå» å®¶å¯ä»¥åŠ å…¥è‡ªå·±æ‰€éœ€è¦çš„任何模塊,或者除去ä¸éœ€è¦çš„。系統ä¸ä¸€å€‹æ‡‰ç”¨ç¨‹åºçš„æ•…éšœä¸æœƒå¼•起整個系統失效。
  
2.3 æ“作系統å°è§¸æ‘¸å±çš„æ”¯æŒ
  æ“作系統å°è§¸æ‘¸å±çš„æ”¯æŒæ˜¯æŒ‰åˆ†å±¤çš„æ€æƒ³é€²è¡Œçš„ã€‚é¦–å…ˆæ˜¯æ‡‰ç”¨å±¤ï¼Œç·¨å¯«çš„æ‡‰ç”¨ç¨‹åºèª¿ç”¨è§¸æ‘¸å±/é¼ æ¨™äº‹ä»¶API(在牽引層有相關的API函數);其次,在驅動層有支æŒè§¸æ‘¸å±çš„驅動程åºã€‚通éŽçµ±ä¸€æŽ¥å£ä¾†èª¿ç”¨æ“ä½œç³»çµ±å…§æ ¸çš„è§¸æ‘¸å±è¨å‚™é©…動程åºå®Œæˆæœ€çµ‚çš„è¨å‚™æŽ§åˆ¶ã€‚從ä¸å–出觸摸å±çš„å¯¦éš›åæ¨™å€¼ï¼ŒæŠŠè©²å€¼è¨˜éŒ„在åˆå§‹åŒ–程åºä¸ï¼Œç•¶ä¸‹æ¬¡æœ‰æ‡‰ç”¨ç¨‹åºéœ€è¦èª¿ç”¨è§¸æ‘¸å±é©…å‹•ç¨‹åºæ™‚,觸摸å±é©…動程åºå°±æœƒåŽ»æª¢æŸ¥åˆå§‹åŒ–程åºï¼Œè®€å–å…¶ä¸çš„æ ¡æ£å€¼ï¼Œå¹¶æŠŠç¶“éŽæ ¡æ£ï¼Œå½±å°„åŽç›¸å°å標值返回該應用程åºã€‚
  
2.4 觸摸å±é›»è·¯
  GX開發æ¿ç‚ºç¡¬ä»¶å¹³è‡ºï¼Œæ¿è¼‰SHARP 3.5〞TFT 液晶å±LQ035Q7DB02,320×240,262,144 色,White LED 背光,帶觸摸å±ã€‚SHARP液晶自帶四線電阻å¼è§¸æ‘¸å±ï¼Œå¯ä»¥ç›´æŽ¥å’Œ2410的觸摸å±é©…動電路連接,觸摸ä½ç½®ç›´æŽ¥ç”¨CPU 內置的ADC 電路采樣而得。
[align=center]

圖二 æ¿è¼‰è§¸æ‘¸å±é›»è·¯[/align]
  
2.5 觸摸å±çš„æŽ§åˆ¶é›»è·¯
  觸摸å±çš„æŽ§åˆ¶æ˜¯ä½¿ç”¨FM7843芯片完æˆçš„。FM7843是4線電阻觸摸å±è½‰æ›æŽ¥å£èŠ¯ç‰‡ã€‚å®ƒå…·æœ‰åŒæ¥ä¸²è¡ŒæŽ¥å£çš„12ä½å–樣模數轉æ›å™¨ã€‚在125kHzåžå速率和2.7V電壓下的功耗為750μW,而在關閉模å¼ä¸‹çš„功耗僅為0.5μWã€‚å› æ¤ï¼ŒADS7843以其低功耗和高速率ç‰ç‰¹æ€§ï¼Œè¢«å»£æ³›æ‡‰ç”¨åœ¨é‡‡ç”¨é›»æ± 供電的å°åž‹æ‰‹æŒè¨å‚™ä¸Šã€‚FM7843采用SSOP-16引腳å°è£å½¢å¼ï¼Œæº«åº¦èŒƒåœæ˜¯-40~85℃。為了完æˆä¸€æ¬¡é›»æ¥µé›»å£“切æ›å’ŒA/D轉æ›ï¼Œéœ€è¦å…ˆé€šéŽä¸²å£å¾€FM 7843ç™¼é€æŽ§åˆ¶å—,轉æ›å®ŒæˆåŽå†é€šéŽä¸²å£è®€å‡ºé›»å£“轉æ›å€¼ã€‚標準的一次轉æ›éœ€è¦24個時é˜å‘¨æœŸã€‚ç”±äºŽä¸²å£æ”¯æŒé›™å‘åŒæ™‚進行傳é€ï¼Œå¹¶ä¸”在一次讀數與下一次發控制å—之間å¯ä»¥é‡ç–Šï¼Œæ‰€ä»¥è½‰æ›é€Ÿçއå¯ä»¥æé«˜åˆ°æ¯æ¬¡16個時é˜å‘¨æœŸã€‚如果æ¢ä»¶å…許,CPUå¯ä»¥ç”¢ç”Ÿ15個CLK的話(比如FPGAså’ŒASICs),轉æ›é€Ÿçއ還å¯ä»¥æé«˜åˆ°æ¯æ¬¡15個時é˜å‘¨æœŸã€‚FM 7843 通éŽåŒæ¥ä¸²å£èˆ‡ARM 通訊,å¯é€šéŽSendSIOData()函數(uhal.c)å‘FM 7843ç™¼é€æ•¸æ“š;通éŽReadSIOData()函數(uhal.c)從FM 7843 讀出數據。將F 端å£çš„第6 ä½ç½®0å’Œ1,å¯ä»¥æ‰“é–‹ã€é—œé–‰FM7843,F 端å£çš„æ•¸æ“šå¯„å˜å™¨ç‚ºPDATF(44b.h)。通éŽå¤–éƒ¨ä¸æ–·5å¯ä»¥åˆ¤æ–·æ˜¯å¦æœ‰è§¸æ‘¸å‹•作,查詢方å¼é€šéŽå®TCHSCR_IsPenNotDown()(tchscr.hï¼‰åˆ¤æ–·æ˜¯å¦æœ‰è§¸æ‘¸å‹•作。
  [b]3 è¨è¨ˆä¸çš„幾個關éµå•題
  3.1 定制Windows CE平臺[/b]
  Windows CE是一個多平臺的ã€å¯è£æ¸›çš„32ä½åµŒå…¥å¼æ“作系統。他既é©ç”¨äºŽå·¥æ¥è¨å‚™çš„åµŒå…¥å¼æŽ§æ™ºæ¨¡å¡Šï¼Œä¹Ÿé©ç”¨äºŽæ¶ˆè²»é¡žé›»å產å“的開發。é‡å°ä¸åŒçš„目標è¨å‚™ç¡¬ä»¶ç’°å¢ƒï¼Œåœ¨å…¶å…§æ ¸åŸºç¤Žä¸Šæ·»åŠ å„種模塊,從而形æˆä¸€å€‹å®šåˆ¶çš„åµŒå…¥å¼æ“作系統。它包括了定制è¨å‚™æ‰€éœ€çš„一切,例如:è¯ç¶²èƒ½åŠ›ã€å¯¦æ™‚性和å°å…§å˜å 用以åŠå¤šåª’體和Webç€è¦½åŠŸèƒ½ç‰ã€‚
  
3.2 Windows CE`的驅動模å¼
  Windows CEï½€è¨å‚™çš„驅動模型有兩種形å¼ï¼šæµæŽ¥å£é©…動(Stream Interface Driver)和本地è¨å‚™é©…動(Native Device Driverï¼‰å¾žå¯¦ç¾æ–¹å¼ä¾†çœ‹ï¼Œç„¡è«–那種驅動都å¯ä»¥é‡‡ç”¨å–®å±¤å’Œåˆ†å±¤å…©ç¨®æ–¹å¼ï¼Œå¤šå±¤è¨å‚™é©…å‹•ä¸å¯¦ç¾çš„代碼分兩層:MDD(Model Device Driver,模型è¨å‚™é©…動)和PDD(Platform Dependent Driver,平臺相關驅動)。MDD層ä¸å‘GWES模塊æä¾›äº†DDI(Device Driver Interface,è¨å‚™é©…動接å£ï¼‰å‡½æ•¸æŽ¥å£ï¼Œå¯¦ç¾äº†å°äºŽåŒä¸€é¡žè¨å‚™çš„é©…å‹•ç¨‹åºæ‰€å…¬ç”¨çš„功能,而PDD則實ç¾äº†èˆ‡å¹³è‡ºçš„具體硬件è¨å‚™ç›¸é—œçš„代碼。MDD通éŽèª¿ç”¨ç‰¹æ®Šçš„PDD函數來訪å•硬件。
  
3.3 觸摸å±èˆ‡é¡¯ç¤ºå™¨çš„é…åˆç®—法
  FM 7843 é€å›žæŽ§åˆ¶å™¨çš„X 與Y 值僅是å°ç•¶å‰è§¸æ‘¸é»žçš„電壓值的A/D 轉æ›å€¼ï¼Œå®ƒä¸å…·æœ‰å¯¦ç”¨åƒ¹å€¼ã€‚這個值的大å°ä¸ä½†èˆ‡è§¸æ‘¸å±çš„分辨率有關,而且也與觸摸å±èˆ‡LCD è²¼åˆçš„æƒ…æ³æœ‰é—œã€‚而且,LCD 分辨率與觸摸å±çš„分辨率一般來說是ä¸ä¸€æ¨£ï¼Œå標也ä¸ä¸€æ¨£ï¼Œå› æ¤ï¼Œå¦‚果想得到體ç¾LCD 忍™çš„觸摸å±ä½ç½®ï¼Œé‚„需è¦åœ¨ç¨‹åºä¸é€²è¡Œè½‰æ›ã€‚轉æ›å…¬å¼å¦‚下:
  x=(x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin)
  y=(y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin)
  其ä¸ï¼ŒTchScr_Xmaxã€TchScr_Xminã€TchScr_Ymax å’ŒTchScr_Ymin 是觸摸å±è¿”回電壓值xã€y 軸的范åœ, LCDWIDTHã€LCDHEIGHT 是液晶å±çš„寬度與高度。
  
3.4 æ“作系統å°è§¸æ‘¸å±çš„æ”¯æŒ
  æ“作系統å°è§¸æ‘¸å±çš„æ”¯æŒæ˜¯æŒ‰åˆ†å±¤çš„æ€æƒ³é€²è¡Œçš„ã€‚é¦–å…ˆæ˜¯æ‡‰ç”¨å±¤ï¼Œç·¨å¯«çš„æ‡‰ç”¨ç¨‹åºèª¿ç”¨è§¸æ‘¸å±/é¼ æ¨™äº‹ä»¶API(在牽引層有相關的API函數);其次,在驅動層有支æŒè§¸æ‘¸å±çš„驅動程åºã€‚通éŽçµ±ä¸€æŽ¥å£ä¾†èª¿ç”¨æ“ä½œç³»çµ±å…§æ ¸çš„è§¸æ‘¸å±è¨å‚™é©…動程åºå®Œæˆæœ€çµ‚çš„è¨å‚™æŽ§åˆ¶ã€‚從ä¸å–出觸摸å±çš„å¯¦éš›åæ¨™å€¼ï¼ŒæŠŠè©²å€¼è¨˜éŒ„在åˆå§‹åŒ–程åºä¸ï¼Œç•¶ä¸‹æ¬¡æœ‰æ‡‰ç”¨ç¨‹åºéœ€è¦èª¿ç”¨è§¸æ‘¸å±é©…å‹•ç¨‹åºæ™‚,觸摸å±é©…動程åºå°±æœƒåŽ»æª¢æŸ¥åˆå§‹åŒ–程åºï¼Œè®€å–å…¶ä¸çš„æ ¡æ£å€¼ï¼Œå¹¶æŠŠç¶“éŽæ ¡æ£ï¼Œå½±å°„åŽç›¸å°å標值返回該應用程åºã€‚
  
3.5 觸摸å±çš„忍™çš„確èª
  通éŽä¸Šè¿°æ–¹å¼é‡‡é›†çš„忍™æ˜¯ç›¸å°äºŽè§¸æ‘¸å±çš„忍™ï¼Œéœ€è¦è½‰æ›æˆç‚ºLCD 忍™ï¼Œé€™å€‹éŽç¨‹ä¹‹å‰éœ€è¦é€²è¡Œå…©ç¨®åæ¨™çš„æ ¡æº–å·¥ä½œï¼Œé€™é‡Œé‡‡ç”¨å–å¹³å‡å€¼æ³•。首先從觸摸å±çš„4å€‹é ‚è§’å¾—åˆ°2個最大值和2個最å°å€¼ï¼Œåˆ†åˆ¥è¨ˆç‚ºx_min,y_min å’Œx_max,y_max。X,Y æ–¹å‘的確定
  如表1 所示。

表1 X,Y æ–¹å‘的確定
ã€€ã€€ç•¶ç³»çµ±è™•äºŽä¼‘çœ ç‹€æ…‹æ™‚ï¼ŒQ1,Q3 å’ŒQ4 處于截æ¢ç‹€æ…‹ï¼ŒQ2 導通。當觸摸å±è¢«æŒ‰ä¸‹æ™‚,首先導通MOS 管組Q1 å’ŒQ4,X+與X-å›žè·¯åŠ ä¸Š+3.3V é›»æºï¼ŒåŒæ™‚å°‡MOS 管組Q2 å’ŒQ3 關閉,斷開Y+å’ŒY-,å†å•Ÿå‹•處ç†å™¨çš„A/D 轉æ›é€šé“1(AIN1ï¼‰ï¼Œé›»è·¯é›»é˜»èˆ‡è§¸æ‘¸å±æŒ‰ä¸‹ç”¢ç”Ÿçš„電阻輸出分é‡é›»å£“,并由A/D 轉æ›å™¨å°‡é›»å£“值數å—化,計算X è»¸çš„åæ¨™ã€‚接著先導通MOS 管組Q2 å’ŒQ3,Y+與Y-å›žè·¯åŠ ä¸Š+3.3V é›»æºï¼ŒåŒæ™‚å°‡MOS 管組Q1å’ŒQ4 關閉,斷開X+å’ŒX-,å†å•Ÿå‹•處ç†å™¨çš„A/D 轉æ›é€šé“0(AIN0ï¼‰ï¼Œé›»è·¯é›»é˜»èˆ‡è§¸æ‘¸å±æŒ‰ä¸‹ç”¢ç”Ÿçš„電阻輸出分é‡é›»å£“,并由A/D 轉æ›å™¨å°‡é›»å£“值數å—化,計算Y è»¸çš„åæ¨™ã€‚ç³»çµ±è®€åˆ°åæ¨™å€¼åŽï¼Œé—œé–‰Q1ã€Q3 å’ŒQ4,打開Q2,回到åˆå§‹ç‹€æ…‹ï¼Œç‰å¾…下一次ç†è§¸ã€‚
  確定X,Y æ–¹å‘åŽï¼Œå標值的計算公å¼å¦‚下:
  X=(x_max-Xa)×320 /(x_max - x_min)
  Y=(y_max- Ya)×240 /(y_max- y_min)
  å¼ä¸ï¼š
  Xa=(X1+X2+...+Xn)/ n
  Ya=(Y1+Y2+...+Yn)/ n
  一般觸摸å±å°‡è§¸æ‘¸æ™‚çš„Xã€Y æ–¹å‘的電壓值é€åˆ°A/D è½‰æ›æŽ¥å£ï¼Œç¶“éŽA/D 轉æ›åŽçš„X與Y 值僅是å°ç•¶å‰è§¸æ‘¸é»žçš„電壓值的A/D 轉æ›å€¼ï¼Œå®ƒä¸å…·æœ‰å¯¦ç”¨åƒ¹å€¼ã€‚這個值的大å°ä¸ä½†èˆ‡è§¸æ‘¸å±çš„分辨率有關,而且與觸摸å±èˆ‡LCD è²¼åˆçš„æƒ…æ³æœ‰é—œã€‚如果想得到體ç¾LCD 忍™çš„觸摸å±ä½ç½®ï¼Œé‚„需è¦åœ¨ç¨‹åºä¸é€²è¡Œè½‰æ›ã€‚
  [b]4 çµè«–
[/b]  嵌入å¼ç³»çµ±çš„PDA越來越多的使用觸摸å±åšè¼¸å…¥è¼¸å‡ºè¨å‚™ã€‚本文以ARM920Tå…§æ ¸çš„S3C2410芯片GX開發æ¿ç‚ºç¡¬ä»¶å¹³è‡ºï¼Œè¨è¨ˆäº†åµŒå…¥å¼ç³»çµ±è§¸æ‘¸å±äº¤äº’功能模塊,在全國大å¸ç”ŸåµŒå…¥å¼ç³»çµ±ç«¶è³½çš„產å“和作å“ä¸å·²å¤šæ¬¡æ‡‰ç”¨ã€‚æ–‡ä¸å¹¶å°è¨è¨ˆä¸çš„é—œéµæŠ€è¡“å•題åšäº†è©³ç´°çš„分æžèˆ‡è¨Žè«–。軟件è¨è¨ˆæµç¨‹åœ–å’Œæºä»£ç¢¼åŠå…¶å®ƒè¼”助程åºç‰é™äºŽç¯‡å¹…妿–‡ä»‹ç´¹ã€‚
  本文作者創新點:
  1.在S3C2410芯片GX開發環境下è¨è¨ˆäº†åµŒå…¥å¼ç³»çµ±è§¸æ‘¸å±äº¤äº’功能模塊。
  2.編制了嵌入å¼ç³»çµ±è§¸æ‘¸å±äº¤äº’功能模塊程åºåŠè¼”助接å£ç¨‹åºå¹¶å°æœ‰é—œæŠ€è¡“å•題åšäº†åˆ†æžã€‚
  åƒè€ƒæ–‡ç»
  [1]æŽä¸å¥‡,張冬波,羅文俊.嵌入å¼Linux系統ä¸è§¸æ‘¸å±æŽ§åˆ¶çš„ç ”ç©¶èˆ‡å¯¦ç¾[J].å·¥æ¥æŽ§åˆ¶è¨ˆç®—æ©Ÿ2005.02
  [2] 劉紅,覃光è¯ï¼Œæ±ªé“è¼.基于ä¸å¸¶å—庫的圖形LCD模塊漢å—顯示解決方案[J].微計算機信æ¯.2004.12P71-72
  [3]張曉明,è¶…è²æ³¢è§¸æ‘¸å±PC機接å£é©…動程åºè¨è¨ˆ[J].計算機應用.2004.05
  [4]Eugene Olafsen ç‰è‘—.王建è¯è¯.Visual C++技術內幕6.0(第五版)[M].北京希望出版社.2002(end)