目录
系列文章目录
第六届省赛
第十一届省赛
第十三届省赛第一场
第十三届省赛第二场
第十四届省赛
第十五届4T模拟赛 加部分更新
前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、题目介绍
二、模块实现
1.LED+LCD
//定义变量
char str[4][30];
char led[8][4]={"LD1","LD2","LD3","LD4","LD5","LD6","LD7","LD8"}; //用于后面LCD的显示
/**************************LED************************************/
//全部LED灯初始化
void Led_Init()
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//控制单个LED灯亮灭
void Control_Single_Led(unsigned char location,unsigned char state)
{
HAL_GPIO_WritePin(GPIOC,location<<8,state);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//LED处理函数避免与LCD显示冲突
void Invoid_Complict()
{
HAL_GPIO_WritePin(GPIOC,0xff00, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void Display_led()
{
//Invoid_Complict();
//超过上限
if(v_37>v_max)
{
led_sta=0;
Control_Single_Led(led_upper,led_sta);
HAL_TIM_Base_Start_IT(&htim3);
}
//超过下限
else if(v_37<v_min)
{
led_sta=0;
Control_Single_Led(led_lower,led_sta);
HAL_TIM_Base_Start_IT(&htim3);
}
//正常值
else
{
Led_Init();
HAL_TIM_Base_Stop(&htim3);
}
}
/*******************************LCD************************************/
//数据显示界面显示
void Data_Show()
{
char st[30];
sprintf(st," Main ");
LCD_DisplayStringLine(Line1,(u8*)st);
sprintf(st," Volt:%.2fV ",v_37);
LCD_ClearLine(Line2);
LCD_DisplayStringLine(Line3,(u8*)st);
LCD_ClearLine(Line4);
if(v_37>v_max)
sprintf(st," Status:Upper ");
else if(v_37<v_min)
sprintf(st," Status:Lower ");
else
sprintf(st," Status:Normal ");
LCD_DisplayStringLine(Line5,(u8*)st);
}
//参数显示界面显示
void Para_Show()
{
char st[30];
sprintf(st," Setting ");
LCD_DisplayStringLine(Line1,(u8*)st);
sprintf(str[0]," Max Volt:%.1fV ",v_max);
sprintf(str[1]," Min Volt:%.1fV ",v_min);
sprintf(str[2]," Upper:%s ",led[upper_led%8]);
sprintf(str[3]," Lower:%s ",led[low_led]);
//实现对于当前调整的参数对象高亮
if(change_type%4==0)
{
LCD_SetBackColor(Blue);
LCD_DisplayStringLine(Line2,(u8*)str[0]);
LCD_SetBackColor(Black);
}
else
LCD_DisplayStringLine(Line2,(u8*)str[0]);
if(change_type%4==1)
{
LCD_SetBackColor(Blue);
LCD_DisplayStringLine(Line3,(u8*)str[1]);
LCD_SetBackColor(Black);
}
else
LCD_DisplayStringLine(Line3,(u8*)str[1]);
if(change_type%4==2)
{
LCD_SetBackColor(Blue);
LCD_DisplayStringLine(Line4,(u8*)str[2]);
LCD_SetBackColor(Black);
}
else
LCD_DisplayStringLine(Line4,(u8*)str[2]);
if(change_type%4==3)
{
LCD_SetBackColor(Blue);
LCD_DisplayStringLine(Line5,(u8*)str[3]);
LCD_SetBackColor(Black);
}
else
LCD_DisplayStringLine(Line5,(u8*)str[3]);
}
void Display_lcd()
{
if(menu%2==0)
Data_Show();
else
Para_Show();
}
2.key+adc
/************************************ADC模块*************************/
void Get_adc()
{
int adc;
HAL_ADC_Start(&hadc2);
adc=HAL_ADC_GetValue(&hadc2);
HAL_ADC_Stop(&hadc2);
v_37= adc*3.3/4096;
}
/************************************按键功能实现***********************/
void Key_Function()
{
//切换显示界面
if(keys[0].key_flg==1)
{
menu++;
keys[0].key_flg=0;
}
//选择调整的参数项
if(keys[1].key_flg==1)
{
change_type++;
keys[1].key_flg=0;
}
//增加当前选择的电压参数或LED提醒指示灯参数
if(keys[2].key_flg==1)
{
//电压上限
if(change_type%4==0)
{
v_max+=0.3;
}
//电压下限
else if(change_type%4==1)
{
v_min+=0.3;
}
//上限LED灯
else if(change_type%4==2)
{
if((upper_led+1)%8!=low_led)
{
//改变LED的位置
if(led_upper==0x80)
led_upper=0x01;
else
led_upper<<=1;
upper_led++;
upper_led%=8;
}
else
{
//改变LED的位置
if(led_upper==0x80)
led_upper=0x02;
else
led_upper<<=2;
upper_led+=2;
upper_led%=8;
}
}
//下限LED灯
else
{
if((low_led+1)%8!=upper_led)
{
if(led_lower==0x80)
led_lower=0x01;
else
led_lower<<=1;
low_led++;
low_led%=8;
}
else
{
if(led_lower==0x80)
led_lower=0x02;
else
led_lower<<=2;
low_led+=2;
low_led%=8;
}
}
keys[2].key_flg=0;
}
//减少当前选择的电压参数或LED提醒指示灯参数
if(keys[3].key_flg==1)
{
//电压上限
if(change_type%4==0)
{
v_max-=0.3;
}
//电压下限
else if(change_type%4==1)
{
v_min-=0.3;
}
//上限LED灯
else if(change_type%4==2)
{
if(upper_led==0 && low_led==7)
{
upper_led=6;
led_upper=0x40;
}
else if(upper_led==0 && low_led!=7)
{
upper_led=7;
led_upper=0x80;
}
else if(upper_led!=0 && upper_led-1==low_led)
{
upper_led-=2;
led_upper>>=2;
}
else
{
upper_led--;
led_upper>>=1;
}
}
//下限LED灯
else
{
if(low_led==0 && upper_led==7)
{
low_led=6;
led_lower=0x40;
}
else if(low_led==0 && upper_led!=7)
{
low_led=7;
led_lower=0x80;
}
else if(low_led!=0 && low_led-1==upper_led)
{
low_led-=2;
led_lower>>=2;
}
else
{
low_led--;
led_lower>>=1;
}
}
keys[3].key_flg=0;
}
Display_led();
}
3.自定义系统函数
/********************************自定义系统函数****************/
void sys_init()
{
HAL_TIM_Base_Start_IT(&htim2);
//lcd 初始化
LCD_Init();
LCD_Clear(Black);
LCD_SetTextColor(White);
LCD_SetBackColor(Black);
//LED初始化
Invoid_Complict();
Led_Init();
}
void sys_work()
{
Get_adc();
Display_lcd();
Invoid_Complict();
Key_Function();
}
总结
好了,本次的记录到此结束,总体来说,是非常简单的一套,因为用到的模块都只有三四个,都是常驻的