合肥公司门户网站制作,贵州省建设厅网站造价工程信息,郑州做网站的论坛,营销型网站建设费用怎么这么大一、题目分析 考察内容#xff1a;
led按键#xff08;短按#xff09;PWM输出#xff08;PA1#xff09;串口接收lcd显示
根据PWM输出占空比调节#xff0c;高频与低频切换
串口接收#xff08;指令解析#xff09;【中断接收】
2个显示界面
led灯闪烁定时器
二… 一、题目分析 考察内容
led按键短按PWM输出PA1串口接收lcd显示
根据PWM输出占空比调节高频与低频切换
串口接收指令解析【中断接收】
2个显示界面
led灯闪烁定时器
二、Usr.c
/* Includes ------------------------------------------------------------------*/
#include usr.h
#include usart.h
/* values --------------------------------------------------------------------*/
struct keys key[4]{0,0,0,0};
uint8_t menu 0;
uint8_t password_valid 0;//密码有效信号
uint8_t password_err_3 0;//密码3次及以上输入错误信号
uint8_t password_err_time 0;//密码3次及以上输入错误次数
uint8_t B1 ;
uint8_t B2 ;
uint8_t B3 ;
uint16_t F 1000;
uint16_t D 50;
uint16_t password 123;//密码
/* define --------------------------------------------------------------------*/
#define MENU_PSD 0
#define MENU_STA 1/*----------------------------------------------------------------------------*/
void led_set(uint8_t led_dis)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//关闭所有ledHAL_GPIO_WritePin(GPIOC,led_dis8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void led_2_toggle(void){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}//key_control
void key_control(void)
{if(key[0].single_flag 1){key[0].single_flag 0;//仅在PSD有效if(menu MENU_PSD){if(B1 ){B1 0;}else{B1;if(B19){B1 0;}}}}else if(key[1].single_flag 1){key[1].single_flag 0;if(menu MENU_PSD){if(B2 ){B2 0;}else{B2;if(B29){B2 0;}}}}else if(key[2].single_flag 1){key[2].single_flag 0;if(menu MENU_PSD){if(B3 ){B3 0;}else{B3;if(B39){B3 0;}}} }else if(key[3].single_flag 1){ //密码输入完成确认key[3].single_flag 0;//此处要写密码判断if((B1-0)*100(B2-0)*10(B3-0) password){password_valid 1;}else{password_err_time ;}if(password_valid 1){menu MENU_STA;password_err_3 0;password_err_time 0;//输入成功将err次数清0}else{B1 ;B2 ;B3 ;if(password_err_time 3){password_err_3 1;}}}else{key[0].long_flag 0;key[1].long_flag 0;key[2].long_flag 0;key[3].long_flag 0;}
}
void dispaly_init(void){LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);
}
void menu_display(void)
{char text[30]{NULL};if(menu MENU_PSD){sprintf(text, PSD );LCD_DisplayStringLine(Line1,(u8*)text);sprintf(text, B1:%c ,B1);LCD_DisplayStringLine(Line3,(u8*)text);sprintf(text, B2:%c ,B2);LCD_DisplayStringLine(Line4,(u8*)text);sprintf(text, B3:%c ,B3);LCD_DisplayStringLine(Line5,(u8*)text);}else{fre_2hz_duty_10_set();sprintf(text, STA );LCD_DisplayStringLine(Line1,(u8*)text);sprintf(text, F:%d,F);LCD_DisplayStringLine(Line3,(u8*)text);sprintf(text, D:%d,D);LCD_DisplayStringLine(Line4,(u8*)text);LCD_ClearLine(Line5);}
}//2hz
void fre_2hz_duty_10_set(void)
{F 2000;D 10;__HAL_TIM_SetCompare(htim2,TIM_CHANNEL_2,100-1);//占空比百分之10__HAL_TIM_SET_PRESCALER(htim2,40-1);//2hz
}
//1hz 50%
void fre_1hz_duty_50_set(void){__HAL_TIM_SetCompare(htim2,TIM_CHANNEL_2,500-1);//占空比百分之50__HAL_TIM_SET_PRESCALER(htim2,80-1);//1hzF 2000;D 50;
}//定时器中断服务函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim-Instance TIM6){key[0].key_sta HAL_GPIO_ReadPin(B1_Port,B1_Pin);key[1].key_sta HAL_GPIO_ReadPin(B2_Port,B2_Pin);key[2].key_sta HAL_GPIO_ReadPin(B3_Port,B3_Pin);key[3].key_sta HAL_GPIO_ReadPin(B4_Port,B4_Pin);for(uint8_t i 0;i4;i){switch(key[i].judge_sta){case 0:{if(key[i].key_sta 0){key[i].judge_sta 1;key[i].key_time 0;}else {key[i].judge_sta 0;}}break;case 1:{if(key[i].key_sta 0){key[i].judge_sta 2;}else{key[i].judge_sta 0;}}break;case 2:{if(key[i].key_sta 1){if(key[i].key_time Short_time){key[i].single_flag 1;key[i].judge_sta 0;}}else{key[i].key_time;if(key[i].key_time Long_time){key[i].long_flag 1;key[i].judge_sta 0;}}}break;}}}if(htim-Instance TIM7){static uint16_t time 0;if(password_valid 1){password_err_3 0;led_set(0x01);F 2000;fre_2hz_duty_10_set();if(time 50-1){password_valid 0;led_set(0x00);time 0;menu MENU_PSD;B1 ;B2 ;B3 ;}else{time ;}}else if(password_err_3 1){static uint8_t cnt 0;cnt ;cnt % 2;//led2翻转if(cnt 0){led_set(0x02);}else{led_set(0x00);}//5s后接触报警if(time 50-1){password_err_3 0;led_set(0x00);time 0; //5s计时清零cnt 0;}else{time ; //计时}F 1000;fre_1hz_duty_50_set();//方波1hz}else{time 0;fre_1hz_duty_50_set();//方波1hz} }}//串口接收完成中断回调服务函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart-Instance USART1){led_set(0xaa);if(((recevie[0]-0)*100(recevie[1]-0)*10(recevie[2]-0) password)(recevie[3]) -){password (recevie[4]-0)*100(recevie[5]-0)*10(recevie[6]-0);}HAL_UART_Receive_IT(huart1,recevie,7);}
}三、Usr.h
#ifndef __USR_H__
#define __USR_H__#ifdef __cplusplus
extern C {
#endif/* Includes ------------------------------------------------------------------*/
#include main.h
#include lcd.h
#include stdio.h
#include tim.h
/* extern --------------------------------------------------------------------*/
extern uint8_t recevie[7];
//key
struct keys{uint8_t judge_sta;uint8_t key_sta;uint8_t single_flag;uint8_t long_flag;uint8_t key_time;
};
/*key define-------------------------------------------------------------------*/
#define B1_Port GPIOB
#define B2_Port GPIOB
#define B3_Port GPIOB
#define B4_Port GPIOA#define B1_Pin GPIO_PIN_0
#define B2_Pin GPIO_PIN_1
#define B3_Pin GPIO_PIN_2
#define B4_Pin GPIO_PIN_0#define Long_time 200 //2s
#define Short_time 50 //0.5s//led
void led_set(uint8_t led_dis);void led_2_toggle(void);
//key_control
void key_control(void);
void dispaly_init(void);
void menu_display(void);
void fre_2hz_duty_10_set(void);#ifdef __cplusplus
}
#endif
#endif
四、串口中断接收
本题目要求接收7个ASCII码字符 定义uint8_t 类型接收数组
uint8_t recevie[7];
在while(1)前开启串口接收中断函数接收7个字符后进入中断服务函数
HAL_UART_Receive_IT(huart1,recevie,7); 根据中断类型调用中断回调函数
下面展示中断服务函数
//串口接收完成中断回调服务函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart-Instance USART1){led_set(0xaa);if(((recevie[0]-0)*100(recevie[1]-0)*10(recevie[2]-0) password)(recevie[3]) -){password (recevie[4]-0)*100(recevie[5]-0)*10(recevie[6]-0);}HAL_UART_Receive_IT(huart1,recevie,7);}
}
五、LED灯闪烁问题
计时应该是正确的5s if(htim-Instance TIM7){static uint16_t time 0;if(password_valid 1){password_err_3 0;led_set(0x01);F 2000;fre_2hz_duty_10_set();if(time 50-1){password_valid 0;led_set(0x00);time 0;menu MENU_PSD;B1 ;B2 ;B3 ;}else{time ;}}else if(password_err_3 1){static uint8_t cnt 0;cnt ;cnt % 2;//led2翻转if(cnt 0){led_set(0x02);}else{led_set(0x00);}//5s后接触报警if(time 50-1){password_err_3 0;led_set(0x00);time 0; //5s计时清零cnt 0;}else{time ; //计时}F 1000;fre_1hz_duty_50_set();//方波1hz}else{time 0;fre_1hz_duty_50_set();//方波1hz} }
六、 总结
本次只写一个usr.c usr.h发现确实方便了许多相较于14届难度较小
比照LCD的cubemx配置引脚的时候记得配置PD2led锁存器引脚
复制其他.h时后记得更改预编译
#ifndef __USR_H__ //记得更改
#define __USR_H__#ifdef __cplusplus
extern C {
#endif/* Includes ------------------------------------------------------------------*/
#include main.h#ifdef __cplusplus
}
#endif
#endif
如果没有改为__USR_H__,跳转函数跳转不进去usr.c文件会显示C99_warning 文章转载自: http://www.morning.jkcpl.cn.gov.cn.jkcpl.cn http://www.morning.gqbks.cn.gov.cn.gqbks.cn http://www.morning.kjtdy.cn.gov.cn.kjtdy.cn http://www.morning.qqhmg.cn.gov.cn.qqhmg.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.zyrp.cn.gov.cn.zyrp.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.lzqdl.cn.gov.cn.lzqdl.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.nclbk.cn.gov.cn.nclbk.cn http://www.morning.qhydkj.com.gov.cn.qhydkj.com http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.rwfp.cn.gov.cn.rwfp.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.bpmtj.cn.gov.cn.bpmtj.cn http://www.morning.mrfbp.cn.gov.cn.mrfbp.cn http://www.morning.jqswf.cn.gov.cn.jqswf.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn http://www.morning.ytmx.cn.gov.cn.ytmx.cn http://www.morning.rdymd.cn.gov.cn.rdymd.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.qcdtzk.cn.gov.cn.qcdtzk.cn http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.synlt.cn.gov.cn.synlt.cn http://www.morning.gwqq.cn.gov.cn.gwqq.cn http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.jwfqq.cn.gov.cn.jwfqq.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.wwkft.cn.gov.cn.wwkft.cn http://www.morning.qcymf.cn.gov.cn.qcymf.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.pqrhb.cn.gov.cn.pqrhb.cn http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn http://www.morning.kpgft.cn.gov.cn.kpgft.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.qywfw.cn.gov.cn.qywfw.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.wjtxt.cn.gov.cn.wjtxt.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.xnnxp.cn.gov.cn.xnnxp.cn http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn http://www.morning.ghwdm.cn.gov.cn.ghwdm.cn http://www.morning.fcqlt.cn.gov.cn.fcqlt.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.bsqbg.cn.gov.cn.bsqbg.cn http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn http://www.morning.qzbwmf.cn.gov.cn.qzbwmf.cn http://www.morning.lbssg.cn.gov.cn.lbssg.cn http://www.morning.cnqwn.cn.gov.cn.cnqwn.cn http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.smdiaosu.com.gov.cn.smdiaosu.com http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.qkdjq.cn.gov.cn.qkdjq.cn http://www.morning.bftqc.cn.gov.cn.bftqc.cn http://www.morning.ydfr.cn.gov.cn.ydfr.cn