女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 消費電子 > 消費電子
[導讀] 觸控屏已經(jīng)不是什么新鮮的東西,現(xiàn)在的電子產(chǎn)品基本上都帶有一個大大的彩色液晶,加上一個輕觸式的觸控屏。使用起來非常方便,可以完全取代以往那種固定式的按鍵。下面就介紹一種觸控屏的驅(qū)動電路,我也是一個小時前

 觸控屏已經(jīng)不是什么新鮮的東西,現(xiàn)在的電子產(chǎn)品基本上都帶有一個大大的彩色液晶,加上一個輕觸式的觸控屏。使用起來非常方便,可以完全取代以往那種固定式的按鍵。

下面就介紹一種觸控屏的驅(qū)動電路,我也是一個小時前才把這個小板子做出來,測試成功后馬上發(fā)表這篇日志,新鮮熱辣的哦!

首先,介紹以下觸控屏幕的構(gòu)造,它是由一塊觸控屏幕和一塊液晶顯示屏幕粘合在一起的。液晶顯示屏幕按色彩、材料、成像原理等多種方式分類,種類繁多,這里對液晶屏幕不做詳細介紹,本文圖片中所使用的是16Bit半透明反射式TFT液晶點陣顯示屏。而觸摸屏幕主要分為兩大類,分別是電容式和電阻式。

電容式觸控屏利用人體的電流感應進行工作,優(yōu)點是使用壽命長,觸摸時不需用力,面板堅硬耐磨;缺點是觸摸精度低,必須使用特定的介質(zhì)觸控(如人體皮膚),受溫度濕度影響很大,外界有較強磁場電場時,觸控屏會失靈,簡單來說就是抗干擾性較差。

電阻式觸控屏是利用按壓時縱軸和橫軸的電阻值來定位的,優(yōu)點是抗干擾性好,觸摸精度高,可以用任何物體來觸摸,缺點是表面是塑料薄膜,易磨損,觸摸是需要稍加一點力度按壓。本文中使用的就是電阻式觸控屏。

接下來介紹一些幾個觸控屏控制IC:ADS7846、ADS7843和TSC2046,它們是最常見的四線觸摸屏控制芯片,均為BURR-BROWN(已經(jīng)被TI收購,找封裝庫的時候去TI那里找)公司的產(chǎn)品,三者引腳相互兼容,但片內(nèi)的功能是有區(qū)別的,例如7846內(nèi)集成溫度傳感、可檢測觸摸壓力等功能,具體請參考DataSheet。TSC2046是新出的控制芯片,由于其國產(chǎn)片價錢便宜(零售約1元/片),廣泛應用于國產(chǎn)的具有觸摸屏幕的MP3、手機等電子產(chǎn)品。

我這次制作采用的是ADS7846。

ADS7846引腳圖:

引腳功能介紹:

DCLK:時鐘輸入端口

CS:片選信號

DIN:串行數(shù)據(jù)輸入端,CS為低時數(shù)據(jù)在DCLK上升沿鎖存

BUSY:忙時信號輸出,CS為高時其為高阻態(tài)

DOUT:串行數(shù)據(jù)輸出端,CS為高時其為高阻態(tài)

PENIRQ:筆中斷(當屏幕被觸壓時,產(chǎn)生中斷信號)

Vref:參考電壓(一般直接接VCC)

Vbat:電源檢測輸入端(一般不使用)

AUX:備選輸入端(一般不使用)

X+、Y+、X-、Y- :四線觸控屏位置輸入端

程序思路是參考一位網(wǎng)友的,我把它移植過來了。

工作原理:每次按下觸摸屏,ADS7846的PEN腳會拉低,觸發(fā)STM32中斷,然后在中斷服務程序里面處理要執(zhí)行功能。畫圖的原理是通過在中斷里對X、Y坐標連續(xù)采樣十次,若不夠十次,不做任何操作。得到十次數(shù)據(jù)后,進行排序,最后取中間三次的數(shù)據(jù)計算均值,便得到需要的X、Y坐標。得到觸屏的點以后,接著就是在屏幕上對應的這個點上畫點。

下面是電路的原理圖:

用感光法做的板子(未裁剪):

裁剪出中間那部分后和一元硬幣小一點,右側(cè)為硫酸紙打印出來的負片。

寫了一個可選畫筆和背景顏色的畫板:

最后貼上STM32的觸摸屏驅(qū)動程序(已添加畫板功能),用C語言寫的,很容易移植,有興趣的同學可以將它移到51或其他單片機上面跑一下。完整代碼從這里下載http://dl.21ic.com/download/chumo1-rar-ic-106798.html

 

#include"hx8347.h" //自己編寫的液晶屏頭文件,此頭文件只定義了一些基本變量,

不涉及驅(qū)動相關(guān)函數(shù)

//定義引腳高低電平

#define ADS_DCLK_H() GPIO_SetBits(GPIOB,GPIO_Pin_6)//ADS7846時鐘信號

#define ADS_DCLK_L() GPIO_ResetBits(GPIOB,GPIO_Pin_6)

#define ADS_CS_H() GPIO_SetBits(GPIOB,GPIO_Pin_7)//ADS7846片選信號

#define ADS_CS_L() GPIO_ResetBits(GPIOB,GPIO_Pin_7)

#define ADS_DIN_H() GPIO_SetBits(GPIOB,GPIO_Pin_8)

#define ADS_DIN_L() GPIO_ResetBits(GPIOB,GPIO_Pin_8)

#define ADS_DOUT GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)

#define ADS_PEN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)////ADS7846響應信號

//初始化I/O口

void ADS_GPIO_Config()

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void ADS_Spi_Start()//初始信號

{

ADS_CS_H();

ADS_DCLK_H();

ADS_DIN_H();

}

void ADS_Write_Byte(u8 num)

{

u8 count=0;

ADS_DCLK_L();

for(count=0;count<8;count++)

{

if(num&0x80)

ADS_DIN_H();

else

ADS_DIN_L();

num<<=1;

ADS_DCLK_L();

ADS_DCLK_H(); //上升沿有效

}

}

u16 ADS_Readdata()

{

u16 num;

u8 count;

for(count=0;count<12;count++)

{

num<<=1;

ADS_DCLK_H();

ADS_DCLK_L();

if(ADS_DOUT)

num++;

}

return num;

}

#define CMD_RDX 0X90 //0B10010000即用差分方式讀X坐標

#define CMD_RDY 0XD0 //0B11010000即用差分方式讀Y坐標

u16 X=0,Y=0;//當前觸控坐標

u8 Readonce()

{

ADS_Spi_Start();

ADS_CS_L();

ADS_Write_Byte(CMD_RDX);

ADS_DCLK_H();

delay_us(3);

ADS_DCLK_L();

delay_us(3);

Y=ADS_Readdata();

ADS_Write_Byte(CMD_RDY);

ADS_DCLK_H();

delay_us(1);

ADS_DCLK_L();

delay_us(1);

X=ADS_Readdata();

ADS_CS_H();

if(X>100&&Y>100&&X<3800&&Y<3800)return 1;//讀取成功(范圍限制)

else return 0;//讀取失敗

}

void drawbigpoint(u8 x,u16 y,u16 col)

{

if(x>220&&y<9)

{

LCD_DrawBlock(0,0,239,319,0x0000);//清屏

LCD_write_english_string(210,0,"CLR",0xFFE0,0x001F);//清屏按鍵區(qū)域

}

else

{

LCD_Set_Point(x,y,col);//中心點

LCD_Set_Point((x+1),y,col);

LCD_Set_Point(x,(y+1),col);

LCD_Set_Point((x+1),(y+1),col);

}

}

//讀取ADS7846(畫線)

void Read_Ads7846(void)

{

u8 t,t1,count=0;

u16 databuffer[2][10]={{5,7,9,3,2,6,4,0,3,1},{5,7,9,3,2,6,4,0,3,1}};

//數(shù)據(jù)組

u16 temp=0;

//循環(huán)讀數(shù)10次

do

{

t=ADS_PEN; //觸摸屏被按下,PEN為L

if(Readonce()) //讀數(shù)成功

{

databuffer[0][count]=X;

databuffer[1][count]=Y;

count++;

}

}

while(!t&&count<10);

if(count==10)//讀10次數(shù)據(jù)有效

{

//X升序排列

do

{

t1=0;

for(t=0;t

{

if(databuffer[0][t]>databuffer[0][t+1])//升序排列

{

temp=databuffer[0][t+1];

databuffer[0][t+1]=databuffer[0][t];

databuffer[0][t]=temp;

t1=1;

}

}

}

while(t1);

do//Y升序排列

{

t1=0;

for(t=0;t

{

if(databuffer[1][t]>databuffer[1][t+1])//升序排列

{

temp=databuffer[1][t+1];

databuffer[1][t+1]=databuffer[1][t];

databuffer[1][t]=temp;

t1=1;

}

}

}

while(t1);

X=(databuffer[0][3]+databuffer[0][4]+databuffer[0][5])/3;

Y=(databuffer[1][3]+databuffer[1][4]+databuffer[1][5])/3;

//根據(jù)觸摸屏的具體參數(shù)設置

if(X<=4000&&Y<=4000)

{

if(X>=240)

X-=240;

else X=0;

if(Y>=320)

Y-=320;

else Y=0;

drawbigpoint(X/15,Y/11+10,BLUE);

}

}

}

void EXTI1_IRQHandler(void)

{

u8 t=0;

//消除抖動

do

{

delay_us(10);

t=ADS_PEN;

Read_Ads7846();

}

while(t==0);

EXTI_ClearITPendingBit(EXTI_Line1);

}

//中斷優(yōu)先級管理/開啟

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

//存儲器映射

#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//優(yōu)先級分到第0組 總共5組

NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; //使用外部中斷1

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//階級1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

//外部中斷初始化

void EXTI_Configuration(void)//配置外部中斷

{

EXTI_InitTypeDef EXTI_InitStructure; //聲明中斷庫函數(shù)結(jié)構(gòu)體

EXTI_InitStructure.EXTI_Line = EXTI_Line1; //外部中斷通道1

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中斷模式

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);

//設置外部中斷通道1到PB10

}

//END

 

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

中國深圳 – TITAN Haptics 泰坦觸覺是一家專注于先進觸覺技術(shù)的公司,現(xiàn)已在中國正式推出 TacHammer Carlton 觸覺開發(fā)套件。該套件專為快速原型設計和調(diào)試而設計,開發(fā)者可借助它快速構(gòu)建并評估高保...

關(guān)鍵字: XR設備 觸控屏 消費電子

在當今電子系統(tǒng)設計的復雜領(lǐng)域中,系統(tǒng)架構(gòu)的選擇宛如基石,深刻影響著電源和控制電路的設計,進而全方位塑造系統(tǒng)性能。不同架構(gòu)在面對從交流電源到負載的能量流動控制任務時,因隔離柵位置、信號處理方式等差異,展現(xiàn)出截然不同的特性。...

關(guān)鍵字: 電子系統(tǒng) 控制電路 架構(gòu)

以下內(nèi)容中,小編將對穩(wěn)壓器的相關(guān)內(nèi)容進行著重介紹和闡述,希望本文能幫您增進對穩(wěn)壓器的了解,和小編一起來看看吧。

關(guān)鍵字: 穩(wěn)壓器 限流接線法 控制電路

在當今電子設備多樣化和高性能化的發(fā)展趨勢下,開關(guān)穩(wěn)壓電源作為關(guān)鍵的供電部件,其性能優(yōu)劣直接影響著設備的整體表現(xiàn)。雙環(huán)反激開關(guān)穩(wěn)壓電源憑借獨特的電路拓撲和工作特性,在中小功率應用領(lǐng)域占據(jù)重要地位。傳統(tǒng)控制電路在面對復雜工況...

關(guān)鍵字: 穩(wěn)壓電源 雙環(huán)反激 控制電路

在當今電子系統(tǒng)設計的復雜領(lǐng)域中,系統(tǒng)架構(gòu)的選擇宛如基石,深刻影響著電源和控制電路的設計,進而全方位塑造系統(tǒng)性能。不同架構(gòu)在面對從交流電源到負載的能量流動控制任務時,因隔離柵位置、信號處理方式等差異,展現(xiàn)出截然不同的特性。

關(guān)鍵字: 電子系統(tǒng) 系統(tǒng)架構(gòu) 控制電路

?主回路和控制回路分開看?:先看主回路,后看控制回路。主回路動作原理相對簡單,可以快速把握整個電路的功能,然后再看控制回路。?

關(guān)鍵字: 控制電路

在當代電氣系統(tǒng)中,高壓強電電路與低壓控制電路常常需要協(xié)同工作,實現(xiàn)高效的能量轉(zhuǎn)換與精確的系統(tǒng)控制。然而,這種高低壓并存的架構(gòu)也帶來了潛在的安全風險。一旦高低壓電路之間發(fā)生電氣連接,數(shù)千伏的高壓電流可能瞬間涌入低壓控制端,...

關(guān)鍵字: 電氣隔離 控制電路 電氣系統(tǒng)

PSRAM,作為一種融合了動態(tài)隨機存取存儲器(DRAM)高密度特性與靜態(tài)隨機存取存儲器(SRAM)易用性的存儲技術(shù),其重要性不言而喻。從結(jié)構(gòu)上看,PSRAM 內(nèi)部主要由 DRAM 存儲單元負責數(shù)據(jù)存儲,SRAM 接口電路...

關(guān)鍵字: 存儲器 接口電路 控制電路

但是,請注意,當從axi4流廣播器輸出時,它必須連接到axi4流數(shù)據(jù)FIFO;否則,不輸出任何數(shù)據(jù)。這主要是因為后續(xù)IP需要等待所有接口斷言tvalid,而S00接口不是這種情況。欲了解更多詳細信息,請參閱賽靈思的官方解...

關(guān)鍵字: 過濾器 GPIO PYNQ-Z2板

介紹了運用DSP作為主控制器件的電梯門機伺服控制系統(tǒng)的設計方案,該方案運用開關(guān)電源產(chǎn)生直流穩(wěn)壓電源,運用DSP作為主控制器,運用IPM模塊作為逆變器橋,產(chǎn)生變頻三相交流電源,帶動電機運轉(zhuǎn),驅(qū)動門機系統(tǒng)運行。實驗結(jié)果驗證了...

關(guān)鍵字: 電梯門機 伺服控制 開關(guān)電源 主回路 控制電路
關(guān)閉