【TI 技术资料分享】+基于MSP430的触摸屏校正程序

2019-07-30 17:36发布

基于MSP430的触摸屏校正程序 基于MSP430的触摸屏校正程序.zip (120.21 KB, 下载次数: 7) 2015-3-10 17:14 上传 点击文件名下载附件
  1. //===========================================================================//
  2. //                                                                           //
  3. // 文件:  MAIN.C                                                            //
  4. // 说明:  BW-DK5438开发板触摸屏校正程序                                     //
  5. // 编译:  IAR Embedded Workbench IDE for msp430 v4.21                       //
  6. // 版本:  v1.1                                                              //
  7. // 编写:  JASON.ZHANG                                                       //
  8. // 版权:  北京拓普博维电子技术有限公司                                      //
  9. // 日期:  2010.09.19                                                        //
  10. //                                                                           //
  11. //===========================================================================//
  12. #include "msp430x54x.h"
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include "PIN_DEF.H"
  17. #include "TFTDRV430.H"
  18. #include "TOUCH.H"

  19. #define  FLL_FACTOR     649                                          // FLL_FACTOR: DCO倍频系数   
  20. //--------------------------- LCD 颜 {MOD} ----------------------//
  21. #define White          0xFFFF
  22. #define Black          0x0000
  23. #define Grey           0xF7DE
  24. #define Grey2          0xF79E
  25. #define Dark_Grey      0x6B4D
  26. #define Dark_Grey2     0x52AA
  27. #define Light_Grey     0xE71C
  28. #define Blue           0x001F
  29. #define Blue2          0x051F
  30. #define Red            0xF800
  31. #define Magenta        0xF81F
  32. #define Green          0x07E0
  33. #define Cyan           0x7FFF
  34. #define Yellow         0xFFE0

  35. unsigned Color,Color_BK                                            ;

  36. float cx[1]={0.0670567926},
  37.       cy[1]={0.0900232554},
  38.       ox[1]={-18.3293762 },
  39.       oy[1]={-18.2325592 }                                         ;

  40. //***************************************************************************//
  41. //                                                                           //
  42. //                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //
  43. //                                                                           //
  44. //***************************************************************************//
  45. void Init_CLK(void)
  46. {
  47.   WDTCTL     = WDTPW + WDTHOLD                                     ; // 关看门狗
  48.   P7SEL     |= 0x03                                                ; // 端口选择外部低频晶振XT1
  49.   UCSCTL6   &=~XT1OFF                                              ; // 使能外部晶振
  50.   UCSCTL6   |= XCAP_3                                              ; // 设置内部负载电容
  51.   UCSCTL3   |= SELREF_2                                            ; // DCOref = REFO
  52.   UCSCTL4   |= SELA_0                                              ; // ACLK   = XT1  
  53.   __bis_SR_register(SCG0)                                          ; // 关闭FLL控制回路
  54.   UCSCTL0    = 0x0000                                              ; // 设置DCOx, MODx
  55.   UCSCTL1    = DCORSEL_7                                           ; // 设置DCO振荡范围
  56.   UCSCTL2    = FLLD__1 + FLL_FACTOR                                ; // Fdco = ( FLL_FACTOR + 1)×FLLRef = (649 + 1) * 32768 = 21.2992MHz
  57.   __bic_SR_register(SCG0)                                          ; // 打开FLL控制回路                                                            
  58.   __delay_cycles(1024000)                                          ;
  59.   do
  60.   {
  61.     UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG)         ; // 清除 XT2,XT1,DCO 错误标志                                                            
  62.     SFRIFG1 &= ~OFIFG                                              ;
  63.   }while(SFRIFG1&OFIFG)                                            ; // 检测振荡器错误标志
  64. }

  65. //***************************************************************************//
  66. //                                                                           //
  67. //  Init_Port(void): 设置IO端口                                              //
  68. //                                                                           //
  69. //***************************************************************************//
  70. void Init_Port(void)
  71. {
  72.   P5DIR  |= POWER                                                  ; // 主电源
  73.   MAIN_POWER_ON                                                    ;
  74. }

  75. //***************************************************************************//
  76. //                                                                           //
  77. //  TP_Adj(void): 触摸屏校正程序                                             //
  78. //                                                                           //
  79. //***************************************************************************//
  80. void TP_Adj(void)
  81. {
  82.   unsigned int temp[8]                                             ;
  83.   Color     = Green                                                ;
  84.   Color_BK  = Black                                                ;
  85.   TP_Init()                                                        ;
  86.   Clear_LCD(Color_BK)                                              ;
  87.   PutStringCN24(58,120,"触摸屏校正")                               ;
  88.   Color     = Cyan                                                 ;
  89.   PutStringCN16(30,165,"请用触控笔点测试点中心")                   ;
  90.   for(;;)
  91.   {
  92.     Draw_Test_Point(20,20,Yellow)                                  ;
  93.     for(;;)
  94.     {
  95.       if(Read_TP_Twice(&temp[0],&temp[1]))  break                  ;
  96.     }
  97.     DrawRectFill(0,0,40,40,Color_BK)                               ;
  98.     Wait_Pen_Up()                                                  ;
  99.   
  100.     Draw_Test_Point(220,20,Yellow)                                 ;
  101.     for(;;)
  102.     {
  103.       if(Read_TP_Twice(&temp[2],&temp[3]))  break                  ;
  104.     }
  105.     DrawRectFill(200,0,40,40,Color_BK)                             ;
  106.     Wait_Pen_Up()                                                  ;
  107.    
  108.     Draw_Test_Point(20,300,Yellow)                                 ;
  109.     for(;;)
  110.     {
  111.       if(Read_TP_Twice(&temp[4],&temp[5]))  break                  ;
  112.     }
  113.     DrawRectFill(0,280,40,40,Color_BK)                             ;
  114.     Wait_Pen_Up()                                                  ;
  115.    
  116.     Draw_Test_Point(220,300,Yellow)                                ;
  117.     for(;;)
  118.     {
  119.       if(Read_TP_Twice(&temp[6],&temp[7]))  break                  ;      
  120.     }
  121.     DrawRectFill(200,280,40,40,Color_BK)                           ;
  122.     Wait_Pen_Up()                                                  ;
  123.     if(TP_Adjust(temp,cx,ox,cy,oy))         break                  ;
  124.   }
  125. }


  126. void main( void )
  127. {
  128.   WDTCTL = WDTPW + WDTHOLD                                         ;
  129.   Init_CLK()                                                       ;
  130.   Init_Port()                                                      ;
  131.   LCD_Init()                                                       ;
  132.   _EINT()                                                          ;
  133.   TP_Adj()                                                         ;
  134.   LPM3                                                             ;
  135. }
复制代码

0条回答

一周热门 更多>