|
void __irq ADCTs(void)
{
rADCTSC = (1<<3)|(1<<2); //上拉电阻无效,自动连续XY坐标转换模式开启
rADCCON|=0x1; //开始A/D转换
while(rADCCON & 0x1); //检查A/D转换是否开始
while(!(rADCCON & 0x8000)); //等待A/D转换的结束
while(!(rSRCPND & ((unsigned int)0x1<<31))); //判断A/D中断的悬挂位
xdata=(rADCDAT0&0x3ff); //读取X轴坐标
ydata=(rADCDAT1&0x3ff); //读取Y轴坐标
flagTS = 1; //置标志
rADCDLY = 100000; //延时
rSUBSRCPND|=0x1<<9; //清中断挂起
rSRCPND = 0x1<<31; //
rINTPND = 0x1<<31; //
rINTSUBMSK=~(0x1<<9); //清A/D中断标志,开启A/D中断
rINTMSK=~(0x1<<31);
rADCTSC =0xd3; //再次设置等待中断模式
if(num<3) //仅取三点做较正需做提笔检验
{
rADCTSC=rADCTSC|(1<<8); //设置触笔抬起中断
while(1) //等待触笔的抬起
{
if(rSUBSRCPND & (0x1<<9)) //检查A/D触摸屏中断悬挂
{
break; //如果触笔抬起,则跳出该循环
}
}
rADCDLY=5000;
rSUBSRCPND|=0x1<<9; //写1清除标志
rINTSUBMSK=~(0x1<<9); //清0中断使能,ADC的子中断
rSRCPND = 0x1<<31; //写1清除标志
rINTPND = 0x1<<31; //再次清A/D中断
rADCTSC =0xd3; //设置等待光标按下中断模式,为下一次触笔的落下做准备
//01101 0011--// XP_PU, XP_Dis, XM_Dis, YP_Dis, YM_En.
num++;
}
else
num=3;
}
以上是A/D中断代码,驱动过程为,先在主程序中设置为等待中断模式,先进行触摸屏较准,即在屏上取三个点进行较准算法(取以上三点时须用笔抬起中断。而后边的测试目的为做一个写字板,但遇到一个怪问题是右边的屏正常而左边屏不能显示出连续笔划只能出现一个个的点,好像又是在检查笔抬起中断,但不应该再有这种现像才对啊?难道触摸屏左右两边会不同吗?(屏为MICRO2440所配之统宝3.5寸屏).具体代码见附件,有兴趣的朋友帮忙看看,诚求解答或做过类似驱动的源代码,TKS!!! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|