TFTLCD液晶屏图标的显示

news2024/11/17 11:52:36

前言

(1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。

(2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片机开发的同学学习和使用。

学习目标

本章有两个任务:

  1. 图标显示的原理解析。
  2. 完成TFTLCD液晶屏幕 图标的显示。
  3. 本章内容比较简单,只要按照教程会操作,调用函数,实现图标的显示就行。

步骤

第一步:准备图标

第二步: 图标取模,将图片用字符来表示

第三步: 液晶显示,将字符转换成LCD屏幕显示

图片的准备

准备图片的时候,要注意两点

①图片的像素。 需要转换成我们需要显示的像素,就像我的图片必须转换成32*32

②注意图片的格式。图片的格式必须符合转换软件的格式。 以软件为准。我们使用的软件支持的图片格式相对比较多。

我们最常用的转换软件是:Image2Lcd 这是一款免费软件

显示的图片有些是通过百度下载的,有些是自己通过PS,或者画图画出来的。有些图片是不断的更换,不断的修改的。是要花费比较多的时间的

图片取模的演示

程序实现

①在lcd_Font.h中定义,通过枚举定义我们需要显示的图标。

enum
{
	ICON_32X32_WIFI_S1,
	ICON_32X32_WIFI_S2,
	ICON_32X32_WIFI_S3,
	ICON_32X32_WIFI_S4,
	
        ICON_32X32_GSM_NOCARD,

	ICON_32X32_GSM_S1,
	ICON_32X32_GSM_S2,
	ICON_32X32_GSM_S3,
	ICON_32X32_GSM_S4,

	ICON_32X32_BAT_LEVEL0,	
	ICON_32X32_BAT_LEVEL1,		
	ICON_32X32_BAT_LEVEL2,		
	ICON_32X32_BAT_LEVEL3,	
	ICON_32X32_BAT_LEVEL4,	
	ICON_32X32_BAT_LEVEL5,	

	ICON_32X32_ACLINK,	
	ICON_32X32_ACBREAK,	

	ICON_32X32_SERVER,	

	ICON_32X32_CLEAR,	

	ICON_32X32_SUM
};

②将图片转换的二进制,并保存到二位数组中,在lcd_Font.c。

显示程序

/******************************************************************************
      函数说明:小图标显示   
      入口数据:x,y显示坐标       
                num 要显示的图标
                fc 图标的颜色
                bc 图标背景色
                sizey 字号
      返回值:  无
******************************************************************************/
void LCD_ShowPicture32PixFont(unsigned short x,unsigned short y,unsigned char num,unsigned short fc,unsigned short bc,unsigned char mode)
{
	unsigned char temp,sizex,t,m=0;
	unsigned short i,TypefaceNum;一个字符所占字节大小
	unsigned short x0=x;
	TypefaceNum=128;
	LCD_Address_Set(x,y,x+31,y+31);   //设置光标位置 
	for(i=0;i<TypefaceNum;i++)
	{ 
		temp=gImage_wifiSigal[num][i];
		for(t=0;t<8;t++)
		{
			if(!mode)//非叠加模式
			{
				if(temp&(0x80>>t))
                                     LCD_WR_DATA(fc);
				else 
                                   LCD_WR_DATA(bc);
				m++;
				if(m%sizex==0)
				{
					m=0;
					break;
				}
			}
			else//叠加模式
			{
				if(temp&(0x80>>t))
					LCD_DrawPoint(x,y,fc);//画一个点
				x++;
				if((x-x0)==sizex)
				{
					x=x0;
					y++;
					break;
				}
			}
		}
	}   	 	  
}

测试验证

在void mt_tftlcd_init(void) 函数的后面增加 以下两行代码,烧录测试显示效果。

LCD_ShowPicture32PixFont(10,10,ICON_32X32_WIFI_S4,HUE_LCD_FONT,HUE_LCD_BACK,0);
    LCD_ShowPicture32PixFont(50,10,ICON_32X32_GSM_S4,HUE_LCD_FONT,HUE_LCD_BACK,0);

tips

显示字符串函数

/******************************************************************************
函数说明:显示字符串
入口数据:x,y显示坐标 320*320
*p 要显示的字符串
fc 字的颜色
bc 字的背景色
sizey 字号
mode: 0带字节背景 1透明模式
返回值: 无
******************************************************************************/

void LCD_ShowString(unsigned short x,unsigned short y,const unsigned char *p,unsigned short fc,unsigned short bc,unsigned char sizey,unsigned char mode)

两种形式

(1)直接写需要显示的字符。

LCD_ShowString(24,30,“LCD_W:”,HUE_LCD_FONT,HUE_FONT_BACK,16,0);

(2)采用数组方式。

unsigned char displaytimebuf[16];

displaytimebuf[0]=0x32;
displaytimebuf[1]=0x30;	
displaytimebuf[2]='2';
displaytimebuf[3]='2';;
displaytimebuf[4]='-';	
displaytimebuf[5]='0';
displaytimebuf[6]='7';
displaytimebuf[7]='-';	
displaytimebuf[8]='0';
displaytimebuf[9]='9';	
displaytimebuf[10]=0;
LCD_ShowString(20,200,displaytimebuf,HUE_LCD_FONT,HUE_LCD_BACK,24,0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频智能分析平台EasyCVR安防视频汇聚平台助力森林公园防火安全的应用方案

一、研发背景 随着经济的发展和人们生活水平的提高&#xff0c;越来越多的人喜欢在周末去周边的森林公园旅游&#xff0c;享受大自然的美景&#xff0c;并进行野炊和烧烤等娱乐活动。然而&#xff0c;近年来由于烟蒂和烧烤碳渣等人为因素&#xff0c;森林公园火灾频繁发生。森…

Acwing796.子矩阵的和

理解二维前缀和&#xff1a; #include <iostream>using namespace std;const int N 1010;int a[N][N], s[N][N];int main() {int n, m, q;cin >> n >> m >> q;for (int i 1; i < n; i)for (int j 1; j < m; j) {scanf("%d", &a…

ChatGPT Enterprise:AI 助手的商业化之路

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

C++笔记之单例通过GetInstance传递参数

C笔记之单例通过GetInstance传递参数 code review! 文章目录 C笔记之单例通过GetInstance传递参数例1.普通指针的单例例2.结合智能指针和std::call_once例3.编译不通过的错误例子&#xff0c;在GetInstance内不可以使用std::make_shared来创建对象 例1.普通指针的单例 运行 …

《HelloGitHub》第 89 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …

教程更新 | RK3568驱动指南第六篇-平台总线

《iTOP-RK3568开发板驱动开发指南》更新&#xff0c;本次更新内容对应的是驱动&#xff08;第六期_平台总线_全新升级&#xff09;视频&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。 ✦ 第一篇 驱动基础 第1…

启莱OA messageurl.aspx SQL注入

​子曰&#xff1a;“不患人之不己知&#xff0c;患不知人也。” 漏洞复现 访问漏洞url&#xff1a; 使用SQLmap对参数 user 进行注入 漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于…

java八股文面试[多线程]——synchronized 和lock的区别

其他差别&#xff1a; synchronized是隐式的加锁,lock是显式的加锁; synchronized底层采用的是objectMonitor,lock采用的AQS; synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列; synchronized使用了object类的wait和noti…

视频垂直镜像播放,为您的影片带来新鲜感

大家好&#xff01;在制作视频时&#xff0c;我们常常希望能够给观众带来一些新鲜感和独特的视觉效果。而垂直镜像播放是一个能够让您的影片与众不同的技巧。然而&#xff0c;传统的视频剪辑软件往往无法直接实现视频的垂直镜像播放&#xff0c;给我们带来了一些困扰。现在&…

Flink CDC介绍

1.CDC概述 CDC&#xff08;Change Data Capture&#xff09;是一种用于捕获和处理数据源中的变化的技术。它允许实时地监视数据库或数据流中发生的数据变动&#xff0c;并将这些变动抽取出来&#xff0c;以便进行进一步的处理和分析。 传统上&#xff0c;数据源的变化通常通过…

计算机网络-笔记-第五章-运输层

目录 五、第五章——运输层 1、运输层概述 2、运输层端口号、复用、分用 &#xff08;1&#xff09;熟知端口号、登记端口号、短暂端口号 &#xff08;2&#xff09;熟知端口号 &#xff08;3&#xff09;发送方复用、接收方分用 3、UDP与TCP对比 &#xff08;1&#x…

十二、集合(2)

本章概要 添加元素组集合的打印列表 List 添加元素组 在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法&#xff0c;可以在一个 Collection 中添加一组元素。 Arrays.asList() 方法接受一个数组或是逗号分隔的元素列表&#xff08;使用可变参数&#xff…

8.react18并发模式与startTransition(搜索高亮思路)

React 18 之前,渲染是一个单一的,不间断的,同步的事务,一旦渲染开始,就不能被中断 React 18引入并发模式,它允许你将标记更新作为一个transitions,这会告诉React他们可以被中断执行.这样可以将紧急任务先更新,不紧急任务后更新. 将任务给紧急任务先执行, 优先级低的任务后执行…

avue实现用户本地保存自定义配置字段属性及注意事项

avue实现用户本地保存自定义配置字段属性及注意事项 先看一段基于vue-nuxt2的page代码&#xff1a; 代码文件AvueSaveOption.vue <template><div><p>用户保存自定义表格项</p><avue-crudref"crud":defaults.sync"defaults":opt…

华为云服务器前后端分离项目打包上传及nginx配置

目录 1、Spring Boot项目打包 2、后端上传到云服务器 3、前端打包 1&#xff09;前端请求路径修改 2&#xff09;打包上传 4、下载nginx 1&#xff09;添加源 2&#xff09;安装Nginx 3&#xff09;查看nginx安装目录和版本 4&#xff09;启动 重启nginx命令 5&#…

接口测试与功能测试的区别~

今天为大家分享的是我们在日常测试工作中, 一定会接触并且目前在企业中是主要测试内容的 功能测试与接口测试 一.功能测试与接口测试的基本概念。 1.1 什么是功能测试呢? 功能测试: 是黑盒测试的一方面, 检查实际软件的功能是否符合用户的需求 功能测试测试的内容包括以下…

工程制造领域:企业IT架构

一、500强IT部门的组织规划架构图 1.1 IT服务保证梯队与指导思想 二、工程制造领域&#xff0c;整体业务规划架构图 三、工程制造领域&#xff0c;数据化项目规划架构图 四、工程制造领域&#xff0c;IT应用系统集成架构图

15. 实现业务功能--帖子操作

1. 集成编译器 editor.md 支持 MarkDown 语法编辑&#xff0c;在需要用户输⼊内容的页面按以下代码嵌入编辑器 1.1 编写 HTML <!-- 引⼊编辑器的CSS --> <link rel"stylesheet" href"./dist/editor.md/css/editormd.min.css"> <!-- 引⼊编…

学习pytorch6 torchvision中的数据集使用

torchvision中的数据集使用 1. torchvision中的数据集使用官网文档注意点1 totensor实例化不要忘记加括号注意点2 download可以一直保持为True代码执行结果 2. DataLoader的使用 1. torchvision中的数据集使用 官网文档 注意左上角的版本 https://pytorch.org/vision/0.9/ 注…

行业趋势和新兴领域分析:分析当前网络安全行业的发展趋势,如IoT安全、AI安全、区块链安全等。

第一章&#xff1a;引言 随着数字化时代的迅速发展&#xff0c;网络安全已经成为各行各业不可忽视的重要领域。恶意攻击、数据泄露以及黑客入侵等威胁逐渐增多&#xff0c;推动着网络安全行业不断创新与进步。本文将深入探讨当前网络安全领域的发展趋势&#xff0c;聚焦于新兴…