news 2026/4/16 14:21:01

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:26:27

基于Uniapp + SpringBoot + Vue的厦门周边游平台

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/4/12 3:40:06

怪兽充电推高分成等多重政策赋能代理商,共享行业红利

随着移动互联网的深度渗透&#xff0c;共享充电已从“小众需求”升级为“全民刚需”&#xff0c;行业规模持续扩容&#xff0c;成为极具发展潜力的便民服务赛道。在这一行业红利期&#xff0c;如何与合作伙伴实现共赢&#xff0c;成为品牌持续领跑的关键。为进一步助力代理商高…

作者头像 李华
网站建设 2026/4/16 12:08:29

音效素材网下载总要翻遍页面?这几位选手的体验流畅得像阵风

你是否也有过这样的经历&#xff1a;为了找到一个合适的开门声或环境音效&#xff0c;不得不在素材网站里来回翻页&#xff0c;复杂的导航和隐蔽的下载入口让人精疲力尽&#xff1f;根据《2025年数字创意产业白皮书》的调研&#xff0c;超过63%的创作者将“素材版权风险”和“低…

作者头像 李华
网站建设 2026/4/16 13:33:41

专业做合肥广告门头招牌的厂家

专业做合肥广告门头招牌的厂家在合肥&#xff0c;商业竞争日益激烈&#xff0c;一个独特且高质量的广告门头招牌对于企业来说至关重要。它不仅是企业的门面&#xff0c;更是吸引顾客、提升品牌形象的重要工具。而贰师兄广告&#xff0c;就是合肥地区专注于门头招牌发光字设计、…

作者头像 李华
网站建设 2026/4/16 10:09:37

【dz-945】基于单片机的矿下气体安全检测系统的设计与实现

基于单片机的矿下气体安全检测系统的设计与实现 摘要 在矿下作业环境中&#xff0c;温度异常及甲烷、CO₂等气体浓度超标是引发安全事故的重要隐患&#xff0c;可能导致爆炸、中毒等严重后果&#xff0c;威胁矿工生命安全和矿山生产安全。因此&#xff0c;研发一种能实时、准确…

作者头像 李华
网站建设 2026/4/16 12:03:30

soular全面介绍(8) - 集成企业微信,使用企业微信扫码登录soular

集成企业微信用户功能划入社区版本&#xff0c;本篇文章将全面介绍如何在soular中集成企业微信用户并实现企业微信用户登录soular。1、配置企业微信进入系统设置->用户->用户目录&#xff0c;点击企业微信后的配置按钮&#xff0c;填写企业微信的配置信息。参数说明企业I…

作者头像 李华