触摸屏实验(触摸屏介绍+硬件设计+软件设计。注:软件部分代码过长,理解即可)

简介: 触摸屏实验(触摸屏介绍+硬件设计+软件设计。注:软件部分代码过长,理解即可)

ff07290975ef4ae182a73b500ac10047.png

f460e8ff3dcf411b86a9a6118d0a8259.png


缺点:透光性不好,只支持单次单点触摸,容易被划伤


注:手机,平板等一般为电容式。。。。工业用品一般为电阻式


触摸屏+AD转换器--->传递给单片机


42c652a5b7cb4c4188de7eeb169b0b98.png

7c31264f0b1040b58c5fa44296ef6331.png


单片机的IO口对(I方C)进行控制驱动IC,从而控制触摸屏


9a4a7c6821444790a229bbd659e9c248.png

4f5a5d4c1c28447fafc5ad9faeada6a4.png


主函数部分:


7a8754939b6240b283d9be9d5ad3bbba.png


touch.c部分:


311f9ec202d6412582d5b9daed116e91.png

d80bb76864914e95a2a4b2ba8274c572.png


touch.h部分:


c78cb2096b3d47e185de3a8f8f3d7f55.png


注:需要tftlcd部分代码和gui部分代码,由于代码过长(2000+行),无法放置,需要的私聊我


1780a4964818474989f830ff3a5fd1f3.png


以下仅为main.c部分的代码,总代码过长,无法全部放置,需要代码的私聊我


#include "public.h"  
#include "uart.h"
#include "tftlcd.h"
#include "touch.h"
#include "gui.h"
u8 Touch_RST=0;
//触摸测试
void TOUCH_Test(void)
{
    static u16 penColor = BLUE;
    TOUCH_Scan();
    if(xpt_xy.sta)
    {    
        if(xpt_xy.lcdx>tftlcd_data.width)
            xpt_xy.lcdx=tftlcd_data.width-1;
        if(xpt_xy.lcdy>tftlcd_data.height)
            xpt_xy.lcdy=tftlcd_data.height-1;
        if((xpt_xy.lcdx>=(tftlcd_data.width-3*12))&&(xpt_xy.lcdy<24))
            Touch_RST=1;
        if(xpt_xy.lcdy > tftlcd_data.height - 20)
        {
            if(xpt_xy.lcdx>100)
            {
                penColor = YELLOW;
            }
            else if(xpt_xy.lcdx>80)
            {
                penColor = CYAN;
            }
            else if(xpt_xy.lcdx>60)
            {
                penColor = GREEN;
            }
            else if(xpt_xy.lcdx>40)
            {
               penColor = MAGENTA;
            }
            else if(xpt_xy.lcdx>20)
            {
                penColor = RED;
            }
            else if(xpt_xy.lcdx>0)
            {
                penColor = BLUE;
            }       
        }
        else
        {
            LCD_Fill(xpt_xy.lcdx-2,xpt_xy.lcdy-2,xpt_xy.lcdx+2,xpt_xy.lcdy+2,penColor);    
        }
    }        
}
//GUI测试
void GUI_Test(void)
{
    FRONT_COLOR=WHITE;
    LCD_ShowFontHZ(tftlcd_data.width/2-2*24-12, 0,"普中科技");
    LCD_ShowString(tftlcd_data.width/2-7*12,30,tftlcd_data.width,tftlcd_data.height,24,"www.prechin.cn");
    LCD_ShowString(tftlcd_data.width/2-7*8,55,tftlcd_data.width,tftlcd_data.height,24,"GUI Test");
    FRONT_COLOR=RED;
    gui_draw_bigpoint(10,55,GREEN);
    gui_draw_bline(10,80,120,80,10,GREEN);
    gui_draw_rectangle(10,95,30,30,GREEN);
    gui_draw_arcrectangle(50,95,30,30,5,1,BLUE,GREEN);
    gui_fill_rectangle(90,95,30,30,GREEN);
    //gui_fill_circle(90,120,20,GREEN);
    gui_fill_ellipse(30,150,20,10,GREEN);
    //更多的GUI等待大家来发掘和编写
    delay_ms(2000);
    LCD_Clear(BACK_COLOR);        
}
void main()
{
    u16 color=0;
    UART_Init();
    TFTLCD_Init();
Start:
    //GUI_Test();
    FRONT_COLOR=WHITE;
    LCD_ShowFontHZ(tftlcd_data.width/2-2*24-12, 0,"普中科技");
    LCD_ShowString(tftlcd_data.width/2-7*12,30,tftlcd_data.width,tftlcd_data.height,24,"www.prechin.cn");
    FRONT_COLOR=RED;
    LCD_ShowString(tftlcd_data.width-3*12,0,tftlcd_data.width,tftlcd_data.height,24,"RST");
    LCD_Fill(0, tftlcd_data.height - 20, 20, tftlcd_data.height, BLUE);
    LCD_Fill(20, tftlcd_data.height - 20, 40, tftlcd_data.height, RED);
    LCD_Fill(40, tftlcd_data.height - 20, 60, tftlcd_data.height, MAGENTA);
    LCD_Fill(60, tftlcd_data.height - 20, 80, tftlcd_data.height, GREEN);
    LCD_Fill(80, tftlcd_data.height - 20, 100, tftlcd_data.height, CYAN);
    LCD_Fill(100, tftlcd_data.height - 20, 120, tftlcd_data.height, YELLOW);
    while(1)
    {
        if(Touch_RST)
        {
            Touch_RST=0;
            LCD_Clear(BACK_COLOR);
            goto Start;
        }
        TOUCH_Test();
    }                    
}


相关文章
|
5天前
|
监控 算法 定位技术
LabVIEW压电驱动迟滞补偿控制
LabVIEW压电驱动迟滞补偿控制
|
5天前
|
传感器 编解码
LabVIEW编程LabVIEW开发 控制RITEC RAM-5000 SNAP非线性高能超声测试系统例程与相关资料
LabVIEW编程LabVIEW开发 控制RITEC RAM-5000 SNAP非线性高能超声测试系统例程与相关资料
13 0
|
8月前
|
自然语言处理 算法 C语言
正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?
正点原子T100智能焊台体验,顺便咱们来说说它的软件菜单、界面切换如何来实现?
207 0
|
8月前
|
传感器 编解码 API
大彩串口屏在RTOS编程中应该注意的要点
大彩串口屏在RTOS编程中应该注意的要点
143 0
大彩串口屏在RTOS编程中应该注意的要点
|
异构计算
实验四 基于FPGA的数字电子钟设计(1) 基本功能的实现 quartus电路图演示
实验四 基于FPGA的数字电子钟设计(1) 基本功能的实现 quartus电路图演示
559 0
实验四 基于FPGA的数字电子钟设计(1) 基本功能的实现 quartus电路图演示
|
10月前
正点原子战舰开发板---串口调试(硬件调试的一点经验吧)
正点原子战舰开发板---串口调试(硬件调试的一点经验吧)
146 0
|
内存技术
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
|
Linux
扩展知识点--利用Linux应用代码如何控制LED
扩展知识点--利用Linux应用代码如何控制LED
105 0
|
芯片
复习单片机:独立按键(内含.1 按键介绍+.2 硬件设计+.3 软件设计+4.原始代码+.5 实验现象)
复习单片机:独立按键(内含.1 按键介绍+.2 硬件设计+.3 软件设计+4.原始代码+.5 实验现象)
454 0
复习单片机:独立按键(内含.1 按键介绍+.2 硬件设计+.3 软件设计+4.原始代码+.5 实验现象)