#include "reg52.h"
#include "driver.h"
uint X,Y;//全局变量,摸得坐标
uchar touch_temp;
uchar addr=0; //触摸地址
/**************************************************************
显示格,方便定坐标
****************************************************************/
void hs()
{
uchar i=0;
uchar j=0;
LCD_CmdWrite(0x00);
LCD_DataWrite(0x04);//图形模式
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0xb3); //原33,后光标先垂直后水平
for(i=0;i<40;i+=5)
{
LCD_CmdWrite(0x60);
LCD_DataWrite(i);
LCD_CmdWrite(0x70);
LCD_DataWrite(0);
LCD_CmdWrite(0xb0);
for(j=240;j>0;j--)
LCD_DataWrite(0x80);//左边两行坚线
}
LCD_CmdWrite(0x60);
LCD_DataWrite(39);
LCD_CmdWrite(0x70);
LCD_DataWrite(0);
LCD_CmdWrite(0xb0);
for(j=240;j>0;j--)
LCD_DataWrite(0x01); //右边两行坚线
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x33); //原33
for(i=0;i<240;i+=30)
{
LCD_CmdWrite(0x60);
LCD_DataWrite(0x00);
LCD_CmdWrite(0x70);
LCD_DataWrite(i);
LCD_CmdWrite(0xb0);
for(j=0;j<40;j++)LCD_DataWrite(0xff); //上边框
}
LCD_CmdWrite(0x60);
LCD_DataWrite(0);
LCD_CmdWrite(0x70);
LCD_DataWrite(239);
LCD_CmdWrite(0xb0);
for(i=0;i<40;i++) LCD_DataWrite(0xff);//下边框
display_string(0,36,"触框1");
display_string(35,36,"触框2");
display_string(0,190,"触框3");
display_string(35,190,"触框4");
LCD_CmdWrite(WCCR); //[10H] , Default --> 0x00
LCD_DataWrite(0x13); //变粗
display_string(16,110,"中间四框");
LCD_CmdWrite(WCCR); //[10H] , Default --> 0x00
LCD_DataWrite(0x03);
}
/*********************************************************
函数:void touch()
功能:触摸的检测及坐标的显示
**********************************************************/
uchar get_touch_flag()
{
uchar k,X1[3],X2[3],Y1[3],Y2[3];
LCD_CmdWrite(0x0f);
LCD_DataWrite(0x10); //中断输出
LCD_CmdWrite(0xc0);
LCD_DataWrite(0xa0); //取样等待200us
LCD_CmdWrite(0xc4);
LCD_DataWrite(0x01); //自动模式
delay(5); //这里需要有一定的延时时间
touch_temp=LCD_CmdRead(0x0f);
if((touch_temp&0x01)==0x01)
delay(10);
touch_temp=LCD_CmdRead(0x0f);//读第二次防抖动
if((touch_temp&0x01)==0x01)
{
for(k=0;k<3;k++)
{
X1[k]=LCD_CmdRead(0xc1);
X2[k]=LCD_CmdRead(0xc3)&0x03;
Y1[k]=LCD_CmdRead(0xc2);
Y2[k]=LCD_CmdRead(0xc3)&0x0c;
LCD_CmdWrite(0x0f);
LCD_DataWrite(0x10);
delay(10);
}
if((X1[0]==X1[1])&&(X1[0]==X1[2]))
{
X = (((uint)X1[0]&0x00ff)<<2)|((uint)X2[0]&0x0003);
Y = (((uint)Y1[0]&0x00ff)<<2)|(((uint)Y2[0]&0x000C)>>2);
return 1;
}
else return 0;
}
}
/**********************************************************
函数:get_addr()
功能:得到触摸的运算地址
**************************************************************/
void get_addr()
{
if(((X<960)&&(X>850))&&((Y<825)&&(Y>715)))addr=1;
else if(((X<195)&&(X>90))&&((Y<825)&&(Y>715)))addr=2;
else if(((X<960)&&(X>850))&&((Y<300)&&(Y>200)))addr=3;
else if(((X<195)&&(X>90))&&((Y<300)&&(Y>200)))addr=4;
else if(((X<600)&&(X>430))&&((Y<600)&&(Y>400)))addr=5;
else if(((X<960)&&(X>735))&&((Y<200)&&(Y>100)))addr=7;
else if(((X<625)&&(X>400))&&((Y<200)&&(Y>100)))addr=8;
else if(((X<300)&&(X>90))&&((Y<200)&&(Y>100))) addr=9;
else addr=0;
}
/*************************************************************
在第二界面的提示
****************************************************************/
void display_two()
{
uchar i;
display_string(1,220,"图片测试");
display_string(18,220,"返回");
display_string(31,220,"240X320");
LCD_CmdWrite(0x00);
LCD_DataWrite(0x04);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0xb3); //原33,后光标先垂直后水平
LCD_CmdWrite(0x60);
LCD_DataWrite(10);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=0;i<30;i++)LCD_DataWrite(0x80);
LCD_CmdWrite(0x60);
LCD_DataWrite(15);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=0;i<30;i++)LCD_DataWrite(0x80);
LCD_CmdWrite(0x60);
LCD_DataWrite(25);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=0;i<30;i++)LCD_DataWrite(0x80);
LCD_CmdWrite(0x60);
LCD_DataWrite(30);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=0;i<30;i++)LCD_DataWrite(0x80);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x33); //原33
LCD_CmdWrite(0x60);
LCD_DataWrite(0);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=10;i>0;i--)
LCD_DataWrite(0xff);//左边横线
LCD_CmdWrite(0x60);
LCD_DataWrite(15);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=10;i>0;i--)
LCD_DataWrite(0xff);//中间横线
LCD_CmdWrite(0x60);
LCD_DataWrite(30);
LCD_CmdWrite(0x70);
LCD_DataWrite(210);
LCD_CmdWrite(0xb0);
for(i=10;i>0;i--)
LCD_DataWrite(0xff);//右边横线
}
/*********************************************************
函数:void display_img(uchar code *img,bit c)
功能:显示一幅320*240的图画,有正反显示
**********************************************************
void display_img(uchar code *img,bit c)
{
uint s=0;
LCD_CmdWrite(0x00);
LCD_DataWrite(0x04);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x33); //原33,后光标先垂直后水平
LCD_CmdWrite(0x60);
LCD_DataWrite(0);
LCD_CmdWrite(0x70);
LCD_DataWrite(0);
LCD_CmdWrite(0xb0);
for(s=0;s<9600;s++)
{
if(c) LCD_DataWrite(img[s++]);
else LCD_DataWrite(~img[s++]);
}
}
/**********************************************
反转显示字
*****************************************************/
void display_240320()
{
LCD_CmdWrite(WCCR); //旋转字体
LCD_DataWrite(0x08);
LCD_CmdWrite(MISC); //[01H] , Default --> 0x00
LCD_DataWrite(0x0f);
display_string(0,0,"深圳叁元晶液晶显示科技有限公司");
LCD_CmdWrite(WCCR); //正常字体
LCD_DataWrite(0x00);
LCD_CmdWrite(MISC); //[01H] , Default --> 0x00
LCD_DataWrite(0x0c);
}
/*********************************************************
主函数
***********************************************************/
void main ()
{
uchar flag=0;
rst=0;
delay(10);
rst=1;
lcd_init();
lcd_clear();
hs();
while(1)
{
if(flag=get_touch_flag())
{
get_addr();//得到运算地址
switch(addr)
{
case 1 : lcd_clear();
display_string(0,40,"欢迎使用RA8806触摸屏");
delay(1500);
lcd_clear();
break;
case 2 : lcd_clear();
display_string(10,40,"深圳叁元晶液晶显示科技有限公司");
delay(1800); lcd_clear();
break;
case 3 : lcd_clear();
display_string(0,160,"地址:深圳宝安39区4 栋2 楼");
delay(2000);lcd_clear();
break;
case 4 : lcd_clear();
display_string(10,160,"电话:0755--27893975");
delay(2000); lcd_clear();
break;
case 5 : lcd_clear();
display_string(0,90,"欢迎你来到深圳叁元晶液晶显示科技有限公司");
display_string(0,120,"电话:0755--27893975 地址:深圳宝安39区4 栋2 楼");
while((flag=get_touch_flag())==0); lcd_clear();
display_two();
do
{
if(flag=get_touch_flag()) get_addr();
if(addr==9){lcd_clear();display_24
320240触摸液晶屏XY校准程序
5星 · 超过95%的资源 需积分: 9 4 浏览量
2010-06-14
11:37:14
上传
评论
收藏 46KB RAR 举报
hch97327
- 粉丝: 0
- 资源: 4
最新资源
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈