void Init_oled(void)
{
gpio_init.Pins = GPIO_PIN_10;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_15);
gpio_init.Pins = GPIO_PIN_11;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_15);
}
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
SCL_low;
for(i=0;i<8;i++)
{
m=da;
m=m&0x80;
if(m==0x80)
{
SDA_high;
}
else SDA_low;
da=da<<1;
del_t(20);
SCL_high;
del_t(20);
SCL_low;
del_t(20);
}
}
int main(void)
{
uint32_t u,i,f;
BOARD_Init();
Init_oled();
OLED_Init();
OLED_Clear();
OLED_ShowString(10,0,"EVB-L0136",16);
OLED_ShowString(10,4,"ADC_1: ",16);
OLED_ShowString(10,6,"U= mV",16);
app_adc_init();
while (1)
{
printf("adc_val= %u\r\n", (unsigned)(app_adc_run_conv() & 0xFFF));
u=(unsigned)(app_adc_run_conv() & 0xFFF);
OLED_ShowNum(58,4,u,5,16);
u=3300*u/4095;
OLED_ShowNum(26,6,u,5,16);
app_delay(1000);
}
}
经程序的编译下载,通过调节电位器RV3,即可观察到数值的变化。
3.参数设置及控制
在温控过程中,离不开控制参数的数值,为此可利用板载的按键来实现,其按键和LED的电路如图4所示。
图4 按键和LED电路
为此,对按键所用引脚的配置函数为:
void Init_key(void)
{
gpio_init.Pins = GPIO_PIN_2;
gpio_init.PinMode = GPIO_PinMode_In_PullDown;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_15);
gpio_init.Pins = GPIO_PIN_5;
gpio_init.PinMode = GPIO_PinMode_In_PullUp;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_15);
gpio_init.Pins = GPIO_PIN_5;
gpio_init.PinMode = GPIO_PinMode_In_PullUp;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &gpio_init);
GPIO_PinAFConf(GPIOD, gpio_init.Pins, GPIO_AF_15);
gpio_init.Pins = GPIO_PIN_8;
gpio_init.PinMode = GPIO_PinMode_In_PullUp;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_init);
GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_15);
}
对红色和黄色2个LED引脚的配置函数为:
void Init_led(void)
{
gpio_init.Pins = GPIO_PIN_9;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_15);
gpio_init.Pins = GPIO_PIN_0;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &gpio_init);
GPIO_PinAFConf(GPIOC, gpio_init.Pins, GPIO_AF_0);
GPIO_WriteBit(GPIOB, GPIO_PIN_9, 1u);
GPIO_WriteBit(GPIOC, GPIO_PIN_0, 1u);
}
以此为基础,通过下面的主程序可完成参数的设置及数据的采集和显示。
int main(void)
{
uint32_t u,i,f;
BOARD_Init();
Init_oled();
OLED_Init();
OLED_Clear();
OLED_ShowString(10,0,"EVB-L0136",16);
OLED_ShowString(10,2,"max:",16);
OLED_ShowString(10,4,"ADC_1: ",16);
OLED_ShowString(10,6,"U= mV",16);
f=1;
Init_key();
Init_led();
GPIO_WriteBit(GPIOB, GPIO_PIN_9, 1u);
i=0;
while (f)
{
if(GPIO_ReadInDataBit(GPIOB, GPIO_PIN_2)==1) i=i-1; // K1
if(GPIO_ReadInDataBit(GPIOD, GPIO_PIN_5)==0) i=(i+1)%100; // K2
if(GPIO_ReadInDataBit(GPIOA, GPIO_PIN_8)==0) i=(i*10)%100; // K3
if(GPIO_ReadInDataBit(GPIOB, GPIO_PIN_5)==0) f=0; // K4
OLED_ShowNum(42,2,i,5,16);
app_delay(20);
}
app_adc_init();
while (1)
{
printf("adc_val= %u\r\n", (unsigned)(app_adc_run_conv() & 0xFFF));
u=(unsigned)(app_adc_run_conv() & 0xFFF);
OLED_ShowNum(58,4,u,5,16);
u=3300*u/4095;
if(u
{
GPIO_WriteBit(GPIOB, GPIO_PIN_9, 0u);
}
if(u>(i+2))
{
GPIO_WriteBit(GPIOB, GPIO_PIN_9, 1u);
}
OLED_ShowNum(26,6,u,5,16);
app_delay(1000);
}
}
☝长按图片,扫码申请☝