📄 touch.c
字号:
/****************************************************
公司: 三扬科技
作者: SUNYUNGCO
日期: 2004年8月17日
****************************************************/
#include <string.h>
#include "..\inc\def.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\touch.h"
//触摸屏控制驱动
/***************************************
函数名称:AdTouchStart
功能描述:启动ADS7843
输入参数:AD_CH,控制转化字
控制字说明:参阅ADS7843文档
****************************************/
void AdTouchStart(unsigned char AD_CH)
{
unsigned char i,j;
j=AD_CH;
//端口功能配置
rPCONC=(rPCONC&0xcfffffff)|0x10000000; //GPC14配置为输出
rPUPC=rPUPC&0xbfff; //GPC14使能上拉
rPCONF=(rPCONF&0x0003ff) | 0x080400; //SIO功能端口配置,F5-O,F6-I,F7-I,F8,O
rPUPF=rPUPF&0x01f; //使能上拉 F5-F8
//端口功能配置
rPDATC=rPDATC&0xbfff; //片选有效 GPC14
rPDATF=rPDATF&0x0ff; //DCLK=0,F8=0
Delay1uS();
for(i=0;i<8;i++) //写8位控制字
{
rPDATF=(rPDATF&0x1df)|((j&0x80)>>2); //DIN 写控制位到端口 F5
rPDATF=rPDATF|0x100; //DCLK=1,上升沿发送锁存
Delay1uS();
rPDATF=rPDATF&0x0ff; //DCLK=0
j<<=1;
}
}
/***************************************
函数名称:AdTouchRead12
功能描述:读ADS7843的转化结果12位
输入参数:
返回值: 当前转化的结果
****************************************/
unsigned int AdTouchRead12(void)
{
unsigned char i;
unsigned int Busy=0;
unsigned int RecvByte=0;
unsigned int k=0;
while(!Busy) //BUSY,0:转换中 1:转换完成,F6
{
Busy=rPDATF&0x040;
}
rPDATF=rPDATF&0x1df; //DIN=0, F5
rPDATF=rPDATF&0x17f; //DOUT=0, F7
rPDATF=rPDATF|0x100; //DCLK=1, F8
Delay1uS();
//rPDATF=rPDATF&0x0ff; //DCLK=0
for(i=0;i<12;i++) //read 12 bit
{
rPDATF=rPDATF|0x100; //DCLK=1,下降沿读取
Delay1uS();
rPDATF=rPDATF&0x0ff; //DCLK=0
k=rPDATF&0x0080; //取端口数据
k=k>>7; //移到最低位,为0或1
RecvByte=RecvByte|k;
RecvByte=RecvByte<<1; //左移1位
}
for(i=0;i<4;i++) //4 NULL DCLK
{
rPDATF=rPDATF|0x100; //DCLK=1
Delay1uS();
rPDATF=rPDATF&0x0ff; //DCLK=0
Delay1uS();
}
RecvByte=RecvByte>>1; //左移1位
RecvByte=RecvByte&0x0fff; //取低12位有效数据
rPDATC=rPDATC|0x4000; //片选无效,GPC14=1
return(RecvByte);
}
/***************************************
函数名称:AdTouchRead8
功能描述:读ADS7843的转化结果8位
输入参数:
返回值: 当前转化的结果
****************************************/
unsigned int AdTouchRead8(void)
{
unsigned char i;
unsigned int Busy=0;
unsigned int RecvByte=0;
unsigned int k=0;
while(!Busy) //BUSY,0:转换中 1:转换完成,F6
{
Busy=rPDATF&0x040;
}
rPDATF=rPDATF&0x1df; //DIN=0
rPDATF=rPDATF&0x17f; //DOUT=0
rPDATF=rPDATF|0x100; //DCLK=1
Delay1uS();
//rPDATF=rPDATF&0x0ff; //DCLK=0
for(i=0;i<8;i++) //read 8 bit
{
rPDATF=rPDATF|0x100; //DCLK=1,下降沿读取
Delay1uS();
rPDATF=rPDATF&0x0ff; //DCLK=0
k=rPDATF&0x0080; //取端口数据
k=k>>7; //移到最低位,为0或1
RecvByte=RecvByte|k;
RecvByte=RecvByte<<1; //左移1位
}
RecvByte=RecvByte>>1; //左移1位
RecvByte=RecvByte&0x0ff; //取低8位有效数据
rPDATC=rPDATC|0x4000; //片选无效,GPC14=1
return(RecvByte);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -