文章目录前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的。
主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103。
作者大二小白,写的不好的地方轻点喷,欢迎评论区交流
全部工程代码开源在Gitee仓库
- 一 LCD简介
- 二 LCD例程简单讲解
- 2.1 例程
- 2.2 头文件部分
- 三 小实验
- 3.1 需求
- 3.2解决思路
- 3.3 代码
LCD是一类常见的彩色显示屏,常常作为输出设备接入在单片机上,提供给用户交互页面。
其显示是通过点亮屏幕上的像素点显示的,例如320*240的LCD屏幕,就可以分别点亮指定坐标上的像素点,做到显示的效果
二 LCD例程简单讲解 2.1 例程将Gitee仓库里的LCD_Base复制到你要存的目录下,打开查看,可以看到主函数里调用了一行LCD测试函数
里面有详细的注释
运行后会发现,LCD屏会根据注释里所说的运行。
大致阅读之后,应该能够掌握屏幕的基础使用。
接下来,我们来阅读一下lcd的头文件。
2.2 头文件部分基本上属于一个功能对应一个函数,在上面的例程里也都用了我们大部分情况下会使用的函数。
颜色的宏定义,可以用在设置背景色和字体颜色。
三 小实验把之前的两个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 显示数据
- 按键按下时记录,并改变显示的变量
由于该工程内已经集成了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();
}



