第十三届蓝桥杯嵌入式备赛-STM32G431-基础模块调试③Task.c创建/LCD显示界面

目录

0.前言

1.功能要求

2.STM32Cubemx初始化

3.程序实现

Task.h

main.c相关初始化

Task.c

Lcd_TaskDispaly()显示界面

Task_Execution()用户函数

Key_Task()按键任务函数

4.工程文件


0.前言

这套教程针对于蓝桥杯嵌入式比赛的底层模块调试,针对于比赛进行每个模块的调试,低层模块调试好,对于赛题的实现就会方便很多,虽然有一些应试教育的意味,不过准备这个比赛对于程序整体实现思维还是有着很大帮助,我也从中受益颇多!

1.功能要求

创建Task.c文件,将用户函数、屏幕显示函数和按键任务处理函数放在Task.c中,使程序更加有条理,方便用户程序的书写。

2.STM32Cubemx初始化

保持与②相同即可

 

3.程序实现

创建Task.c和Task.h文件,在Task.c中创建3个函数,并在Task.h中声明(②中Key_Task()函数也转移到此处)

Task.h

/*Task.h*/

#ifndef _TASK_H_
#define _TASK_H_

void Key_Task(void);
void Task_Execution(void);//用户自定义函数
void Lcd_TaskDispaly(void);//显示界面

#endif

main.c相关初始化

main.c中创建LCD相关变量

/*main.c*/

uint16_t Lcd_tt=0;//LCD计时标志位
uint16_t Lcd_Ref=0;//按键刷新标志位
uint16_t Lcd_Show=0;//LCD界面选择

Task_Time()函数扩充,以执行LCD刷新操作(移步②,查看该函数)

/*main.c*/

void Task_Time(void)
{
	if(++Key_tt==10)	{Key_tt=0;Key_Ref=1;}//按键扫描计时
	if(++Lcd_tt==200)	{Lcd_tt=0;Lcd_Ref=1;}//LCD刷新计时
}

主循环中添加判断程序

/*main.c*/ 

 while (1)
  {
	if(Lcd_Ref==1)
	{
		Lcd_Ref=0;//清除标志位
		Lcd_TaskDispaly();
	}
  }

Task.c

首先引入以下变量以及外部变量并创建str用来做界面展示

/*Task.c*/

#include "Task.h"
#include "main.h"
#include "lcd.h"
#include "stdio.h"

extern uint16_t Lcd_Show;//LCD界面选择
uint8_t str[30];

Lcd_TaskDispaly()显示界面

这里使用if对Lcd_Show的值进行判断,通过改变Lcd_Show的值来更改界面显示(界面每200ms刷新一次,请参考Task_Time()函数),之后使用sprintf()函数进行字符串的格式化输出。这里只写一个界面作为例子,更改" "中的字符串即可。

/*Task.c*/

void Lcd_TaskDispaly(void)//显示界面
{
	if(Lcd_Show==0)
	{
		
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);//设置背景颜色和字体颜色
		
		sprintf((char*)str,"         %d           ",Lcd_Show);//此处编写界面显示
		LCD_DisplayStringLine(Line0,(unsigned char *)str);	
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line1,(unsigned char *)str);	
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line2,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line3,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line4,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line5,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line6,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line7,(unsigned char *)str);	
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line8,(unsigned char *)str);
		sprintf((char*)str,"                     ");
		LCD_DisplayStringLine(Line9,(unsigned char *)str);
		
	}
}

Task_Execution()用户函数

该函数是做题时便于编写用户函数的,此处占位就可以了,并且在主循环中直接执行。

/*Task.c*/

void Task_Execution(void)//用户自定义函数
{
	/*用户函数*/
}

Key_Task()按键任务函数

请参考②,注意在编写该函数时需要引入以下外部变量

/*Task.c*/

extern uint16_t Key_Value;//按键标志
extern uint16_t Key_Press_Time;//按键按下时间计时

做完这些之后,必考的模块就都配置好啦,虽然比较麻烦,但是对于后续做赛题可以说是非常方便,在自己做项目时也能够更有条理,更加方便。

4.工程文件

该工程文件为全10讲所有内容,可以作为参考,不过还是希望读者能够自己手敲一遍,加深记忆

链接:https://pan.baidu.com/s/1LcNszc7_oHWvXcucCezlxg?pwd=hw07 
提取码:hw07

 

 自己做的笔记,也希望能对你有帮助!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别人家的孩子380

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值