新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TFT之AD畫線 --模擬示波器

        TFT之AD畫線 --模擬示波器

        作者: 時間:2016-11-26 來源:網絡 收藏
        //Author:"淚與汗的纏綿"

        //Data:2011-11月

        本文引用地址:http://www.104case.com/article/201611/321620.htm

        //功能:DA驅動程序,TFT函數的配置

        #include "yf_tft.h"
        u8 cnt;
        ADC_InitTypeDef ADC_InitStructure;
        voidADC_configuration(void);
        voidDAC_Configuration(void);
        int average_volt(void);
        void Delayms(u16 t);
        int main(void)
        {float AD_value;
        u16 DAC_data;int x,y;
        RCC_Configuration();
        ADC_configuration();
        DAC_Configuration();
        ili9320_Initializtion(); //端口引腳初始化
        ili9320_Delay(800000);
        ili9320_Clear(Blue);
        TFT_DrawLine(3,4,3,235,Black);
        TFT_DrawLine(4,4,4,235,Black);
        TFT_DrawLine(2,229,315,229,Black);
        TFT_DrawLine(2,230,315,230,Black);
        TFT_DrawLine(4,4,315,4,Red);
        Display_Grid(Black);
        LCD_showzifustr(100,100,"晶體管特性曲線",Black,Blue);
        while(1)
        {if(cnt>50)
        DAC_data=DAC_data+0x00f0;
        DAC_SetChannel2Data(DAC_Align_12b_L, DAC_data);//設置DAC通道1為12位且數據左對齊模式
        DAC_SoftwareTriggerCmd(DAC_Channel_2, ENABLE);//使能DAC通道1的軟件觸發方式,轉換一次
        DAC_SetChannel1Data(DAC_Align_12b_L, DAC_data);//設置DAC通道1為12位且數據左對齊模式
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);//使能DAC通道1的軟件觸發方式,轉換一次
        AD_value=average_volt();
        AD_value=AD_value/4095.0*3.3;
        AD_value=AD_value*1000.0;
        Display_variate(60,16,AD_value);
        x++;
        y=229-AD_value*227/4096;
        if(x>320)
        {
        x=0;
        ili9320_Clear(Blue);
        Display_Grid(Black);
        TFT_DrawLine(3,4,3,235,Black);
        TFT_DrawLine(4,4,4,235,Black);
        TFT_DrawLine(2,229,315,229,Black);
        TFT_DrawLine(2,230,315,230,Black);
        TFT_DrawLine(4,4,315,4,Red);
        }
        ili9320_SetPoint(x,y,Red);
        Delayms(1);
        }
        }
        void RCC_Configuration(void)
        {

        SystemInit () ;//很重要!!!!

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
        }
        ////////////AD的配置函數/////////////////////////////
        voidADC_configuration()
        {
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfChannel=1;//指定用于轉換的通道數
        ADC_Init(ADC1, &ADC_InitStructure);

        ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5);

        ADC_Cmd(ADC1, ENABLE);

        ADC_ResetCalibration(ADC1);

        while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC的校準寄存器被設置完畢

        ADC_StartCalibration(ADC1);

        while(ADC_GetCalibrationStatus(ADC1));

        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        }
        ////////////AD濾波函數/////////////////////////////
        int average_volt()
        {
        u16 sum=0,i,AD_value;
        for(i=0;i<10;i++)
        {
        AD_value=ADC_GetConversionValue(ADC1);
        sum=sum+AD_value;
        }
        return sum=sum/i;
        }
        void DAC_Configuration(void)
        {
        DAC_InitTypeDef DAC_InitStructure;

        DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software;//DAC觸發方式為軟件控制
        DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
        //不從DAC端口產生波形
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bits8_0; //8位DA波形生成模式
        DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Enable;
        //使能DAC輸出緩沖器
        //用上面參數初始化DAC通道1
        DAC_Init(DAC_Channel_1, &DAC_InitStructure);
        DAC_Cmd(DAC_Channel_1, ENABLE);//使能DAC通道1
        DAC_Init(DAC_Channel_2, &DAC_InitStructure);//用上面參數初始化DAC通道1
        DAC_Cmd(DAC_Channel_2, ENABLE);//使能DAC通道1
        }
        void Delayms(u16 t)// Delay Time about 1 ms;
        {
        u16 i;
        cnt++;
        do
        {
        for (i=0; i<500; i++);
        }
        while(t--);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 德清县| 龙陵县| 舞阳县| 曲周县| 仁怀市| 长武县| 阳谷县| 罗平县| 西城区| 莲花县| 新邵县| 阳春市| 九寨沟县| 姜堰市| 天台县| 柳林县| 辽阳县| 嘉义市| 墨脱县| 遂平县| 炎陵县| 朔州市| 曲靖市| 南陵县| 墨脱县| 东至县| 宁强县| 靖宇县| 海南省| 宁阳县| 祁连县| 安平县| 团风县| 滦平县| 新乡县| 沙洋县| 瑞丽市| 新晃| 秦安县| 廊坊市| 普洱|