基于AI8051U_V1.2实验箱_学习实验之触摸屏编程基础
基于AI8051U_V1.2实验箱_学习实验之触摸屏编程基础本实验体现当点击触摸屏任意位置时, 显示点击点坐标值,
并执行不同的程序代码,在点击所在区域,显示不同色矩形块。
程序开始是黑色清屏,此后点击桌上角区域,可执行清屏。
请看图:这是在满屏不同区域,点击15次以后的结果。
主程序源码:
//=====================================================================
// 文件名称: Main.C
// 功能说明: 测试 2.4寸彩色触摸显示屏 240*320 8位并行口模式(专用屏)
// 基于电路: AI8051U 实验箱V1.2 (感谢"江苏国芯科技"馈赠)
// 整理改编: 浦晓明(浦江一水) 2024-11-20
//=== 硬件连接 =========================================================
//======================电源接线========================================
//SYS-VCC 3.3V电源
//USB+5V5.0V电源(为显示屏供电)
//GND接地
//===============液晶屏数据/控制线接线===================================
//本模块数据总线类型为8位并口 (+5V供电)
//液晶屏模块 AI8051U
// LCD_D0~D7接 P20~P27 //液晶屏8位数据线
// LCD_RS 接 P45 //数据/命令选择控制信号
// LCD_RD 接 P37 //读控制信号
// LCD_WR 接 P36 //写控制信号
// LCD_CS 接 P05 //片选控制信号
// LCD_RST 接 P47 //复位信号
//=== 四线电阻触摸屏IO ==================================================
// 端口定义: 接口类型 SPI
// PEN = P1^4; //触摸屏笔状态: 0:按下 1:抬起
// TCS = P1^5; //触摸屏片选端: 0:选中 1:未选中
// DCLK= P3^2; //时钟控制(上升沿将数据输出/下降沿将数据输入)
// DOUT = P3^3; //MISO 触摸屏数据输出 单片机MCU输入
// DIN = P3^4; //MOSI 触摸屏数据输入 单片机MCU输出
//**********************************************************************/
#include "AI8051U.H"
#include "AI8051U_SYS.H"
#include "LCD9341.H" //显示屏驱动
#include "PTouch.H" //触摸屏驱动
//全局变量说明
unsigned int X,Y;//触摸点坐标
unsigned char k; //返回键值
char S; //字符串显示缓存
//函数说明(排列在main()之后的函数须先说明一下)
unsigned char RDKEY(void); //读取键值(触摸点)
//主函数
void main(void)
{
SYS_Init(); //系统初始化
LCD_Init(); //液晶屏初始化
//LCD_SetDIR(0); //原显示方向(纵向屏)
LCD_SetDIR(3); //调整显示方向(横屏)
LCD_CLS(0); //清屏(蓝色)
LCD_Str16(10,10,"PTouch",15,0);
delay_us(50);
while(1)
{
k=0; k=RDKEY(); //读取按键或触摸点键值...
if(k!=0)
{ switch(k)//根据不同触摸点,绘制不同色矩形色块
{ case1: LCD_Box( 80,0,80,60,15,15,1); break; //1号暗蓝
case2: LCD_Box(160,0,80,60,15,15,2); break; //2号暗绿
case3: LCD_Box(240,0,80,60,15,15,3); break; //3号暗青
case4: LCD_Box(0,60,80,60,15,15,4);break; //4号暗红
case5: LCD_Box( 80,60,80,60,15,15,5);break; //5号暗紫
case6: LCD_Box(160,60,80,60,15,15,6);break; //6号暗黄
case7: LCD_Box(240,60,80,60,15,15,7);break; //7号暗灰
case8: LCD_Box(0,120,80,60,15,15,8); break; // 8号亮灰
case9: LCD_Box( 80,120,80,60,15,15,9); break; // 9号亮蓝
case 10: LCD_Box(160,120,80,60,15,15,10);break; //10号亮绿
case 11: LCD_Box(240,120,80,60,15,15,11);break; //11号亮青
case 12: LCD_Box(0,180,80,60,15,15,12);break; //12号亮红
case 13: LCD_Box( 80,180,80,60,15,15,13);break; //13号亮紫
case 14: LCD_Box(160,180,80,60,15,15,14);break; //14号亮黄
case 15: LCD_Box(240,180,80,60,0,0,15);break; //15号亮白
case 16: LCD_CLS(0);break; //点触摸左上角0号黑色清屏
}k=0;
sprintf(S,"X=%03d",X); LCD_Str16(10,10,S,15,0);//显示触摸点坐标X
sprintf(S,"Y=%03d",Y); LCD_Str16(10,30,S,15,0);//显示触摸点坐标Y
}
delay_ms(50); //延时50ms
}
}
//扫描按键和触摸屏返回键值
//为屏键双用而预设计...
unsigned char RDKEY(void)
{ k=0; //当前页面按键和触摸点返回值(因页面不同而不同)
if(PTouchOK()){ X=320-TP.y; Y=240-TP.x; } //坐标转换(由屏方向不同而不同)
else { X=0; Y=0; }
if((X> 10)&&(X< 80)&&(Y>0)&&(Y<60))k=16;
if((X> 80)&&(X<160)&&(Y>0)&&(Y<60))k=1;
if((X>160)&&(X<240)&&(Y>0)&&(Y<60))k=2;
if((X>240)&&(X<320)&&(Y>0)&&(Y<60))k=3;
if((X> 10)&&(X< 80)&&(Y>60)&&(Y<120))k=4;
if((X> 80)&&(X<160)&&(Y>60)&&(Y<120))k=5;
if((X>160)&&(X<240)&&(Y>60)&&(Y<120))k=6;
if((X>240)&&(X<320)&&(Y>60)&&(Y<120))k=7;
if((X> 10)&&(X< 80)&&(Y>120)&&(Y<180))k=8;
if((X> 80)&&(X<160)&&(Y>120)&&(Y<180))k=9;
if((X>160)&&(X<240)&&(Y>120)&&(Y<180))k=10;
if((X>240)&&(X<320)&&(Y>120)&&(Y<180))k=11;
if((X> 10)&&(X< 80)&&(Y>180)&&(Y<240))k=12;
if((X> 80)&&(X<160)&&(Y>180)&&(Y<240))k=13;
if((X>160)&&(X<240)&&(Y>180)&&(Y<240))k=14;
if((X>240)&&(X<320)&&(Y>180)&&(Y<240))k=15;
return k;
}
//==== END =========================================================
由于触摸屏驱动与显示屏驱动密切相关,本人的显示屏驱动自成体系,与官方例程中的显示屏驱动不同,
所以对触摸屏部分代码,进行了重新整理改编,脱离显示屏驱动而独立存在,以便移植匹配不同的显示屏。
触摸屏部分代码,还在打磨之中,尚未成熟定型,为避免涉嫌误人子弟,故暂时不便开源。
可执行代码可作为另外一种方式的触摸屏测试软件,
供有兴趣的Ai8051U单片机爱好者坛友,在配屏测试时选择使用。
可执行代码:
浦江版主出品必属精品!{:4_213:}
4 厉害了 感谢 autopccopy 版主的鲜花鼓励。
感谢 国学芯用版主的鲜花鼓励。
感谢 神农鼎 管理员的鲜花鼓励。
记得年初时节,神管曾留言“挂个荣誉版主?TFT/LCD...”,俺当时复“新人新手,岂敢岂敢”。
一直以来,承蒙诸位鼓励、抬爱,心存感激。
而今,被神管指为“荣誉版主”,实在诚惶诚恐,恭敬不如从命了。
俺自知才疏学浅、井底之蛙,唯有继续努力学习,
在有生之年,为国芯弘扬广大,竭微薄之力,别辜负了大家期望。
若有不妥之处,还望多包涵,及时指正。
咱们这个 TFT版块 挂在 TinyML 版块下面,
就是为了51实际全面进入以 【触摸输入】+【TFT彩屏显示】为基础的
AI 8051 Ultra 时代,荣誉版主们任重道远
咱们这个版块下面就是 RTOS版块,Ai8052U到来时,
就是51世界全面 进入【 RTOS + TFT + 触摸 + AI 】的时候
<p><img alt="qiang" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/qiang.gif" title="qiang" /></p>
<p><img alt="qiang" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/qiang.gif" title="qiang" /></p>
<p><img alt="qiang" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/qiang.gif" title="qiang" /></p>
学习了,谢谢分享
页:
[1]