面向应用学习stm32(3)-LCD屏的显示

前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的。

主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103。

作者大二小白,写的不好的地方轻点喷,欢迎评论区交流

全部工程代码开源在Gitee仓库

一 LCD简介

LCD是一类常见的彩色显示屏,常常作为输出设备接入在单片机上,提供给用户交互页面。

其显示是通过点亮屏幕上的像素点显示的,例如320*240的LCD屏幕,就可以分别点亮指定坐标上的像素点,做到显示的效果

二 LCD例程简单讲解

2.1 例程

Gitee仓库里的LCD_Base复制到你要存的目录下,打开查看,可以看到主函数里调用了一行LCD测试函数

里面有详细的注释

image-20220505141757235

image-20220505141823736

运行后会发现,LCD屏会根据注释里所说的运行。

大致阅读之后,应该能够掌握屏幕的基础使用。

接下来,我们来阅读一下lcd的头文件。

2.2 头文件部分

基本上属于一个功能对应一个函数,在上面的例程里也都用了我们大部分情况下会使用的函数。

image-20220505142126311

颜色的宏定义,可以用在设置背景色和字体颜色。

image-20220505142353188

三 小实验

把之前的两个led的小实验整合lcd屏幕的显示

3.1 需求

显示之前的key1_flag,key2_flag,以及统计两个按键被按下的次数。

3.2解决思路

首先,既然要展示那些参数,参数本身是变量,那我们就需要动态展示。

如果是下图这种写死字符串的形式的话,那我们的参数就永远不会改变了,永远只能显示该字符串的内容

	ILI9341_DispStringLine_EN(LINE(1),"KEY1_Flag:1");
	ILI9341_DispStringLine_EN(LINE(2),"KEY2_Flag:1");
	ILI9341_DispStringLine_EN(LINE(4),"KEY1_Count:1");
	ILI9341_DispStringLine_EN(LINE(5),"KEY2_Count:1");

所以我们要使用 sprintf

sprintf指的是字符串格式化
sprintf(char *string, char *format [,argument,…]);
主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。

举个例子

char buf[20];
//把后面格式化的数据写入到buf里
sprintf(buf,"KEY1_Flag:%d",KEY1_Flag)
//展示出来
ILI9341_DispStringLine_EN(LINE(1),buf);

这样的写法,当我们的KEY1_Flag变量改变时,随着while(1)的刷新,就会显示新的字符串。

所以思路如下

  • sprintf 结合 ILI9341_DispStringLine_EN 显示数据
  • 按键按下时记录,并改变显示的变量

3.3 代码

由于该工程内已经集成了KEY和LED的文件,所以可以轻松的控制按键和LED,通过前两篇里的那些函数。

char disp[20];

int key1_flag = 0;
int key2_flag = 0;
int key1_count = 0;
int key2_count = 0;

void LCD_Show()
{
	sprintf(disp,"KEY1_Flag:%d",key1_flag);
	ILI9341_DispStringLine_EN(LINE(1),disp);
	
	sprintf(disp,"KEY2_Flag:%d",key2_flag);
	ILI9341_DispStringLine_EN(LINE(2),disp);
	
	sprintf(disp,"KEY1_Count:%3d",key1_count);
	ILI9341_DispStringLine_EN(LINE(4),disp);
	
	sprintf(disp,"KEY2_Count:%3d",key2_count);
	ILI9341_DispStringLine_EN(LINE(5),disp);
}
void KEY_Control()
{
	char key = KEY_Scan();
	if(key=='1'){
		key1_flag = !key1_flag;
		key1_count++;
	}
	if(key=='2'){
		key2_flag = !key2_flag;
		key2_count++;
	}
}
	while (1)
	{
		LCD_Show();
		KEY_Control();
	}
  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这里煤球

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

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

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

打赏作者

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

抵扣说明:

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

余额充值