#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小时内删除。
发表评论