查看: 854|回复: 0

分享基于GD32F207小红板的触摸屏的一些经验

[复制链接]

该用户从未签到

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


接线图:


其控制字为:


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



    二:触摸代码移植
        触摸代码

  • #include "touch.h"

  • void spistar(void)
  • {   CS_1;
  •     DCLK_1;
  •     DIN_1;
  • }

  • void WriteCharTo7843(unsigned char data)
  • {
  •     unsigned char count =0;
  •     for(count=0;count<8;count++)
  •     {
  •      if(data&0x80){DIN_1;}
  •      else{DIN_0;}
  •      data<<=1;
  •      DCLK_0;
  •      DCLK_1;
  •     }
  • }


  • //**********************************************************
  • unsigned int ReadCharFrom7843(void)
  •     {
  •     unsigned char count;
  •     unsigned int data=0;
  •     for(count=0;count<12;count++)
  •     {
  •      data<<=1;
  •      DCLK_1;
  •      DCLK_0;
  •      if(DOUT) (data)++;
  •     }
  •      return data;
  • }
  • void inttostr(int dd,unsigned char *str)
  • {
  •      str[0]=dd/10000+48;
  •      str[1]=(dd/1000)-((dd/10000)*10)+48;
  •      str[2]=(dd/100)-((dd/1000)*10)+48;
  •      str[3]=(dd/10)-((dd/100)*10)+48;
  •      str[4]=dd-((dd/10)*10)+48;
  •      str[5]=0;
  • }
  • unsigned char Makpix(struct pix_ pix1,struct pix_ pix2)
  • {
  • unsigned char l=0;
  • int x=pix1.x>pix2.x?pix1.x-pix2.x:pix2.x-pix1.x;
  • int y=pix1.y>pix2.y?pix1.y-pix2.y:pix2.y-pix1.y;
  • if(x<14&&y<11)       //Èí¼þÂ˲¨£¬
  • {
  •      l=1;
  •      Tp_pix.x=pix1.x;
  •      Tp_pix.y=pix1.y;
  • }
  • return l;
  • }


  • struct pix_ AD7843(void)
  • {
  • //delayms(1);
  • //spistar();               //??SPI
  • //while(BUSY);
  • //delayms(1);
  • struct pix_ pix;
  • CS_0;
  • WriteCharTo7843(0x90);
  • //while(BUSY);
  • //delayms(1);
  • DCLK_1;
  • DCLK_0;
  • pix.y=ReadCharFrom7843();
  • WriteCharTo7843(0xD0);

  • DCLK_1;
  • DCLK_0;
  • pix.x=ReadCharFrom7843();
  • CS_1;
  • return pix;
  • }
  • unsigned char Getpix(void)
  • {
  •      struct pix_ pix1;
  •      struct pix_ pix2;
  •      pix1=AD7843();
  •      pix2=AD7843();
  •        return     Makpix(pix1,pix2);
  • }
主程序代码简单添加了检测触摸指示绿灯

  • int main(void)
  • {
  •     unsigned char ss[6];
  •      unsigned int lx,ly,num=0;

  •      spistar();

  •     GPIO_config();
  •     SysTick_Configuration();
  •     LED_ON;
  •     Lcd_Init();
  •     Pant();
  •     showzifustr(0,0,"GD32F207",0xf800,0xffff);

  •      while(1)
  •     {

  •      if(Penirq==0)
  •      {
  •        Delay_1ms(200);
  •          if(Penirq==0)
  •          {
  •             if(Getpix()==1)
  •             {
  •             inttostr(Tp_pix.x,ss);
  •             showzifustr(10,305,"X:",0xf800,0xffff);
  •                      showzifustr(25,305,ss,0xf800,0xffff);
  •                      inttostr(Tp_pix.y,ss);
  •                      showzifustr(185,305,"Y:",0xf800,0xffff);
  •                      showzifustr(200,305,ss,0xf800,0xffff);
  •                      lx=((Tp_pix.x-340)*10/144);
  •            if(lx>237)
  •            {
  •              lx=237;
  •            }
  •            ly=320-((Tp_pix.y-320)/11);
  •                      Address_set(lx,ly,lx+5,ly+5);
  •                      Lcd_Write_DATA(0XF800);
  •            num++;
  •            if(num%2)
  •              GPIO_SetBits( GPIOD, GPIO_PIN_12);
  •             else
  •              GPIO_ResetBits( GPIOD, GPIO_PIN_12);
  •            }
  •           }
  •      }
  • //     LCD_Picture1(0,0,239,319);
  • //     LCD_Picture(0,0,239,315);
  •     }
  • }

Template0.rar
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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

手机版|小黑屋|与非网

GMT+8, 2024-12-19 20:02 , Processed in 0.127900 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.