查看: 4194|回复: 7

[经验] 基于GD32F207小红板的触摸屏

[复制链接]
  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-1-2 14:10:10 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wambob 于 2016-1-2 14:20 编辑

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

         二:触摸代码移植
             触摸代码
    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, 下载次数: 58)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-28 17:24
  • 签到天数: 276 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2016-1-2 18:16:03 | 显示全部楼层
    不错                    
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-23 13:44
  • 签到天数: 243 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2016-1-2 18:45:39 | 显示全部楼层
    多谢分享。。。不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-1-2 19:54:42 | 显示全部楼层
    楼主能提供下这个屏的资料吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-11-30 19:48
  • 签到天数: 981 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-1-2 21:44:09 | 显示全部楼层
    楼主辛苦!!!!!!!!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2016-1-3 12:40:46 | 显示全部楼层
    党国特派员 发表于 2016-1-2 19:54
    楼主能提供下这个屏的资料吗?

    屏的主控是ssd1289
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-4 08:48:00 | 显示全部楼层
    多谢分享。。。不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-4 15:26:09 | 显示全部楼层
    分享的不错,可以将文章一并发到经验频道,获取双重奖励哟http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 21:54 , Processed in 0.198604 second(s), 31 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.