#include <stm32f10x_lib.h>
#include"string.h"
#include"stdio.h"float up
#include"math.h"
#include"configuration.h"
#include"lcd.h"
#include"delay.h"
u16 voltage[240];
int main(void)
{
  u16 i,adcx;
  float temp;
  u16 x=0;
  u16 y;
 
  u16 X_VALUE;
  u16 X_LAST_VALUE;
  u16 Y_VALUE;
  u16 Y_LAST_VALUE;
  RCC_Configuration();
  GPIO_Configuration();
  ADC1_Configuration();
 
  lcd_init();               
  lcd_clear(White);
  delay_ms(1000);
 
  while(1)
  {
 
    for(i=0;i<240;i++)       
      {
        voltage[i]=ADC_GetConversionValue(ADC1);
        delay_ms(100);
       
      }
     
      for(i=0;i<240;i++)
      {
          adcx=voltage[i];
          temp=(float)adcx*(3.3/4096);
           
          Y_LAST_VALUE=Y_VALUE;
          //y=220-temp*24;
          y=voltage[i]/12;
           
          Y_VALUE=y;
          //y=(y+Y_LAST_VALUE)/2;
          //y=y*2;
          //adcx=temp;
          //temp-=adcx;
          //temp*=1000;
           
          //Lcd_Clear(Blue);
          lcd_setpoint(x,y*20,Red);
          //Lcd_Point(x,)
          X_LAST_VALUE=X_VALUE;
          x++;
          X_VALUE=x;
          if(x>240)
          {
            x=0; 
            lcd_clear(White); 
             
            }
            if(Y_LAST_VALUE!=0&&x!=0&&X_LAST_VALUE!=240&&X_LAST_VALUE!=0)
            lcd_drawline(X_LAST_VALUE,Y_LAST_VALUE,x,y,Red);
           
            }
                       
        }
}
#include <stm32f10x_lib.h>
#include"configuration.h"
void RCC_Configuration(void)
{
  ErrorStatus        HSEStartUpStatus;                                      //定义外部高速晶体启动状态枚举变量
  RCC_DeInit();                                                              //复位RCC外部设备寄存器到默认值
  RCC_HSEConfig(RCC_HSE_ON);                                                //打开外部高速晶振
  HSEStartUpStatus=RCC_WaitForHSEStartUp();                                  //等待外部高速时钟准备好
  if(HSEStartUpStatus==SUCCESS)                                              //外部高速时钟已经准备好
  {
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
      FLASH_SetLatency(FLASH_Latency_2);
      RCC_HCLKConfig(RCC_SYSCLK_Div1);                                        //配置AHB(HCLK)时钟=SYSCLK
      RCC_PCLK2Config(RCC_HCLK_Div1);                                        //配置APB2(PCLK2)时钟=AHB时钟
      RCC_PCLK1Config(RCC_HCLK_Div2);                                        //配置APB1(PCLK1)时钟=AHB 1/2时钟
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);                    //配置PLL时钟=外部高速晶体时钟*9
      RCC_PLLCmd(ENABLE);                                                    //使能PLL时钟
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)                        //等待PLL时钟就绪
      {}
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                              //配置系统时钟=PLL时钟
      while(RCC_GetSYSCLKSource()!=0x08)                                      //检查PLL时钟是否作为系统时钟
      {}
  }
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE|RCC_APB2Periph_ADC1,ENABLE);                               
}
//*****************************GPIO_Configuration*************************************************
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef      GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                       
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;            //控制位
    GPIO_Init(GPIOE,&GPIO_InitStructure);                 
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;               
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOD,&GPIO_InitStructure);                    // 数据传输位
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;                //模拟输入
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure); 
}
//*****************************ADC1_Configuration*************************************************
void ADC1_Configuration(void)
{
   
    ADC_InitTypeDef        ADC_InitStructure;
    ADC_DeInit(ADC1);                                                  //将外设 ADC1 的全部寄存器重设为缺省值
   
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                    //ADC工作模式:A
DC1和ADC2工作在独立模式
    ADC_InitStructure.ADC_ScanConvMode =DISABLE;                        //模数转换工作在单通道模式
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                    //模数转换工作在连续转换模式
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    //外部触发注入转换关闭
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                //ADC数据右对齐
    ADC_InitStructure.ADC_NbrOfChannel = 1;                                //顺序进行规则转换的ADC通道的数目
    ADC_Init(ADC1, &ADC_InitStructure);                                    //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);                                  //ADC时钟经过PCLK2,8分频得到,为9MHZ

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。