mini板,ADC实验,我仅仅是把显示部分改为了OLED显示
在源代码基础上,仅仅修改了main函数部分,红色字体是自己添加的:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
//#include "lcd.h"
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "oled.h"
#include "stdio.h"
//Mini STM32开发板范例代码13
//ADC 实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
int main(void)
{
u16 adcx;
float temp;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
// LCD_Init();
OLED_Init();
Adc_Init();
// POINT_COLOR=RED;//设置字体为红色
// LCD_ShowString(60,50,"Mini STM32");
// LCD_ShowString(60,70,"ADC TEST");
// LCD_ShowString(60,90,"ATOM@ALIENTEK");
// LCD_ShowString(60,110,"2010/12/30");
// //显示提示信息
// POINT_COLOR=BLUE;//设置字体为蓝色
// LCD_ShowString(60,130,"ADC_CH0_VAL:");
// LCD_ShowString(60,150,"ADC_CH0_VOL:0.000V");
// OLED_ShowString(0,0, "0.96' OLED TEST");
OLED_ShowString(0,0,"ADC:");
OLED_ShowString(0,16,"VOL:");
OLED_ShowString(0,32,"temp:");
OLED_Refresh_Gram();
while(1)
{
adcx=Get_Adc(ADC_CH0);
// LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值
OLED_ShowNum(40,0,adcx,4,16);
OLED_Refresh_Gram();
printf("ADC=%d\n",adcx);
temp=(float)adcx*(3.3/4096);
adcx=temp;
// LCD_ShowNum(156,150,adcx,1,16);//显示电压值
OLED_ShowNum(40,16,adcx,1,16);
OLED_Refresh_Gram();
printf("VOL=%f\n",adcx);
temp-=adcx;
temp*=1000;
// LCD_ShowNum(172,150,temp,3,16);
OLED_ShowNum(40,32,temp,3,16);
OLED_Refresh_Gram();
printf("temp=%f\n",temp);
printf("\r\n");
LED0=!LED0;
delay_ms(250);
}
}
OLED显示:
ADC: 4095
VOL: 3
temp:299
串口打印出:
ADC=4095
VOL=3
temp=1081258780
请问:
1,OLED显示里面的电压值为何一直是整数3,而源代码在LCD上显示的是3.299这个小数?
2,串口打印出的temp的值和在OLED中显示的temp的值为何不同?
后来我将temp改为f%格式输出后,就正常了,OLED显示temp的值和串口的temp值同步变化,OLED现实的ADC的值也和串口的ADC值同步变化,但是VOL仍然显示为整数:
OLED显示:
ADC: 4095
VOL: 3
temp:299
串口打印出:
ADC=4095
VOL=3.00000
temp=299.194336
用JTAG跟踪过了,执行到显示电压值这里:
OLED_ShowNum(40,16,adcx,1,16);
OLED_Refresh_Gram();
再往下执行,OLED上就显示VOL的值为3了,不知道是不是我不会用JTAG....还是找不到原因,请教大家。
|