当前位置: 首页 > news >正文

FSMC-TFTLCD显示实验(5):显示一个字符串的函数传递过程追踪~

改显示颜色为红色:

程 序中定义了这几种颜色可选:

*****************

看一下这个函数是怎样把csdn.net这几个字符串显示到LCD上的。

LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12,"CSDN.NET!");

看一下这个函数的原型:

//显示字符串
//x,y:起点坐标
//width,height:区域大小
//size:字体大小
//*p:字符串起始地址,

void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{
u8 x0=x;
width+=x;
height+=y;
while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
{
if(x>=width){x=x0;y+=size;}
if(y>=height)break;//退出
LCD_ShowChar(x,y,*p,size,0);
x+=size/2;
p++; //显示完字符串中一个字符后,显示字符串的下一个字符
}
}

它调用了 LCD_ShowChar(x,y,*p,size,0);这个函数,来对字串符串里的一个字符进行显示。而这个显示一个字符的函数的原型是:

//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24
//mode:叠加方式(1)还是非叠加方式(0)

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t;
u16 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)比如,从字符C的ASCII码的值,对应到字库中正好是这个字符字阵的位置
for(t=0;t<csize;t++)
{
if(size==12)temp=ascii_1206[num][t]; //调用1206字体
else if(size==16)temp=ascii_1608[num][t]; //调用1608字体
else if(size==24)temp=ascii_2412[num][t]; //调用2412字体
else return; //没有的字库
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);
else if(mode==0)LCD_DrawFRONT_COLOR(x,y,BACK_COLOR);

temp<<=1;
y++;
if(y>=tftlcd_data.height)return; //超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=tftlcd_data.width)return; //超区域了
break;
}
}
}
}

里面调用了LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);也就是用这个函数,把字符对应的点阵的每一个点,显示到LCD上。这个函数的原型是:

//快速画点
//x,y:坐标
//color:颜色
void LCD_DrawFRONT_COLOR(u16 x,u16 y,u16 color)
{

LCD_Set_Window(x, y, x, y); //设定要画的点的位置
LCD_WriteData_Color(color); //按照得到字符点阵的,把点显示出来

}

它里面的这两个函数分别如下,这里就到了操作STM32与LCD的接口线,给LCD写数据的层面了。

//设置窗口,并自动设置画点坐标到窗口左上角(sx,sy).
//sx,sy:窗口起始坐标(左上角)
//width,height:窗口宽度和高度,必须大于0!!
//窗体大小:width*height.
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
{
#ifdef TFTLCD_HX8357D
LCD_WriteCmd(0x2A);
LCD_WriteData(sx>>8);
LCD_WriteData(sx&0XFF);
LCD_WriteData(width>>8);
LCD_WriteData(width&0XFF);

LCD_WriteCmd(0x2b);
LCD_WriteData(sy>>8);
LCD_WriteData(sy&0XFF);
LCD_WriteData(height>>8);
LCD_WriteData(height&0XFF);
LCD_WriteCmd(0x2c);
#endif

void LCD_WriteData_Color(u16 color)
{
#ifdef TFTLCD_HX8357D
TFTLCD->LCD_DATA=color;
#endif

#ifdef TFTLCD_HX8357DN
TFTLCD->LCD_DATA=color>>8;
TFTLCD->LCD_DATA=color&0xff;
#endif

#ifdef TFTLCD_R61509V
TFTLCD->LCD_DATA=color;
#endif


http://www.cnnetsun.cn/news/113718.html

相关文章:

  • 基于Android的课程考勤及作业提交系统
  • 飞易通蓝牙与Wi-Fi模块:医疗产品无线连接的全能助手
  • 你的音效素材库该升级了!这个网站的分类细到超出你想象
  • Agent的“话痨”病有救了!微软黑科技教你压缩对话历史,让AI告别失忆,这篇教程太顶了!
  • ARMv7 linux中断路由以及处理
  • 【详解】基于Kubernetes部署Kafka集群
  • AIoT:从万物互联到万物智联的进化之路
  • ERROR in ./node_modules/vue-router/dist/vue-router.mjs 被报错折磨半天?真相竟是……
  • Spring Boot 自动配置的底层实现原理
  • AI如何帮你快速掌握Wireshark端口过滤技巧
  • 手把手教你复现CVE-2023-51767漏洞
  • 雷柏V500Pro键盘新手必看:5分钟搞定基础设置
  • Java小白必看:5分钟上手MD5加密解密
  • AI一键搞定Java8安装:快马平台智能配置指南
  • 二叉排序树的构建与遍历
  • AI风险行为识别系统开发:给安全防护装个“智能哨兵”
  • After Effects Roto Brush 3.0:甲方没给绿幕也要“抠人”?AI 帮你 3 秒钟搞定逐帧噩梦
  • 1分钟搞定!用zip命令快速打包你的项目原型
  • 28、Linux 文件和目录管理全解析
  • 雷科电力-REKE610D绝缘油介质损耗电阻率测试仪
  • 对于设计IT系统的相关思路
  • 轻量无负担!2025 年 3 款小巧型文件加密软件分享
  • Canoe-Autosar网络管理自动化测试脚本 Capl源码,全套,修改项目配置可以直接使用...
  • 亚马逊、速卖通采购测评:构建安全环境,保障高效下单指南
  • 软连接vs硬链接:哪种更能提升你的工作效率?
  • 完全合作型博弈:当所有人的利益捆绑在一起 (Fully Cooperative)
  • 挖SRC必须知道的25个漏洞提交平台
  • AI市场舆情分析榜,原圈科技领跑研报神器
  • AI一键生成Python安装包配置脚本
  • 零基础学网安不慌!电脑小白 4 阶段入门路线,分阶段学习不踩坑