主要模块
STM32板子,DS18B20温度传感器,L298N电机驱动模块,OLED屏幕一个
主要代码
#include "pwm.h"
#include "DS18B20.h"
#include "delay.h"
#include "key.h"
#include "oled.h"
int yuzhi1 = 27;
int yuzhi2=29;
int yuzhi3=31;
int flag = 1; //记录你的选择
int dangwei = 1; //显示档位
int temperature; //用于记录温度
void Dis_Temp() //OLED显示函数
{
OLED_ShowString(1,1,"T:");
OLED_ShowNum(1,3,temperature/10,2);
OLED_ShowString(2, 1, "SET:");
OLED_ShowString(4, 1, "D:");
OLED_ShowNum(2,6,yuzhi1,2);
OLED_ShowNum(2,9,yuzhi2,2);
OLED_ShowNum(2,12,yuzhi3,2);
}
void menu(void) //按键控制菜单函数
{
if(KEY0 == 0) //按键1实现光标选择
{
delay_us(20); //防抖
while(KEY0 == 0); //按下后不松手,则停在这
delay_us(20); //防抖
flag++;
if(flag == 4) flag = 1;
}
if(KEY1 == 0) //按键2实现温度阈值+
{
delay_us(20); //防抖
while(KEY1 == 0); //按下后不松手,则停在这
delay_us(20); //防抖
if(flag==1)
{
yuzhi1 ++;
if(yuzhi1 == yuzhi2) yuzhi1 = yuzhi2 - 1;
}
if(flag==2)
{
yuzhi2 ++;
if(yuzhi2 == yuzhi3) yuzhi2 = yuzhi3 - 1;
}
if(flag==3)
{
yuzhi3 ++;
}
}
if(KEY2 == 0) //按键3实现温度阈值-
{
delay_us(20); //防抖
while(KEY2 == 0); //按下后不松手,则停在这
delay_us(20); //防抖
if(flag==1)
{
yuzhi1 --;
}
if(flag==2)
{
yuzhi2 --;
if(yuzhi2 == yuzhi1) yuzhi2 = yuzhi1 + 1;
}
if(flag==3)
{
yuzhi3 --;
if(yuzhi3 == yuzhi2) yuzhi3 = yuzhi2 + 1;
}
}
switch(flag)
{
case 1:
{
OLED_ShowString(3,6,"*");
OLED_ShowString(3,9," ");
OLED_ShowString(3,12," ");
}break;
case 2:
{
OLED_ShowString(3,6," ");
OLED_ShowString(3,9,"*");
OLED_ShowString(3,12," ");
}break;
case 3:
{
OLED_ShowString(3,6," ");
OLED_ShowString(3,9," ");
OLED_ShowString(3,12,"*");
}break;
}
}
void tiaosu(void) //根据温度调速
{
if(temperature/10 < yuzhi1)
{
PWM_SetCompare2(0);
delay_us(1);
OLED_ShowNum(4,3,0,1);
}
else if(yuzhi1<temperature/10 && temperature/10 <= yuzhi2){
PWM_SetCompare2(3000);
delay_us(1);
OLED_ShowNum(4,3,1,1);
}
else if(yuzhi2<temperature/10 && temperature/10 <= yuzhi3)
{
PWM_SetCompare2(6000);
delay_us(1);
OLED_ShowNum(4,3,2,1);
}
else if(yuzhi3<temperature/10)
{
PWM_SetCompare2(10000);
delay_us(1);
OLED_ShowNum(4,3,3,1);
}
}
int main(void)
{
PWM_Init();
uart_init(72,128000); //初始化串口1
OLED_Init();
KEY_Init();
delay_us(50);
DS18B20_Init();
OLED_Clear();
while(1)
{
temperature = DS18B20_Get_Temp();
Dis_Temp();
delay_us(1);
menu();
tiaosu();
}
}