#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "dma.h"
#include"adc.h"
#include"tim.h"
#include"lcd.h"
#include"key.h"
static uint32_t ADC_Value[250];
uint32_t ADC12_Value[2];
uint16_t ADC1_avr,ADC2_avr;
u8 temp=0;
void ADC_Result(void)
{
u16 i;
//while(!DMA_GetFlagStatus(DMA1_FLAG_TC1)); //DMA传输完成标志
for(i=0;i<20;i++)
{
ADC12_Value[0]+=(ADC_Value&0x00000fff);
ADC12_Value[1]+=((ADC_Value&0xffff0000)/65536);
}
ADC1_avr=ADC12_Value[0]/i;
ADC2_avr=ADC12_Value[1]/i;
ADC12_Value[0]=0;//必须要把求和的值清零
ADC12_Value[1]=0;
//DMA_ClearFlag(DMA1_FLAG_TC1);
}
void Lcddisplay(void)
{
float ADC1_Result1, ADC2_Result2;
u8 s[10],s1[10];
LCD_Clear(WHITE);
  OINT_COLOR=RED;
ADC1_Result1=(float)ADC1_avr/4096*3.3;
ADC2_Result2=(float)ADC2_avr/4096*3.3;
sprintf((char*)s, "%.4f", ADC1_Result1);//浮点数转字符串
sprintf((char*)s1, "%.4f", ADC2_Result2);
LCD_ShowString(30,50,"ADC1_Result1:");
LCD_ShowString(130,50,s);
LCD_ShowString(30,70,"ADC2_Result2:");
LCD_ShowString(130,70,s1);
}
void chongdian(void) //充电函数
{
u8 k = 0; //注意数据类型
if(temp==0)
{
temp=1;
LED0=!LED0;
for(k=1;k<=10;k++)
{
  WM_zbi =719 + k*72; //50ms后压到了大约1.4A
delay_ms(5);
}
for(k=1;k<=80;k++)
{
  WM_zbi = 1439 + 72*k;
delay_ms(5);
if(k==80)
{
  WM_zbi = 7199;
delay_ms(50); //必须要加的延时,否则电压检测不准确
}
}
}
}
int main(void)
{
//static u8 flage1,flage2;
SystemInit();
delay_init(72);
uart_init(9600); //少了程序死在里面
LED_Init();
LCD_Init();
Key_Init();
TIM3_Init(0,7199,7199);
ADC1_GPIO_Config();
ADC1_Config((u32)&ADC1->DR,(u32)ADC_Value,20);
while(1)
{
if(KEY0==0)
{
delay_us(100);
if(KEY0==0)
break;
}
}
delay_ms(10);
  C0=0;
while(1)
{
chongdian();
ADC_Result();
Lcddisplay();
if(ADC1_avr>=1840)
{
//flage1=1;
//flage2=0;
  WM_zbi=7199;
}
}
}
这是main程序,但是下载到程序以后硬件是可以跑的 |