在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            s3c2440觸摸屏測(cè)試

            作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
            * 文件名:main.c
            * 功能:測(cè)試TFT屏的驅(qū)動(dòng)函數(shù)
            * 作者:jianqi
            * 版本:v1.0

            #include"2440addr.h" //包含2440相關(guān)寄存器的設(shè)置
            #include"TFT.h"
            #include"Touch.h"
            #include"MMU.h"
            #include"UART.h"

            volatile int A,B,C,D,E,F,K; //校正參數(shù)

            int flagTS=0; //觸摸屏轉(zhuǎn)換標(biāo)志

            int xdata,ydata; //觸摸屏A/D轉(zhuǎn)換數(shù)據(jù)

            本文引用地址:http://www.biyoush.com/article/201611/318922.htm

            * 名稱(chēng):Touch_Int

            * 功能:觸摸屏中斷程序,讀取A/D轉(zhuǎn)換的值
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void __irq Touch_Int(void) //中斷函數(shù)
            {
            rINTSUBMSK |= ((U32)0x1<<9); //關(guān)閉中斷服務(wù)
            if (rADCUPDN&(U32)0x01) //觸筆down
            {
            rADCUPDN=0;//清除標(biāo)志位
            Send_String("down"); //打印信息(調(diào)試用)
            rADCTSC = (1<<3)|(1<<2); //上拉無(wú)效,自動(dòng)XY坐標(biāo)轉(zhuǎn)換模式
            rADCCON|=0x1; //開(kāi)始A/D轉(zhuǎn)換
            while(rADCCON&0x1); //等待AD轉(zhuǎn)換開(kāi)始
            while(!(rADCCON&(1<<15))); //等待AD轉(zhuǎn)換結(jié)束
            xdata=(rADCDAT0&0x3ff); //保存A/D轉(zhuǎn)換的x位置
            ydata=(rADCDAT1&0x3ff); //保存A/D轉(zhuǎn)換的y位置
            flagTS=0;
            rADCTSC=0xd3|(1<<8); //再次設(shè)置等待中斷模式,目的判斷觸筆up
            }
            if((rADCUPDN>>1)&(U32)0x01) //觸筆up
            {
            rADCUPDN=0; //清除標(biāo)志位
            Send_String("up"); //打印信息(調(diào)試用)
            flagTS=1;//一次接觸完畢
            rADCTSC=0xd3; //設(shè)置觸摸屏為等待中斷模式
            }
            rSRCPND|=(U32)0x1<<31; //清中斷標(biāo)志
            rSUBSRCPND|=(U32)0x01<<9;
            rINTPND|=(U32)0x1<<31;
            rINTSUBMSK&=~((U32)0x1<<9);//打開(kāi)中斷服務(wù)
            }


            * 名稱(chēng):Delay
            * 功能:延時(shí)
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void Delay(void)
            {
            int i,j,k;
            for(i=0;i<20;i++)
            {
            for(j=0;j<100;j++)
            {
            for(k=0;k<1000;k++);
            }
            }
            }


            * 名稱(chēng):Calibration
            * 功能:觸摸屏校正
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void Calibration(void)
            {
            char i;
            int xt[3],yt[3];
            TFT_CLearScreen(0xFFFFFF);
            Draw_Cross(32,24,0xFF0000);
            Draw_Cross(160,216,0xFF0000);
            Draw_Cross(288,120,0xFF0000);

            //依次讀取三個(gè)采樣點(diǎn)的坐標(biāo)值
            for(i=0;i<3;i++)
            {
            while(flagTS==0)
            {
            Delay();
            }
            Send_String("Over");
            xt[i]=xdata;
            yt[i]=ydata;
            flagTS=0;
            }

            //計(jì)算參數(shù)
            K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
            A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
            B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
            C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt[0]*160);
            D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
            E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
            F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt[0]*216);
            }



            * 名稱(chēng):Touch_Screen_Init
            * 功能:觸摸屏中斷初始化
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void Touch_Screen_Init(void)
            {
            rADCDLY=50000; //設(shè)置延時(shí)
            rADCCON=(1<<14)|(20<<6); //設(shè)置A/D預(yù)分頻
            rADCTSC=0xd3; //設(shè)置等待中斷模式
            rSUBSRCPND|=(1<<9);
            rSRCPND|=(1<<31);
            rINTPND|=(1<<31);
            rINTSUBMSK&=~(1<<9);
            rINTMSK&=~(1<<31); //打開(kāi)中斷屏蔽
            }

            * 名稱(chēng):Clk_Set
            * 功能:關(guān)于系統(tǒng)時(shí)鐘的初始化
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void Clk_Set(void)
            {
            int count;
            rUPLLCON=(56<<12)|(2<<4)|2; //UCLK為48MHZ
            for(count=0;count<10;count++)
            {
            ;
            }
            rMPLLCON=(92<<12)|(1<<4)|1; //FCLK為400MHZ
            rCLKDIVN=(0<<3)|(2<<1)|1; //HCLK位100MHZ,PCLK為50MHZ
            rCAMDIVN=(0<<9); //PCLK=HCLK/4
            }


            * 名稱(chēng):Main
            * 功能:測(cè)試TFT觸摸屏幕
            * 入口參數(shù):無(wú)
            * 出口參數(shù):無(wú)

            void Main(void)
            {
            int x,y;
            MMU_Init(); //MMU初始化
            UART0_init();//串口初始化
            TFT_Power_Enable(1); //TFT電源管理使能
            TFT_Contraller_Init();//TFT初始化
            TFT_Video_ON(1); //打開(kāi)TFT
            pISR_ADC=(U32)Touch_Int; //注冊(cè)觸摸屏中斷函數(shù)
            Touch_Screen_Init(); //觸摸屏初始化
            Calibration(); //觸摸屏校正
            TFT_CLearScreen((0x00<<11) | (0x00<<5) | (0x1f));
            //Paint_Picture(0,0,480,272,TQ_LOGO_480272_2);
            while(1)
            {
            if(flagTS)
            {
            flagTS=0;
            Send_String("OK");
            x=(A*xdata+B*ydata+C)/K; //計(jì)算X軸坐標(biāo)
            y=(D*xdata+E*ydata+F)/K; //計(jì)算Y軸坐標(biāo)
            Draws_Quare(x,y,0x00); //在觸摸坐標(biāo)處繪制正方形
            }
            }
            }



            關(guān)鍵詞: s3c2440觸摸屏測(cè)

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉