7回答

0收藏

[分享] 基于GD32F207小红板的触摸屏

GD32 GD32 4700 人阅读 | 7 人回复 | 2016-01-02

本帖最后由 wambob 于 2016-1-2 14:20 编辑

       学习GD32f207一段时间了,点亮TFT-LCD后,开始移植触摸屏程序,240X320分辨率的LCD配备了电阻触摸屏,附带的资料中是关于51的代码,通过移植到GD32F207中学习电阻触摸屏。
      一:触摸屏简介
      本电阻触摸屏为4线触摸屏,控制器芯片使用了XPT2046,和芯片ADS7843是兼容的,内置12-bit ADC和同步串行接口。芯片示意图:

接线图:

其控制字为:

通过写控制字来读取触摸位置装换的数据。时序图:


     二:触摸代码移植
         触摸代码
  1. #include "touch.h"

  2. void spistar(void)
  3. {   CS_1;
  4.     DCLK_1;
  5.     DIN_1;
  6. }

  7. void WriteCharTo7843(unsigned char data)
  8. {   
  9.     unsigned char count =0;
  10.     for(count=0;count<8;count++)
  11.     {
  12.         if(data&0x80){DIN_1;}
  13.         else{DIN_0;}
  14.         data<<=1;
  15.         DCLK_0;
  16.         DCLK_1;
  17.     }   
  18. }                  


  19. //**********************************************************
  20. unsigned int ReadCharFrom7843(void)
  21.     {
  22.     unsigned char count;
  23.     unsigned int data=0;
  24.     for(count=0;count<12;count++)
  25.     {
  26.         data<<=1;
  27.         DCLK_1;
  28.         DCLK_0;        
  29.         if(DOUT) (data)++;
  30.     }
  31.         return data;
  32. }
  33. void inttostr(int dd,unsigned char *str)
  34. {
  35.         str[0]=dd/10000+48;
  36.         str[1]=(dd/1000)-((dd/10000)*10)+48;
  37.         str[2]=(dd/100)-((dd/1000)*10)+48;
  38.         str[3]=(dd/10)-((dd/100)*10)+48;
  39.         str[4]=dd-((dd/10)*10)+48;
  40.         str[5]=0;
  41. }
  42. unsigned char Makpix(struct pix_ pix1,struct pix_ pix2)
  43. {
  44. unsigned char l=0;
  45. int x=pix1.x>pix2.x?pix1.x-pix2.x:pix2.x-pix1.x;
  46. int y=pix1.y>pix2.y?pix1.y-pix2.y:pix2.y-pix1.y;
  47. if(x<14&&y<11)         //?í?????¨??
  48. {
  49.         l=1;
  50.         Tp_pix.x=pix1.x;
  51.         Tp_pix.y=pix1.y;
  52. }
  53. return l;
  54. }


  55. struct pix_ AD7843(void)            
  56. {
  57. //delayms(1);
  58. //spistar();                       //??SPI
  59. //while(BUSY);
  60. //delayms(1);
  61. struct pix_ pix;
  62. CS_0;
  63. WriteCharTo7843(0x90);
  64. //while(BUSY);               
  65. //delayms(1);
  66. DCLK_1;
  67. DCLK_0;        
  68. pix.y=ReadCharFrom7843();
  69. WriteCharTo7843(0xD0);

  70. DCLK_1;
  71. DCLK_0;        
  72. pix.x=ReadCharFrom7843();
  73. CS_1;
  74. return pix;
  75. }
  76. unsigned char Getpix(void)
  77. {
  78.         struct pix_ pix1;
  79.         struct pix_ pix2;
  80.         pix1=AD7843();
  81.         pix2=AD7843();
  82.          return        Makpix(pix1,pix2);        
  83. }
复制代码
主程序代码简单添加了检测触摸指示绿灯
  1. int main(void)
  2. {
  3.     unsigned char ss[6];        
  4.         unsigned int lx,ly,num=0;

  5.         spistar();  

  6.     GPIO_config();
  7.     SysTick_Configuration();
  8.     LED_ON;                                                                                                           
  9.     Lcd_Init();
  10.     Pant();
  11.     showzifustr(0,0,"GD32F207",0xf800,0xffff);
  12.                                 
  13.         while(1)
  14.     {
  15.         
  16.         if(Penirq==0)
  17.         {
  18.            Delay_1ms(200);
  19.             if(Penirq==0)
  20.             {
  21.                 if(Getpix()==1)               
  22.                 {
  23.                 inttostr(Tp_pix.x,ss);
  24.                 showzifustr(10,305,"X:",0xf800,0xffff);
  25.                                 showzifustr(25,305,ss,0xf800,0xffff);        
  26.                                 inttostr(Tp_pix.y,ss);
  27.                                 showzifustr(185,305,"Y:",0xf800,0xffff);
  28.                                 showzifustr(200,305,ss,0xf800,0xffff);        
  29.                                 lx=((Tp_pix.x-340)*10/144);
  30.                  if(lx>237)
  31.                  {
  32.                     lx=237;
  33.                  }
  34.                  ly=320-((Tp_pix.y-320)/11);
  35.                                 Address_set(lx,ly,lx+5,ly+5);
  36.                                 Lcd_Write_DATA(0XF800);
  37.                  num++;
  38.                  if(num%2)
  39.                     GPIO_SetBits( GPIOD, GPIO_PIN_12);
  40.                 else
  41.                     GPIO_ResetBits( GPIOD, GPIO_PIN_12);                          
  42.                  }
  43.              }     
  44.         }         
  45. //        LCD_Picture1(0,0,239,319);        
  46. //        LCD_Picture(0,0,239,315);
  47.     }
  48. }
复制代码
Template0.rar (661.58 KB, 下载次数: 228)

分享到:
回复

使用道具 举报

回答|共 7 个

倒序浏览

沙发

#define

发表于 2016-1-2 18:16:03 | 只看该作者

不错                    
板凳

Paderboy

发表于 2016-1-2 18:45:39 | 只看该作者

多谢分享。。。不错
地板

党国特派员

发表于 2016-1-2 19:54:42 | 只看该作者

楼主能提供下这个屏的资料吗?
喜欢在构思妙想,电子产品DIY是工作,也是一种爱好。
5#

zhzhx66

发表于 2016-1-2 21:44:09 | 只看该作者

楼主辛苦!!!!!!!!!!!!!!
6#

wambob

发表于 2016-1-3 12:40:46 | 只看该作者

党国特派员 发表于 2016-1-2 19:54
楼主能提供下这个屏的资料吗?

屏的主控是ssd1289
7#

奋斗哥

发表于 2016-1-4 08:48:00 | 只看该作者

多谢分享。。。不错
8#

糖悦之果飞

发表于 2016-1-4 15:26:09 | 只看该作者

分享的不错,可以将文章一并发到经验频道,获取双重奖励哟http://jingyan.eeboard.com/
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条