初级会员

- 积分
- 52
- 金钱
- 52
- 注册时间
- 2013-6-9
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-6-22 18:20:56
|
显示全部楼层
为什么用ADC1采集的电压在液晶上显示不准呢?比如我接入的是3.3V,只能显示3.17V的样子,而我接入的是0V,显示的是0.2V的样子。
请你们帮下。谢谢。
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
#include "timer.h"
//ADC 实验
//JTAG模式设置定义
#define JTAG_SWD_DISABLE 0X02
#define SWD_ENABLE 0X01
#define JTAG_SWD_ENABLE 0X00
void JTAG_Set(u8 mode)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
if(mode == JTAG_SWD_DISABLE)//2
{
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关闭JTAG-DP,关闭SW-DP
}
else if(mode == SWD_ENABLE)//1
{
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭JTAG-DP,启用SW-DP
}
else if(mode == JTAG_SWD_ENABLE)//0
{
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, DISABLE);//完全SWJ(JTAG-DP + SW-DP):复位状态
//库函数没有设置SWJ_CFG[2:0]=0b000值,采用任何设置参数,然后用“Disable”,可以实现“全开启模式”
}
else//本函数没有用到的值:SWJ_CFG[2:0]=0b001
{
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);//完全SWJ(JTAG-DP + SW-DP)但没有JNTRST
}
}
int main(void)
{
u16 led0pwmval=0;
u16 led0pwmzkb=0;
u16  B1pwmval=0;
u16  B1pwmzkb=0;
u8 t;
u16 adcx;
float temp;
KEY_Init(); //初始化与按键连接的硬件接口
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
LCD_Init();
Adc_Init(); //ADC初始化
TIM3_PWM_Init(7199,0);
JTAG_Set(2);
//POINT_COLOR=RED;//设置字体为红色
// LCD_ShowString(60,30,200,16,16,"dianyuan");
// LCD_ShowString(60,50,200,16,16,"ADC SHOW");
// LCD_ShowString(60,70,200,16,16,"ronglang");
// LCD_ShowString(60,90,200,16,16,"2013/6/10");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,110,200,16,16,"ADC_CH5_VAL:");
LCD_ShowString(60,130,200,16,16,"ADC_CH5_VOL:0.000V");
LCD_ShowString(60,150,200,16,16,"ADC_CH6_VAL:");
LCD_ShowString(60,170,200,16,16,"ADC_CH6_VOL:10.000V");
LCD_ShowString(60,190,200,16,16,"ADC_CH7_VAL:");
LCD_ShowString(60,210,200,16,16,"ADC_CH7_VOL:0.000V");
LCD_ShowString(60,230,200,16,16,"ADC_CH8_VAL:");
LCD_ShowString(60,250,200,16,16,"ADC_CH8_VOL:0.000V");
LCD_ShowString(60,270,200,16,16,"ADC_CH9_VAL:");
LCD_ShowString(60,290,200,16,16,"ADC_CH9_VOL:0.000V");
while(1)
{
u8 dir=1;
u8 dir1=1;
t=KEY_Scan(0);
adcx=Get_Adc_Average(ADC_Channel_10,10);
LCD_ShowxNum(156,110,adcx,4,16,0);//显示ADC的值
temp=(float)(adcx)*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,130,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,130,temp,3,16,0X80);
adcx=Get_Adc_Average(ADC_Channel_11,10);
LCD_ShowxNum(156,150,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,170,adcx,2,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(180,170,temp,3,16,0X80);
adcx=Get_Adc_Average(ADC_Channel_12,10);
LCD_ShowxNum(156,190,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,210,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,210,temp,3,16,0X80);
adcx=Get_Adc_Average(ADC_Channel_13,10);
LCD_ShowxNum(156,230,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,250,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,250,temp,3,16,0X80);
adcx=Get_Adc_Average(ADC_Channel_14,10);
LCD_ShowxNum(156,270,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,290,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,290,temp,3,16,0X80);
if(dir)
{
if(t)
{
if(t==KEY_LEFT)
{
delay_ms(30);
if(t==KEY_LEFT)
{
led0pwmval=led0pwmval+72;
led0pwmzkb=7200-led0pwmval;
}
}
if(t==KEY_DOWN)
{
delay_ms(40);
{
if(t==KEY_DOWN)
{
led0pwmval=led0pwmval-72;
led0pwmzkb=7200-led0pwmval;
}
}
}
}
}
if(dir1)
{
if(t)
{
if(t==KEY_UP)
{
delay_ms(40);
{
if(t==KEY_UP)
{
  B1pwmval=PB1pwmval-72; //步进
PB1pwmzkb=7200-PB1pwmval; //占空比
}
}
}
if(t==KEY_RIGHT)
{
delay_ms(30);
{
if(t==KEY_RIGHT)
{
  B1pwmval=PB1pwmval+72;
PB1pwmzkb=7200-PB1pwmval;
}
}
}
}
}
if(PB1pwmval>7200)
dir1=0;
if(PB1pwmval==0)
dir1=1;
if(led0pwmval>7200)
dir=0;
if(led0pwmval==0)
dir=1;
TIM_SetCompare1(TIM3,PB1pwmzkb);
TIM_SetCompare2(TIM3,led0pwmzkb);
}
} |
|