μcGUI学习笔记之三文本显示与数值显示

简介:  μc/GUI学习笔记之三文本显示与数值显示3.1      文本显示3.1.1   显示支持控制字符文本显示支持的ASCII字符如图3.1。
 

μc/GUI学习笔记之三文本显示与数值显示

3.1      文本显示

3.1.1   显示支持控制字符

文本显示支持的ASCII字符如图3.1。

图3.1  显示支持的ASCII控制字符

字符

C字符

功能

LF

\n

换行符。当前的文本显示位置更改到下一行。类似于C语言中的换行

CR

\r

类似于C语言的回车。不换行,仅回车,X坐标设置为0

3.1.2   文本显示API

主要的文本显示API如下:

l  void GUI_DispChar(U16 c):在当前窗口的当前的文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示;

l  void GUI_DispCharAt(U16 c, I16P x, I16P y):在当前窗口的指定文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示。指定的坐标为显示的字符的左上角坐标;

l  void GUI_DispChars(U16 c, int Cnt):在当前窗口的当前的文本位置使用当前字体显示Cnt个同一字符;如果字体不支持,则不会显示;

l  void GUI_DispNextLine(void):移动光标至下一行行首,相当于换行;

l  void GUI_DispString(const char GUI_FAR *s):在当前窗口的当前的文本位置使用当前字体显示一个字符串,可支持’\n’控制字符;如果字体不支持,则不会显示;

l  void GUI_DispStringLen(const char GUI_FAR *s, int Len); 在当前窗口的当前的文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示.如果字符串长度较短,以空格填充,否则将只显示一部分;

l  void GUI_DispStringAt(const char GUI_FAR *s, int x, int y):在当前窗口的指定的文本位置使用当前字体显示一个字符串,可支持’\n’控制字符;如果字体不支持,则不会显示;

l  GUI_DispStringAtCEOL():显示字符串,并清除至显示串尾至对应行行末的显示内容;

l  void GUI_DispStringHCenterAt(const char GUI_FAR *s, int x, int y): 在当前窗口的以(x,y)为横向居中的位置用当前字体显示一个字符串(文本居中显示);如果字体不支持,则不会显示;

l  void GUI_DispStringInRect(const char GUI_FAR *s, const GUI_RECT *pRect, int Align):在在当前窗口中指定的矩形框内以当前字体显示一个字符串.。坐标的基准为字符串中部位置。对齐方式Align可选值为:

u  GUI_TA_TOP, GUI_TA_BOTTOM, GUI_TA_VCENTER for vertical alignment.;

u  GUI_TA_LEFT, GUI_TA_RIGHT, GUI_TA_HCENTER for horizontal alignment。

选择在矩形框内的对齐方式。如果矩形框太小,则有可能无法显示所有内容。

l  void GUI_DispStringInRectEx(const char GUI_UNI_PTR *s,GUI_RECT* pRect,int TextAlign,int MaxLen,const GUI_ROTATION * pLCD_Api); 在在当前窗口中指定的矩形框内以当前字体显示一个字符串.MaxLen-最大字符串长度。pLCD_Api取值GUI_ROTATE_0,GUI_ROTATE_CCW顺时针旋转90度。

注:上面的API函数主要可分为几类:单个字符的显示、换行、字符串的普通显示、矩形框内的字符串显示。附加的功能是设计显示对齐方式、文本样式。

3.1.3   文本模式的选择

1.   支持四种文本模式

l  GUI_TEXTMODE_NORMAL:普通文本模式,写入文本将覆盖原有LCD上的点;

l  GUI_TEXTMODE_REVERSE:反转模式,显示的文本颜色将反转;前景色与背景色反转;

注:这个暂不清楚功能如何。

l  GUI_TEXTMODE_TRANS:透明模式,写入文本将在原有的图形顶层显示;

l  GUI_TEXTMODE_XOR:异或模式。

注:这个暂不清楚功能如何。

2.   文本模式相关API

l  int GUI_GetTextMode(void):获取显示的文本模式;

l  int GUI_SetTextMode(int TextMode):设置显示的文本模式;

l  char GUI_SetTextStyle(char Style):设置显示的文本样式,主要样式有:

n  GUI_TS_NORMAL;

n  GUI_TS_UNDERLINE;

n  GUI_TS_STRIKETHRU;

n  GUI_TS_OVERLINE。

注:文本样式,有意思!

3.1.4   文本对齐方式:

l  int GUI_GetTextAlign(void):获取文本对齐方式;

l  int GUI_SetTextAlign(int TextAlign):设置文本的对齐方式;主要对齐方式:

n  GUI_TA_LEFT-GUI_TA_HCENTER-GUI_TA_RIGHT;

n  GUI_TA_TOP-GUI_TA_VCENTER-GUI_TA_BOTTOM。

l  void GUI_SetLBorder(int x):设置显示的左边距。

注:这个应该是设置了变量,然后在调用显示函数时使用。对齐方式应该是用于显示函数参数包含指定坐标的函数,如GUI_DispStringAt()。相应的坐标指定显示对齐用的基准坐标。见程序清单3.1中的左对齐与居中对齐效果。

3.1.5   当前文本位置:

每个任务都对应着一个文本位置,位置相对于窗口的(0,0)坐标而言。用于决定输出文本的当前位置。

l  char GUI_GotoXY(int x, int y);

l  char GUI_GotoX(int x);

l  char GUI_GotoY(int y);

l  int GUI_GetDispPosX(void);

l  int GUI_GetDispPosY(void)。

注:我觉得这里的文本显示位置应该是相对于的活动窗口而言,不是相对于整个液晶屏。当输入一个字符时,显示的起始位置对应于字模图像的左上角的坐标。

3.1.6   窗口的完全与部分清除

l  void GUI_Clear(void):清除当前窗口。如果没有指定当前窗口,则清除整个屏幕;

l  void GUI_DispCEOL(void):从当前窗口的当前位置以当前字体的高度清除文本至当前行行尾。

程序清单3.1文本显示测试程序

 

#include "gui.h"

 

void         MainTask( void )

{

                GUI_RECT rect = { 0, 50, 10, 250 };

 

                GUI_Init();             

                GUI_DispChars( 'C', 20 );                      /* 显示20个字符C                                               */

                GUI_DispNextLine();                                             /* 换行                                                    */

                GUI_DispChars( 'D', 10 );                      /* 显示10个字符D                                              */

 

                GUI_DispString( "Hello, uc/GUI\n" );

                GUI_DispStringLen("Hello,uc/GUI\n", 7 );           /* 显示指定长度的字符                        */

 

                GUI_DispStringHCenterAt( "Hello,uc/GUI!", 0, 0 ); /* 文本居中位置显示                       */

                GUI_SetTextStyle( GUI_TS_UNDERLINE | GUI_TS_OVERLINE );/* 设置文本样式   */

                GUI_DispStringInRect( "Hello,uc/GUI!", &rect, GUI_TA_HCENTER );

 

                /* ------------------------ 文本串显示------------------------------ */

                GUI_SetTextAlign( GUI_TA_HCENTER );                         /* 居中对齐                            */

                GUI_DispStringAt( "GUI_TA_HCENTER!!!", 10, 100 );

 

                GUI_SetTextAlign( GUI_TA_LEFT );                  /* 左对齐                                                */

                GUI_DispStringAt( "GUI_TA_LEFT!!!", 0, 200 );             

 

                GUI_SetColor(GUI_RED);

                GUI_DrawLine(80, 10, 240, 90);

                GUI_DrawLine(80, 90, 240, 10);

                GUI_SetBkColor(GUI_BLACK);

                GUI_SetColor(GUI_RED);

                GUI_SetTextMode(GUI_TM_NORMAL);                           /* 普通显示                            */

                GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 160, 10);

                GUI_SetTextMode(GUI_TM_REV);

                GUI_DispStringHCenterAt("GUI_TM_REV" , 160, 26);

                GUI_SetTextMode(GUI_TM_TRANS);                               /* 透明显示                            */

                GUI_DispStringHCenterAt("GUI_TM_TRANS" , 160, 42);

                GUI_SetTextMode(GUI_TM_XOR);

                GUI_DispStringHCenterAt("GUI_TM_XOR" , 160, 58);

                GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);

                GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 74);   

                while( 1 )

                {

                                GUI_Delay( 100 );

                }

}

3.2      数值显示API

3.2.1   十进制数显示支持

l  void GUI_DispDec(I32 v, U8 Len):显示十进制数,最大长度为9;如果数为负数,则显示时会添加负号。若实际的长度小于Len,则显示时将填0被充;

l  void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len):在指定位置显示十进制数,同GUI_DispDec();

l  void GUI_DispDecMin(I32 v); 以最小长度的串显示一个十进制数;

l  void GUI_DispDecShift(I32 v, U8 Len, U8 Shift):指定从右边起有多少位表示小数部分。Len指定显示的串的长度;

l  void DispDecSpace(I32 v, U8 MaxDigits);

l  void GUI_DispSDec(I32 v, U8 Len):显示有符号十进制数;同GUI_DispDec(),但是总是包含+/-符号;

l  void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift)。

注:如果需要指定len,若len较长,则显示将以空格或字符0补空;如len较小,则显示可能会出现不正确。使用GUI_DispDecMin()自动决定显示多长。Shift用于移位,本来是显示整数的,但现在可显示小数。最大支持显示9个字符长度。支持正负号显示。

3.2.2   浮点数显示支持:

l  void GUI_DispFloat(float v, char Len):显示符点数,小数点符号计入显示的符号数;

l  void GUI_DispFloatFix (float v, char Len, char Decs):显示浮点数,len-总长;Decs小数部分的位数;

l  void GUI_DispFloatMin(float f, char Fract):如果Fract值为负,则添加负号。Fract显示最少用的字符长度,并不是必需,实际显示时会根据需要选择最小值;

l  void GUI_DispSFloatFix(float v, char Len, char Decs):

l  void GUI_DispSFloatMin(float f, char Fract);指定显示的小数部分位数;总是在显示值前面显示+/-符号。

注:部分同上。但显示时是在后面补0。

3.2.3   二进制数显示支持:

l  void GUI_DispBin(U32 v, U8 Len):

l  void DispBinAt(U32 v, I16P y, I16P x, U8 Len)。

3.2.4   十六进制数显示支持

l  void GUI_DispHex(U32 v, U8 Len):

l  void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len)。

注:没有附加的“0x”字符串显示,且不支持正负符号显示。

3.2.5   测试程序

程序清单3.2  数值显示测试程序

#include "gui.h"

 

void    MainTask( void )

{

    GUI_RECT rect = { 0, 50, 10, 250 };

 

    GUI_Init();

   

    /* ---------- 十进制显示支持 ---------------*/

    GUI_DispString("Disp Dec:\n");

    GUI_DispDec( -32, 9 );              /* 显示负号,以零补空  */

    GUI_DispNextLine();

    GUI_DispDec( 56, 9 );               /* 不显正号,以零补空  */

    GUI_DispNextLine();

    GUI_DispDec( 51, 1 );               /* 不显正号,以零补空  */

    GUI_DispNextLine();

 

    GUI_DispDecMin( -32 );              /* 最小数量显示        */

    GUI_DispNextLine();

    GUI_DispDecMin( 54 );          

    GUI_DispNextLine();

 

    GUI_DispDecShift( -3212, 8, 1 );      /* 1位小数             */

    GUI_DispNextLine();

    GUI_DispDecShift( -3212, 8, 2 );      /* 2位小数             */

    GUI_DispNextLine();

 

    GUI_DispDecSpace( -3212, 9 );       /* 以空格补空          */

 

    /* ---------- 浮点数显示支持 ---------------*/

    GUI_DispNextLine();

    GUI_DispFloat( -3.1232, 9 );        /* 普通浮点显示支持     */

    GUI_DispNextLine();

    GUI_DispFloatFix( -3.14159, 9, 2 );  /* 最大9个字符,2个小数部分*/

    GUI_DispNextLine();

 

    /* ---------- 二进制数显示支持 ---------------*/

    GUI_DispBin( 0xfe, 8 );

    GUI_DispNextLine();

 

    /* ---------- 十六进制数显示支持 ---------------*/

    GUI_DispHex( 0xfe, 4 );

    GUI_DispNextLine();

 

    while( 1 )

    {

        GUI_Delay( 100 );

    }

}

 

By:lstzixing

Mail:blievethink@gmail.com

Blog:http://blog.ednchina.com/lstzixing

2010-5-7

相关文章
|
1月前
|
人工智能 自然语言处理 数据可视化
使用 WorkBuddy + Sive API,做无限可能的数据分析和可视化
现在 AI 时代,除了 Coding, 办公也开始全名 AI 辅助了,比如现在各种桌面端大战,各类产品都需要考虑如何把自己交给 AI 作为弹药,Sive 就提供了一套 OpenAPI,将数据分析能力完全暴漏给 AI Agent。
342 0
|
8月前
|
数据采集 边缘计算 数据可视化
RFID智能生产环节实施全追溯管控
RFID技术为生产要素赋唯一电子身份,实现“人、机、料、法、环”全流程自动采集、实时追溯与闭环管控,打通ERP/MES/WMS系统,破除信息孤岛,提升追溯精度、生产效率与质量管控水平。(239字)
|
3月前
|
弹性计算 缓存 负载均衡
可用架构实践:阿里云支撑跑腿平台稳定运行,分账链解决交易结算核心痛点
同城跑腿、即时代办、即时配送属于典型的高并发、短时效、强交易、高波动业务场景:节假日、午晚高峰、暴雨暴雪天气会瞬间触发流量峰值,订单秒级涌入;同时每一笔订单都涉及用户、平台、入驻商户、跑腿个人师傅四方交易分润,业务链路复杂。 对于开发者而言,跑腿平台上线运营核心要解决两大问题:业务层高可用稳定承载 + 交易层合规自动化分账。 绝大多数成熟跑腿平台,均基于阿里云云原生架构实现业务稳定、弹性扩容、故障自愈,保障全时段服务可用;而针对行业专属的多方分账、高分润、逆向退款、合规清算难题,行业通用最优解是垂直场景专用系统——分账链。 本文从阿里云架构落地、业务痛点拆解、交易分账解决方案三个维度,完整复盘
470 122
|
2月前
|
人工智能 Java BI
【AI】DeepSeek Harness 安装、运行、管理插件
本文介绍了如何运行DeepSeek开源的Agent框架DeepSeek Harness(dsh)。主要内容包括:使用nvm安装适配的Node版本;通过代理加速克隆GitHub源码;使用pnpm安装依赖并启动项目;配置DeepSeek API Token;安装扩展功能的插件。该框架自带Web界面,支持模型适配、文件编辑等插件化功能
3343 1
|
存储 人工智能 Serverless
《AI 剧本生成与动画创作》解决方案测评
这篇评测介绍了2025年首个AI剧本生成与动画创作解决方案。该方案结合阿里云的函数计算、对象存储OSS和百炼大模型服务,通过API调用实现剧本生成、语音合成及字幕生成等功能,适用于教育、短视频、游戏娱乐等领域。评测详细描述了部署流程,包括开通相关服务、准备物料、应用体验等环节,并对视频生成过程中的用户体验进行了总结和优化建议。整体而言,方案操作简便,但视频生成耗时较长且存在一些功能限制,如缺少进度条、多任务支持不足等。希望开发者们积极参与分享真实体验,共同推动技术进步。
1125 4
|
2月前
|
运维 监控 关系型数据库
数据库主从复制延迟怎么解决?延迟优化方案详解
解决数据库主从复制延迟推荐用阿里云 RDS——并行复制默认开启、托管只读实例规格弹性、内置延迟监控告警。具体能力请以官方文档为准。
118 5
|
2月前
|
分布式计算 运维 Serverless
AnalyticDB MySQL 湖仓版 Serverless Spark vs EMR Spark:免运维、弹性与成本全维度对比
在阿里云上跑 Spark,免运维、弹性、湖仓一体场景首选 AnalyticDB MySQL 湖仓版 Serverless Spark,需要集群控制权则选 E-MapReduce。建议按"是否还想自己管集群 + 负载是否波动"两个问题做选型判断,详细能力可参考阿里云 AnalyticDB 官方文档。
100 0
|
人工智能 关系型数据库 MySQL
AI战略丨开源开放,构建 AI 时代的创新引擎
技术开源和产业开放彼此衔接、相互支撑,构建全产业链合作模式和无边界产业生态圈,日益成为数字时代全球分工体系的主流模式。
|
人工智能 运维 监控
客户案例 | 阿里云向量检索服务Milvus版助力中免日上搭建在线推荐系统
阿里云向量检索服务Milvus版对比开源版本具有性能高、稳定性强、管控功能齐全等优势,为中免日上技术团队在电商领域搭建推荐系统提供了强有力的支持。阿里云Milvus不仅具备良好的可观测性,而且弹性扩缩能力能够适应日益增长的数据规模,同时版本平滑升级也能让技术专家更便捷、无痛地升级和体验新版本的产品能力。
客户案例 | 阿里云向量检索服务Milvus版助力中免日上搭建在线推荐系统