LCD补充

LCD补充

目录

LCD补充

tip:随着我们学的越来越多,代码长度越来越长,编译越来越慢,有没有超过内存是我们比较关心的一件事,通过以下方法可以实时看到写的代码的大小

回顾LCD

LCD补充功能

-- 1、有关在LCD上显示动图,可以用动图拆分软件

-- 2、更改LCD屏幕上显示字体和背景的颜色

-- 3、在LCD屏幕上画圆


tip:随着我们学的越来越多,代码长度越来越长,编译越来越慢,有没有超过内存是我们比较关心的一件事,通过以下方法可以实时看到写的代码的大小

alt text

回顾LCD

-- LCD屏幕的核心:

  • 最重要的就是界面的设计(有专门的UI设计师) 对于产品,一个好看的外壳,一个好看的界面,这些都是很重要的。

  • 屏幕:液晶面板+液晶控制芯片+pcb底板

-- 单片机是和谁通信?和液晶控制芯片通信

-- 液晶控制芯片的型号?ILI9341

-- 双方的通信方式是什么?8080或者spi,但是昨天使用的就是8080

-- 通信过程?8080读写操作(各种操作指令:0x2a,0x2b,0x2c) 

alt text

-- 由于单片机上没有8080,所以又引入了FSMC

-- FSMC的本质是用来扩容的。

-- 那么为什么用FSMC呢?因为FSMC读写时序和8080读写时序接近。
因为单片机上没有8080,但与ILI9341通信必须用8080时序

-- 以上就是昨天LCD的理论内容的简单总结


LCD补充功能

-- 1、有关在LCD上显示动图,可以用动图拆分软件

先在网站上搜一个想要的动图,然后把他拖入动图拆分软件,然后保存,就可以得到一张一张的图片,然后把这些图片另存为jpg格式,然后用图片取模软件,生成.h文件

-- 可以上网搜动图,网上搜的图片改属性,点另存为就可以更改了,也可以截图改图片的属性,随后使用图片取模软件更改大小 

alt text

-- 动图拆分软件 在线GIF图片帧拆分工具 - UU在线工具

-- 在lcd屏幕上显示动图,温度,湿度,时间的代码。注意获取温湿度的代码和获取时间,在lcd上显示数据这三部分的代码最好分开写,避免造成问题。

#include "2.h"
#include "3.h"const unsigned char *gImage[]={gImage_2,gImage_3};
u8 i=0;int main()
{//pwm_init();dht11_init();SysTick_Config(72000);usart_init();//exti_init();key_init();uint16_t b=100;uint8_t keyflag = 0;adc_init();relay_init();rtc_init();LCD_Init();//屏幕初始化一定要写到串口初始化后面LCD_DrawPoint(10,10);LCD_ShowString(0,0,80,16,16,"123456qwer");						//宽度字符是汉字的一半,是8,汉字是16,8*10//LCD_ShowPhoto(0,16,240,135,(uint8_t *)gImage_1);//必须是//摄氏度符号的取模显示*************************************************************************uint8_t xiang[]={0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00};/*"℃",0*///1对应的黑色uint16_t cnttt = 0;for(uint8_t i=0;i<32;i++) {for(uint8_t j=0;j<8;j++) {if((xiang[i] & (1<<(7-j))) != 0) {LCD_DrawPoint(cnttt%16+80, cnttt/16+16);}cnttt++;	}}
//*************************************************************************	while(1){if(lcdtime >= 200){lcdtime = 0;LCD_ShowPhoto(0,80,98,100,(uint8_t *)gImage[i++]);if(i>=2)i=0;sprintf(D_wen, "tem: %.2f℃",dht.tem);sprintf(D_shi, "hum: %.2f%RH", dht.hum);//printf("tem:%.2f℃\r\n",dht.tem);LCD_ShowString(0,16,strlen(D_wen)*8,16,16,D_wen);LCD_ShowString(0,32,120,16,16,D_shi);}if(dhtime >=2000){dhtime =0 ;get_dht11_val();}if(rtctime >=999){rtctime = 0;get_time();sprintf(D_time, "%04d/%02d/%02d   %02d:%02d:%02d",a.tm_year+1900,a.tm_mon+1,a.tm_mday,a.tm_hour+8,a.tm_min,a.tm_sec);LCD_ShowString(0,48,180,16,16,D_time);}}
}

-- 效果图 

alt text

-- 补充:各种图标
iconfont-阿里巴巴矢量图标库


-- 2、更改LCD屏幕上显示字体和背景的颜色

-- 首先更改官方函数,先找到显示字符串的函数 

alt text

-- 然后更改函数,为了使我们更加方便的更改颜色,直接定义两个变量。先复制原来的官方函数然后更改函数名,在函数中添加两个变量,然后更改函数内容 

alt text

//改变颜色
void LCD_ShowCharColor(u16 x,u16 y,u8 num,u8 size,u8 mode,u16 P_COLOR,u16 B_COLOR)
{  							  u8 temp,t1,t;u16 y0=y;u8 csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数	num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)for(t=0;t<csize;t++){   if(size==12)temp=asc2_1206[num][t]; 	 	//调用1206字体else if(size==16)temp=asc2_1608[num][t];	//调用1608字体else if(size==24)temp=asc2_2412[num][t];	//调用2412字体else return;								//没有的字库for(t1=0;t1<8;t1++){			    if(temp&0x80)LCD_Fast_DrawPoint(x,y,P_COLOR);							//最后一个参数是颜色else if(mode==0)LCD_Fast_DrawPoint(x,y,B_COLOR);temp<<=1;y++;if(y>=lcddev.height)return;		//超区域了if((y-y0)==size){y=y0;x++;if(x>=lcddev.width)return;	//超区域了break;}}  	 }  	    	   	 	  
}   

-- 之后再将改过的函数放进显示字符串的函数中,同样加上显示颜色的变量。

void LCD_ShowStr(u16 x,u16 y,u8 size,u8 *p,u16 P_COLOR,u16 B_COLOR)
{         u8 x0=x;while((*p<='~')&&(*p>=' '))		//判断是不是非法字符!{  //LCD_ShowChar(x,y,*p,size,0);LCD_ShowCharColor(x,y,*p,size,0,P_COLOR,B_COLOR);p++;x+=size/2;if(x>(240-size/2))					//这一行写满了,该换行了{y+=size;x=0;//从头开始/				/也可以x=x0给一个起点坐标}}  
}

-- 最后在主函数中更改显示的颜色即可

    if(rtctime >=999){rtctime = 0;get_time();sprintf(D_time, "%04d/%02d/%02d   %02d:%02d:%02d",a.tm_year+1900,a.tm_mon+1,a.tm_mday,a.tm_hour+8,a.tm_min,a.tm_sec);LCD_ShowString(0,48,180,16,16,D_time);}if(dhtime >=2000){dhtime =0 ;get_dht11_val();}if(lcdtime >= 2000){lcdtime =0 ;sprintf(D_wen, "tem: %.2f℃",dht.tem);sprintf(D_shi, "hum: %.2f%RH", dht.hum);//printf("tem:%.2f℃\r\n",dht.tem);LCD_ShowString(0,16,strlen(D_wen)*8,16,16,D_wen);	LCD_ShowStr(0,32,16,D_shi,RED,YELLOW);//改变颜色的显示字符串}

-- 效果图 

alt text

-- 3、在LCD屏幕上画圆
  • 在bsp_lcd.c文件中,添加函数,并在.h文件中声明
//在LCD屏幕上画圆--------------------------------------------------------------------------------------
void LCD_Draw_ColorPoint(u16 x,u16 y,u16 P_COLOR)
{LCD_SetCursor(x,y);		//设置光标位置 LCD_WriteRAM_Prepare();	//开始写入GRAMLCD->LCD_RAM=P_COLOR; 
}void LCD_Draw_ColorCircle(uint16_t x, uint16_t y, uint16_t r,u16 P_COLOR)
{/* Bresenham画圆算法 */int16_t a = 0, b = r;int16_t d = 3 - (r << 1);		//算法决策参数/* 如果圆在屏幕可见区域外,直接退出 */if (x - r < 0 || x + r > 480 || y - r < 0 || y + r > 800) return;/* 开始画圆 */while(a <= b){LCD_Draw_ColorPoint(x - b, y - a,P_COLOR);LCD_Draw_ColorPoint(x + b, y - a,P_COLOR);LCD_Draw_ColorPoint(x - a, y + b,P_COLOR);LCD_Draw_ColorPoint(x - b, y - a,P_COLOR);LCD_Draw_ColorPoint(x - a, y - b,P_COLOR);LCD_Draw_ColorPoint(x + b, y + a,P_COLOR);LCD_Draw_ColorPoint(x + a, y - b,P_COLOR);LCD_Draw_ColorPoint(x + a, y + b,P_COLOR);LCD_Draw_ColorPoint(x - b, y + a,P_COLOR);a++;if(d < 0)d += 4 * a + 6;else{d += 10 + 4 * (a - b);b--;}LCD_Draw_ColorPoint(x + a, y + b,P_COLOR);}
}

-- main.c


LCD_Init();LCD_Draw_ColorCircle(120,120,85,RED);

-- 效果图 

alt text

-- 可以参考该文章



【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆Bresenham算法实现(基于打点函数,算法可移植到任何屏幕的驱动程序之上)_51CTO博客_嵌入式lcd显示圆形

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ERP系统有哪些实用的功能?

上一篇我们详细说了ERP是什么、ERP系统是什么&#xff0c;相信大家已经有了一定的了解&#xff0c;本篇文章我们将着重介绍ERP有哪些实用的功能。 首先&#xff0c;我们先来回顾一下上一篇的内容 什么是ERP?什么是ERP系统? 接下来进入本篇文章的重点内容 ERP系统一般有这些…

C语言—双链表

一、双向链表的结构 注意&#xff1a;这⾥的“带头”跟前⾯我们说的“头节点”是两个概念&#xff0c;实际前⾯在单链表阶段称呼不严谨&#xff0c;带头链表⾥的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这⾥“放哨的”…

论新能源智能化电动车个性化(高定)产品对制造生产的影响

一、新能源智能化电动车高定体现模式 1.个性体现在品牌之间 在不同主机产产品上体现&#xff0c;例如国产新能源新势力在智能座舱、内饰配置&#xff08;冰箱、彩电、大沙发&#xff09;方面对于合资品牌的碾压&#xff0c;提供更多细分&#xff0c;功能拉满的车型。 2.个性化…

PHP校园帮一键触达便捷无限小程序系统源码

校园帮小程序 —— 校园生活一键触达&#xff0c;便捷无限 &#x1f680;&#x1f4f1; &#x1f3eb; 一、校园生活新助手&#xff1a;校园帮小程序登场 在繁忙的校园生活中&#xff0c;你是否曾为找不到便捷的服务而烦恼&#xff1f;别担心&#xff0c;校园帮小程序来啦&am…

一篇闪击常用放大器电路(学习笔记)

文章目录 声明概念名词经典电路分析反向放大器同向放大器加法器减法器积分电路微分电路差分放大电路电流->电压转换电路电压->电流转换电路 虚短与虚断一、虚短二、虚断 一些碎碎念 声明 ​ 本文是主要基于以下两篇博客所做的笔记&#xff1a; 模电四&#xff1a;基本放…

端口号和netstat以及pidof

端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看) 端口号范围划分 0 …

间隙波导2 用于宽带间隙波导技术的合适鲁棒性的嵌入式销钉床

摘要&#xff1a; 本文引入了一种新型的以嵌入式钉床形式的少接触电磁带隙结构。与传统的钉床结构相比&#xff0c;起初用于提供完美电导体边界的光滑的上层金属平面由周期缺口槽代替&#xff0c;并且在底层模块嵌入这些槽中的金属探针没有任何电接触。嵌入式EBG结构的优点之一…

pytorch学习笔记

文章目录 前言一、What is PyTorch二、Training Neural Networks三、Training&Testing Neural Networks四、Tensors五、Training&Testing Neural Networks六、torch.nn七、Neural Network Training Setup总结 前言 PyTorch 是一个流行的深度学习框架&#xff0c;具有动…

实战篇:(三)项目实战Vue 3 + WebGL 创建一个简单的 3D 渲染应用

Vue 3 WebGL 创建一个简单的 3D 渲染应用 我们将使用 Vue 3 和 WebGL 创建一个简单的 3D 渲染应用。项目将展示如何在 Vue 组件中集成 WebGL&#xff0c;并渲染一个旋转的立方体。 1. 项目准备 首先&#xff0c;确保你已经安装了 Node.js 和 Vue CLI。如果还没有安装&#x…

解密京东详情 API 接口:获取与运用指南

一、什么是京东详情API接口&#xff1f; 京东详情API接口是京东开放平台提供的一种服务&#xff0c;允许开发者通过编程方式获取商品的详细信息。通过调用这个接口&#xff0c;你可以获取到商品的基本信息、价格、库存、评价等数据。这些数据可以帮助你更好地了解商品的情况&a…

基于WebSocket实现简易即时通讯功能

代码实现 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifa…

2024最新分别用sklearn和NumPy设计k-近邻法对鸢尾花数据集进行分类(包含详细注解与可视化结果)

本文章代码实现以下功能&#xff1a; 利用sklearn设计实现k-近邻法。 利用NumPy设计实现k-近邻法。 将设计的k-近邻法对鸢尾花数据集进行分类&#xff0c;通过准确率来验证所设计算法的正确性&#xff0c;并将分类结果可视化。 评估k取不同值时算法的精度&#xff0c;并通过…

HTML CSS 基础

HTML & CSS 基础 HTML一、HTML简介1、网页1.1 什么是网页1.2 什么是HTML1.3 网页的形成1.4总结 2、web标准2.1 为什么需要web标准2.2 Web 标准的构成 二、HTML 标签1、HTML 语法规范1.1基本语法概述1.2 标签关系 2、 HTML 基本结构标签2.1 第一个 HTML 网页2.2 基本结构标签…

uniapp 游戏 - 使用 uniapp 实现的扫雷游戏

0. 思路 1. 效果图 2. 游戏规则 扫雷的规则很简单。盘面上有许多方格,方格中随机分布着一些雷。你的目标是避开雷,打开其他所有格子。一个非雷格中的数字表示其相邻 8 格子中的雷数,你可以利用这个信息推导出安全格和雷的位置。你可以用右键在你认为是雷的地方插旗(称为标…

中华春节符号·世界品牌——粤港澳企(实)业协会商会经济合作座谈会成功举办

日前&#xff0c;一场旨在推动粤港澳三地经济深度合作的盛会——《粤港澳企&#xff08;实&#xff09;业协会商会经济合作座谈会》在广州市天河区时代TIT广场2栋801车陂社区文化中心隆重举行。此次活动由泰康之家粤园与广东经贸文化促进会联合主办&#xff0c;吸引了全球华人企…

Dubbo SpringBoot应用创建和K8S部署

推荐阅读&#xff1a;Dubbo 快速入门-CSDN博客 创建基于Spring Boot的微服务应用 以下文档将引导您从头创建一个基于 Spring Boot 的 Dubbo 应用&#xff0c;并为应用配置 Triple 通信协议、服务发现等微服务基础能力。 快速创建应用 以下是我们为您提前准备好的示例项目&am…

AI大模型开发架构设计(12)——以真实场景案例驱动深度剖析 AIGC 新时代 IT 人的能力模型

文章目录 以真实场景案例驱动深度剖析 AIGC 新时代 IT 人的能力模型1 AI 工具以及大模型会给我们带来哪些实际收益?业务研发流程环节为什么 LLM 大模型不是万能的?LLM 大模型带来实际收益 2 新时代IT人的能力模型会发生哪些变化?古典互联网架构师能力模型IT人能力模型变化 以…

这都能封!开发者行为导致Google账号关联?

从去年10月开始&#xff0c;在AI加持下&#xff0c;Google Play不断更新和迭代审查机制&#xff0c;Google Play在最近一年的时间真是杀疯了&#xff0c;封号的声音响彻整个行业&#xff0c;尤其是一些敏感品类行业。账号关联&#xff0c;恶意软件&#xff0c;欺骗行为&#xf…

小红书新ID保持项目StoryMaker,面部特征、服装、发型和身体特征都能保持一致!(已开源)

继之前和大家介绍的小红书在ID保持以及风格转换方面相关的优秀工作&#xff0c;感兴趣的小伙伴可以点击以下链接阅读~ 近期&#xff0c;小红书又新开源了一款文生图身份保持项目&#xff1a;StoryMaker&#xff0c;是一种个性化解决方案&#xff0c;它不仅保留了面部的一致性&…

贪吃蛇游戏(代码篇)

我们并不是为了满足别人的期待而活着。 前言 这是我自己做的第五个小项目---贪吃蛇游戏&#xff08;代码篇&#xff09;。后期我会继续制作其他小项目并开源至博客上。 上一小项目是贪吃蛇游戏&#xff08;必备知识篇&#xff09;&#xff0c;没看过的同学可以去看看&#xf…