触摸屏工作原理
触摸屏分为:电阻式,电容式,声表面波式,红外线扫描式等类型,使用的最多的是4线电阻式的触摸屏。
触摸屏工作流程
(1)、设置触摸屏接口为等待中断模式,等待触摸屏被按下。
(2)、如果中断(INT_TC)发生,选择X,Y坐标转换模式(X/Y坐标分别转换模式,X/Y坐标自动转换模式),启动AD转换。
(3)、当AD转换完毕后,通过中断(INT_ADC),获取X/Y坐标,ADCDAT0 bit[9:0]-x坐标,ADCDAT1 bit[9:0]-Y坐标。
(4)、设置触摸屏接口为等待中断模式,等待触摸笔离开触摸屏。
(5)、返回步骤1,等待下次触摸笔被按下。
实验主要代码
main,c
/*主函数*/
int Main(void)
{
int Scom=0;
Set_Clk();
Uart_Init(0,115200);
Uart_Select(Scom);
Test_Touchpanel();
while(1);
return 0;
}
/*触摸屏初始化*/
void Test_Touchpanel(void)
{undefined
rADCDLY=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
/*设置AD转频率*/
preScaler = ADC_FREQ;
preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M
rADCCON = (1<<14)|(preScaler<<6); //ADCPRS En,PRSCVL
/*设置触摸屏为等待中断模式,等待触摸笔被按下*/
rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
/*clear irq*/
rSRCPND = 0x80000000;
rINTPND = 0x80000000;
ClearSubPending(BIT_SUB_TC); //子中断也要清除
pISR_ADC = (U32)AdcTsAuto;
/*enable INT_TC irq*/
rINTMSK = 0x7fffffff;
EnableSubIrq(BIT_SUB_TC);
}
/*************************************************
Function name: AdcTsAuto
Parameter : void
Description : 中断服务程序
Return : void
Argument : void
Autor & date : Daniel
**************************************************/
static void __irq AdcTsAuto(void)
{undefined
U32 saveAdcdly;
/****************stylus down************************/
/*检测子中断源,判断是否是INT_TC中断,且触摸笔按下*/
if(rSUBSRCPND & (BIT_SUB_TC))
{undefined
if( !(rADCDAT0&0x8000))
Uart_Printf("nStylus downn");
else
Uart_Printf("nStylus upn");
}
/*pull-up disable,自动连续X,Y坐标转换*/
rADCTSC = (1<<3)|(1<<2);
saveAdcdly=rADCDLY;
rADCDLY=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms
/*开始AD转换*/
rADCCON|=0x1; //start ADC
while(rADCCON & 0x1); //check if Enable_start is low
while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
while(!(rSRCPND & 0x80000000)); //check if ADC is finished with interrupt bit
/*获取X,Y坐标*/
xdata=(rADCDAT0&0x3ff);
ydata=(rADCDAT1&0x3ff);
ClearSubPending(BIT_SUB_TC);
//ClearPending(BIT_ADC);
rSRCPND = 0x80000000;
rINTPND = 0x80000000;
EnableSubIrq(BIT_SUB_TC);
//EnableIrq(BIT_ADC);
rINTMSK = 0x7fffffff;
/****************stylus down************************/
/****************stylus up**************************/
/*设置触摸屏为等待中断模式,等待触摸笔抬起*/
rADCTSC =0xd3; //Waiting for interrupt
rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
while(1) //to check Pen-up state
{undefined
if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit
{undefined
Uart_Printf("Stylus Up Interrupt~!n");
break; //if Stylus is up(1) state
}
}
/****************stylus up**************************/
Uart_Printf("count=%03d XP=%04d, YP=%04dn", count++, xdata, ydata);
rADCDLY=saveAdcdly;
/*设置触摸屏为等待中断模式,等待下次触摸笔按下*/
rADCTSC =0xd3; //Waiting for interrupt
ClearSubPending(BIT_SUB_TC);
//ClearPending(BIT_ADC);
rSRCPND = 0x80000000;
rINTPND = 0x80000000;
EnableSubIrq(BIT_SUB_TC);
//EnableIrq(BIT_ADC);
rINTMSK = 0x7fffffff;
}
上一篇:ARM9(S3C2440) LCD
下一篇:ARM9(S3C2440) ADC
推荐阅读最新更新时间:2024-11-10 11:43
推荐帖子
- SparkRoad测评(9)-例程GAME测试
- 安路开发板中的较复杂的测试是GAME测试,该测试中引入了CPU和VGA的测试,当然CPU应该是软核的,这个cpu是什么指令集的不知道,有时间了研究一下,游戏的源码:好象在一个文件了。//加载rom程序initialbegin$readmemh("./sources/rtl/mcu/rom.o",rom_reg);end由于上次的VGA实验没有搞成,所以就多看了看VGA的源码,这次的VGA是640x480@60Hz的分辨率,而且使用了RAM作为显存,显示的程序在
- bigbat 国产芯片交流
- 谁知道STM32控制电机的参考方案什么时候出来?
- 我很关心这个,望帮忙看看,广告上说4季度的,谁知道STM32控制电机的参考方案什么时候出来?LZ若确有具体项目可以与我们的业务人员联系,我们可以先安排与您的技术交流,并在套件推出后让您先得到。现在正在进行内部培训和测试我有个项目做自动化设备,要控制电机.我也想知这个我都问了快一年了,从STR75x到STM32我这里倒是有STR750电机控制套件.电
- jinian601 stm32/stm8
- 用Verilog 实现一个16位超前进位加法器(实例)
- modulecla16(a,b,s);//topmodule含有四个4位超前进位加法器子模块inputa,b;outputs;wirepp4,pp3,pp2,pp1;wiregg4,gg3,gg2,gg1;wireCp;wirep,g;claslicei1(p,p,p,p,g,g,g,g,1\'b0,Cp,Cp,Cp,pp1,gg1);claslicei2(p,p,p,p,g,g,g,g,Cp
- settleinsh FPGA/CPLD
- 【GD32L233C-START评测】12. 硬件IIC驱动OLED
- 之前的帖子可以参考:【GD32L233C-START评测】1.开箱【GD32L233C-START评测】2.手把手创建新工程【GD32L233C-START评测】3.移植FreeRTOS到GD32L233【GD32L233C-START评测】4.移植RT-Thread到GD32L233【GD32L233C-START评测】5.IIC驱动OLED【GD32L233C-START评测】6.获取RTC时间并通过OLED显示【GD32L233C-STA
- hehung GD32 MCU
- 数控电源-PCB
- 数控电源-PCB数控电源-PCB
- feifei 电源技术
设计资源 培训 开发板 精华推荐
- MIC5253 的典型应用:100mA 低噪声电容小 LDO
- 高级 TCA 热插拔控制器监控配电
- LT1170HVCQ、5V/5A 反激式转换器的典型应用
- 超炫酷的变脸面具DIY
- 用于电池充电器的 30W、16.8V 交流转直流单输出电源
- DC1029B,用于 LTC2928 多通道电源排序器和监控器的演示板
- TFA9895 具有扬声器升压保护和多频段动态范围压缩器的升压 D 类音频放大器的典型单声道应用
- 具有 8V 栅极驱动器的 LTC3892MPFE-1 高效率、双相降压型 5V/8.5V 转换器的典型应用电路
- 用于简单时钟振荡器的 NCP300LSN27T1 2.7V 电压检测器的典型应用
- L5972D DC-DC转换器及开关稳压芯片的典型应用
- ADI & 世健 新基建系列第一期——工业以太网 答题赢好礼!
- Vicor白皮书下载——双向电源:“安静”改变世界的驱动力
- 泰科电子邀您云逛展——2023中国国际工业博览会
- 有奖直播:市场环境不确定,为物联网设备保驾护航英飞凌很确定
- 免费获赠LPC800迷你板 抢先体验MO+优异性能!
- EEWorld 芯积分兑换年度回馈来袭~多种赚积分捷径曝光+礼品兑换剧透
- 安森美半导体重磅推出超低功耗蓝牙芯片 RSL10 — 观视频答题送样片 更有丰富礼品等你拿!
- 【EEWORLD第二十八届】2011年07月社区明星人物揭晓!
- 下载有礼:2017年泰克亚太专家大讲堂第四期: 如何应对新型半导体材料表征测试挑战