日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]多功能采集顯示平臺的人機交互采用的觸屏方案。觸屏功能主要是依賴電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復合薄膜,它以一層玻璃或硬塑料平板作為基層,表面涂有一層透明氧化

多功能采集顯示平臺的人機交互采用的觸屏方案。

觸屏功能主要是依賴電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復合薄膜,它以一層玻璃或硬塑料平板作為基層,表面涂有一層透明氧化金屬(透明的導電電阻)導電層,上面再蓋有一層外表面硬化處理、光滑防擦的塑料層、它的內(nèi)表面也涂有一層涂層、在他們之間有許多細小的(小于1/1000英寸)的透明隔離點把兩層導電層隔開絕緣。當手指觸摸屏幕時,兩層導電層在觸摸點位置就有了接觸,電阻發(fā)生變化,在X和Y兩個方向上產(chǎn)生信號,然后送觸摸屏控制器。控制器偵測到這一接觸并計算出(X,Y)的位置,再根據(jù)獲得的位置模擬鼠標的方式運作。這就是電阻技術(shù)觸摸屏的最基本的原理。

電阻觸摸屏的優(yōu)點:精度高、價格便宜、抗干擾能力強、穩(wěn)定性好。

電阻觸摸屏的缺點:容易被劃傷、透光性不太好、不支持多點觸摸。

多功能采集顯示平臺采用了觸摸屏控制芯片為XPT2046。XPT2046是一款4導線制觸摸屏控制器,內(nèi)含12位分辨率125KHz轉(zhuǎn)換速率逐步逼近型A/D轉(zhuǎn)換器。XPT2046支持從1.5V到5.25V的低電壓I/O接口。XPT2046能通過執(zhí)行兩次A/D轉(zhuǎn)換查出被按的屏幕位置,除此之外,還可以測量加在觸摸屏上的壓力。

硬件設計方面,多功能采集顯示平臺采用SPI的方式讀取XPT2046所存儲的XY的邏輯電壓值,同時采用了外部中斷的方式響應電阻觸摸屏的點擊事件。SPI接口使用片上資源的SPI2,占用PB13~15,片選信號線占用IO口PB12,觸摸響應信號線占用PG7,使用外部中斷模式,并且中斷級別高于顯示刷新定時中斷。


軟件設計方面有以下3點

第一,初始化XPT2046芯片,初始化SPI功能,并設置外部中斷事件,同時使能XPT2046芯片和IO內(nèi)部時鐘。

第二,電阻觸摸屏的點擊中斷事件,編寫中斷服務函數(shù),進行對點擊的位置的獲取,并且根據(jù)獲取的位置進行區(qū)域判定,經(jīng)行相應的操作。

第三,對于電阻觸摸屏的特性,點擊電阻觸摸屏后驅(qū)動芯片可以產(chǎn)生一個中斷信號提示觸摸動作,同時在寄存器存放這X和Y軸兩個邏輯電壓值,這兩個邏輯電壓值的精度是12位的,與TFTLCD的物理坐標值(320*240)是有一定相關(guān)性的,但是便于程序的編寫,我們需要使得邏輯電壓值和物理坐標值相同。所以編寫了電阻觸摸屏的校正程序,校正的算法是改進的五點校正法


XPT2046觸摸屏初始化代碼如下:


voidTouch_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

NVIC_InitTypeDefNVIC_InitStructure;

EXTI_InitTypeDefEXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關(guān)閉jtag,使能SWD,可以用SWD模式調(diào)試

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_Init(GPIOG,&GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource7);//設置管較為外部中斷管腳

EXTI_InitStructure.EXTI_Line=EXTI_Line7;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//為中斷請求

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//Falling下降沿Rising上升

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStructure);

EXTI_ClearITPendingBit(EXTI_Line7);//清除線路掛起位

/*EnabletheEXTI4Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

SPI2_Init();

CSPin_init();

}



讀取XY坐標函數(shù):


u16ADS_Read(u8CMD)

{

u16Num=0,temp;

TCS_LOW;

SPI2_ReadWriteByte(CMD);

delay_us(6);

temp=SPI2_ReadWriteByte(0x00);

Num=temp<<8;

delay_us(1);

temp=SPI2_ReadWriteByte(0x00);

Num|=temp;

Num>>=4;

TCS_HIGH;

return(Num);

}

u16Read_XY(u8CMD)

{

u16i,j;

u16buf[10];

u16sum=0;

u16temp;

for(i=0;i<10;i++)buf[i]=ADS_Read(CMD);

for(i=0;i<9;i++)

{

for(j=i+1;j<10;j++)

{

if(buf[i]>buf[j])

{

temp=buf[i];

buf[i]=buf[j];

buf[j]=temp;

}

}

}

for(i=3;i<7;i++)sum+=buf[i];

temp=sum/(4);

returntemp;

}

u16Read_X(void)

{

u16tempx;

tempx=(Read_XY(CMD_RDX)-XLC)/(KX)+XC;

returntempx;

}

u16Read_Y(void)

{

u16tempy;

tempy=(Read_XY(CMD_RDY)-YLC)/(KY)+YC;

returntempy;

}


這里的KX KYXLC YLC XC YC 都是用于校正電阻屏的系數(shù),缺省值為1.00。


電阻屏的校正可以使用5點矯正法,詳情請參考:http://blog.csdn.net/devintt/article/details/47022761


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉