新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于MSP430F249的ADC7864觸摸程序函數

        基于MSP430F249的ADC7864觸摸程序函數

        作者: 時間:2016-11-22 來源:網絡 收藏
        這個例子是我參照51單片機的例子寫的,測試過,能正常讀取數據,沒轉換為坐標
        使用的是中斷法,下降沿促發
        //文件名:tourch_screen.h
        //基于ADS7846的觸摸屏程序
        //宏定義:對管腳的定義
        //
        #ifndef _touch_screen_h_
        #define _touch_screen_h_
        extern unsigned int x_zb,y_zb; //測的x,y坐標
        //函數:Touch_Port_Ini()
        //描述:初始化觸摸控制端口
        //返回值:無
        void Touch_Port_Ini(); //初始化端口
        #endif
        //描述:管腳的宏定義
        //
        //
        #ifdef _touch_
        #include<msp430x24x.h>
        #define tch_out P2OUT
        #define tch_in P2IN
        #define tch_dir P2DIR //觸摸控制端口
        #define tch_ie P2IE //用來產生中斷
        #define tch_ies P2IES
        #define tch_ifg P2IFG
        #define DCLK BIT0
        #define DCLKSET() tch_out|=DCLK
        #define DCLKCLR() tch_out&=~DCLK
        #define DCS BIT1
        #define CSSET() tch_out|=DCS
        #define CSCLR() tch_out&=~DCS
        #define SOUT BIT3
        #define DOUT tch_in&SOUT //數據接受腳
        #define DIN BIT2
        #define DINSET() tch_out|=DIN
        #define DINCLR() tch_out&=~DIN
        #define DINIT BIT5
        #define SBUSY BIT4
        #define DBUSY tch_in&SBUSY //忙檢測
        #endif
        //文件名:tourch_screen.c
        //基于ADS7846的觸摸屏程序
        //
        //
        #define _touch_
        #include"touch_screen.h"
        unsigned int x_zb=0,y_zb=0;
        //函數:Touch_Port_Ini()
        //描述:初始化觸摸控制端口
        //返回值:無
        void Touch_Port_Ini() //觸摸端口初始化
        {
        tch_dir|=DCLK|DCS|DIN; //設置端口方向
        tch_dir&=~SOUT;
        tch_ie|=DINIT; //設置允許中斷
        tch_ies|=DINIT; //設置下降沿觸發
        tch_ifg=0; //清中斷標志
        _EINT(); //開總中斷
        }
        //函數:Spi_Start()
        //描述:和ADC7846數據傳輸開始
        //返回值:無
        void Spi_Start() //spi開始
        {
        CSSET();
        DCLKCLR();
        DINCLR();
        CSCLR();
        }
        //函數:Write_7846()
        //描述:對7843寫數據
        //返回值:無
        void Write_7846(unsigned char num) //spi寫數據
        {
        unsigned char i;
        DCLKCLR();
        for(i=0;i<8;i++)
        {
        if(num&0x80)
        {
        DINSET();
        }
        else
        {
        DINCLR();
        }
        DCLKCLR();_NOP();_NOP();_NOP();_NOP();
        DCLKSET();_NOP();_NOP();_NOP();_NOP();
        num<<=1;
        }
        }
        //函數:Read12_7846()
        //描述:讀7843的12位數據
        //返回值:無
        unsigned int Read12_7846() // SPI讀取數據
        {
        unsigned char i;
        unsigned int data;
        DCLKCLR();
        for(i=0;i<12;i++)
        {
        data<<=1;
        DCLKSET();_NOP();_NOP();_NOP();_NOP();
        DCLKCLR();_NOP();_NOP();_NOP();_NOP();
        if(DOUT) data++;
        }
        return data;
        }
        //函數:Read8_7846()
        //描述:讀7843的8為數據
        //返回值:無
        unsigned char Read8_7846() // SPI讀取數據
        {
        unsigned char i;
        unsigned char data;
        DCLKCLR();
        for(i=0;i<8;i++)
        {
        data<<=1;
        DCLKSET();_NOP();_NOP();_NOP();_NOP();
        DCLKCLR();_NOP();_NOP();_NOP();_NOP();
        if(DOUT) data++;
        }
        return data;
        }
        //函數:delay_ADC7846()
        //描述:延時函數
        //返回值:無
        void delay_ADC7846(unsigned int i)
        {
        unsigned char j;
        for(;i>0;i--)
        for(j=100;j>0;j--);
        }
        //12精度:讀y坐標寫入0x90,x坐標寫入0xd0
        //8位精度:讀y坐標寫入0x98,x坐標寫入0xd8
        //
        #pragma vector=PORT2_VECTOR
        __interrupt void touch_int()
        {
        unsigned int x,y;
        delay_ADC7846(500);
        Spi_Start();
        delay_ADC7846(1);
        Write_7846(0x98);
        delay_ADC7846(1);
        y=Read8_7846();
        Write_7846(0xD8);
        delay_ADC7846(1);
        x=Read8_7846();
        CSSET();
        delay_ADC7846(10000);
        if(x!=0&&y!=4095) //防止在結束時再讀取錯誤數據
        {
        x_zb=x;
        y_zb=y;
        }
        tch_ifg=0; //清中斷標志位
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 德江县| 诏安县| 佳木斯市| 凌海市| 吉林省| 都江堰市| 九龙坡区| 天气| 金川县| 银川市| 如东县| 霍邱县| 星子县| 佛坪县| 花莲县| 教育| 拉孜县| 桂阳县| 大足县| 紫金县| 定远县| 梨树县| 邮箱| 拜城县| 中山市| 福清市| 龙胜| 宜章县| 宝坻区| 邛崃市| 霍山县| 彭水| 定南县| 花莲县| 金门县| 新蔡县| 姚安县| 隆子县| 青河县| 德惠市| 永和县|