myprintf格式化输出液晶迎来了V2.0版本

2019-08-23 15:32发布

非常感谢网友“solo”的支持与反馈,非常感谢!!!

此版本主要更新功能如下红 {MOD}字体所示,修正了几个bug,显示字符串的时候,中英文混合一起输出还是有个bug,还没什么好的方法实现,最近没时间折腾了,过段时间在仔细研究研究,呵呵

测试平台为战舰STM32开发板(我的战舰已经出掉,手上剩下原子哥的探索者了),测试工程没放上来
谍照这里有首版的http://www.openedv.com/posts/list/38085.htm


一、关于使用默认参数说明
    1.1 在“my_printf.h”文件中集合了相关的宏定义开关,使用于使用不同功能的场合
    1.2 默认使用的显示液晶分辨率参数为:横向240,纵向320,需要修改请调用“myPrintf_SetLCDSize()”函数进行设置
    1.3 默认使用的英文字符显示大小为:宽度8,高度16,需要修改请调用“myPrintf_SetCharSize()”函数进行修改
    1.4 默认支持中文显示开关为关闭,需要请将其设置为1
    1.5 默认使用的中文显示大小为:宽度16,高度16,需要修改请调用“myPrintf_SetGBKSize()”函数进行修改

二、关于移植方法
    2.1 移植方法非常简单,在“my_printf_port.c”文件中按照提示添加合适的函数即可
            需要提供的函数有:
            1、显示单个英文字符函数;
            2、显示单个汉字函数;
            3、显示器初始化函数(可不用)
            4、液晶带颜 {MOD}设置打点函数(需打开myPrintf_ShowMade_EN或者myPrintf_ShowICO_EN,否则不需增加)
    2.2 在“my_printf.h”文件中集合了各功能开关宏定义,按需打开即可

三、用户调用函数使用说明
    3.1 myPrintf_Init()函数
            这个函数可以不使用,当需要集合的时候添加,视情况而定。
    3.2 myPrintf_GotoxPhys()函数
            调用此函数设置的是横坐标。
    3.3 myPrintf_GotoyPhys()函数
            调用此函数设置的是纵坐标。
    3.4 myPrintf_GotoxyPhys()函数
            调用此函数一次性设置好横坐标和纵坐标
    3.5 myPrintf_SetMode()函数
            调用此函数设置显示操作的各种模式。
            mode形参为8位:
            [0,0]: 显示模式设置,这个和移植的显示单个英文字符、中文汉字函数中的mode相关,当移植的函数没有,可忽略此位
            [1,1]: 显示数字的时候,高位为0是否显示。0: 不显示;1: 显示
            [2,2]: 0: 左端补空格,1: 右端补空格。缺省值为0
            [3,3]: 显示小数时此位功能。0: 补空格,1: 补0,缺省值为0
            [7,4]: 保留
    3.6 myPrintf_GetxPhys()函数
            调用此函数返回当前横坐标位置。
    3.7 myPrintf_GetyPhys()函数
            调用此函数返回当前纵坐标位置。
    3.8 myPrintf_GetCharNum()函数
            调用此函数返回的是本次总共输出字符个数。
    3.9 myPrintf_SetCharSize()函数
            调用此函数设置英文字符大小。
    3.10 myPrintf_SetGBKSize()函数
            调用此函数设置中文字符大小。
    3.11 myPrintf_SetLCDSize()函数
            调用此函数设置显示液晶的分辨率。
    3.12 myPrintf()函数
            此函数实现了基本的液晶显示格式,具体格式使用请参照下一节。

四、输出格式使用说明
    4.1 支持回车功能“ ”,回到上次设置的坐标起点,主要为横坐标,当纵坐标超过界限时,回到原点
    4.2 支持换行功能“ ”,横坐标回到0,纵坐标下一行显示
    4.3 支持Tab功能“ ”,默认四个ASCII字符宽度
    4.4 直接打印字符串,支持中文(需打开显示中文开关)
    4.5 输出字符格式“%c”
    4.6 输出百分比符号“%%”
    4.7 输出十进制,有正负之分
            4.7.1 直接输出十进制“%d”
            4.7.2 输出指定字段宽度十进制“%md”
                    当输入十进制数长度 < m时,左端补空格,否则按实际位数输出,不支持右端补空格。
    4.8 输出字符串
            4.8.1 直接输出字符串“%s或%S”,支持中文(需打开显示中文开关)
            4.8.2 输出指定长度字符串,左端补空格“%ms或%mS或%5s”
                    输出字符串占m列,当字符串本身长度 < m时,左端补空格,否则按字符串实际长度输出。
                    ◆支持中文(需打开显示中文开关),左端补充空格宽度为英文字符宽度
            4.8.3 输出指定长度字符串,右端补空格“%-ms或%-mS或%-5s”
                    输出字符串占m列,当字符串本身长度 < m时,输出字符串左靠齐,右端补空格。
                    ◆支持中文(需打开显示中文开关),左端补充空格宽度为英文字符宽度
            4.8.4 输出指定长度字符串,左端补空格“%m.ns或%m.nS或%10.5s”
                    输出字符串占m列,但只取字符串左端n个字符输出,输出这n个字符右靠齐,左端补空格,如果n > m时,保证输出n个字符。
                    ◆支持中文(需打开显示中文开关),左端补充空格宽度为英文字符宽度
            4.8.5 输出指定长度字符串,右端补空格“%-m.ns或%-m.nS或%-10.5s”
                    输出字符串占m列,但只取字符串左端n个字符输出,输出这n个字符左靠齐,右端补空格,如果n > m时,保证输出n个字符。
                    ◆支持中文(需打开显示中文开关),左端补充空格宽度为英文字符宽度
    4.9 输出浮点数,有正负之分,默认域宽(包括小数点在内)为7,小数精度为3,域宽和精度可变时,限制最大的域宽是8,精度为6
            4.9.1 直接输出浮点数“%f”,小数位不足3位的,后面补0,不足域宽左端补0或空格(可设置),详见3.5说明
                    比如输出浮点数3.1,最终的显示结果为:3.100
            4.9.2 输出一定长度和精度的浮点数“%12.5f”,其中12为域宽,5为精度,不足域宽左端补0或空格(可设置),详见3.5说明
            4.9.3 输出长度和精度可变的浮点数“%m.nf”,其中m为域宽,n为精度,不足域宽左端补0或空格(可设置),详见3.5说明
            4.9.4 输出长度和精度可变的浮点数“%-m.nf”
                    输出占m列,有n位小数,输出数值长度 < m时,右端填充0或者空格(可设置),具体由结构体mode中的bit3进行控制,详见3.5说明。
            4.9.5 输出由整数转换得来的小数“%tf”,除了前面多了一个t,其他和“%f”格式差不多
    4.10 输出八进制数,默认前面显示“0”
            4.10.1 直接输出八进制“%o”
            4.10.2 输出指定字段宽度八进制“%mo”,当输入八进制数长度 < m时,左端补空格,否则按实际位数输出
    4.11 输出十六进制数,默认前面显示“0x”
            按实际长度输出。
    4.12 指数形式输出实数(此功能不是很完善
            4.12.1 直接输出“%e”,默认长度和%f默认长度一样,小数精度默认为6位,指数占用4位
            4.12.2 长度和精度可调输出“%m.ne”,最大宽度15,最大精度14,小数不足精度要求的后面补“0”
    4.13 显示自定义类
            涉及到得函数文件“my_printf_made.c”和“my_printf_ico.c”,可按需增加或减少数组。
                4.13.1 显示自定义数字,提供字体有:普通形式数字32 * 16,四正形式数字32 * 16,相关显示标号宏定义在myPrintf.h文件中
                        显示格式为:"%ns",其中“n”代表的是数字形式,“s”代表的是大小
                4.13.2 显示自定义单 {MOD}ico图标,提供大小有:16 * 16正方形,16 * 32卧倒长方形,相关显示标号宏定义在myPrintf.h文件中
                        显示格式为:"%is",其中“i”代表的是ico意思,“s”代表的是大小

具体使用在压缩包里面doc文件夹也有说明,同样的,不喜欢的朋友也假装喜欢的样子,也是可以的,嘿嘿

还是非常感谢各位朋友的支持与反馈
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
w860316
1楼-- · 2019-08-24 08:41
LZ这是太强了,佩服。
花了多少时间完成的呀。。
看我移植的。
图形显示LZ没说清楚啊,我还是看了myprintf的代码,大体猜出应该这么写。
myPrintf("%is",0,16);
myPrintf("%is",1,16);
myPrintf("%is",2,16);
myPrintf("%is",3,16);
myPrintf("%is",0,32);
myPrintf("%is",1,32);
myPrintf("%is",2,32);
myPrintf("%is",3,32);
搞了老半天。
还有,感觉还是有点怪怪的,封装的不够彻底,说不出来哪里,以后想到了,再补上。
期望LZ持续更新,哈,造福万民。。。。
非常感谢。

八度空间
2楼-- · 2019-08-24 12:54
回复【8楼】w860316:
---------------------------------
这个我也就是想到就封装了,还没优化呢,后面有时间再说
dragon7799
3楼-- · 2019-08-24 13:12
 精彩回答 2  元偷偷看……
八度空间
4楼-- · 2019-08-24 18:35
回复【10楼】dragon7799:
---------------------------------
现在遇到转义字符 和 的问题了,换行之后显示不对劲了, 之后设计是X回到0点的,现在 之后有8个像素点了,还没找到原因, 倒是回到0点了,啊。。。。
dragon7799
5楼-- · 2019-08-24 20:42
回复【11楼】八度空间:
---------------------------------
 和   其实是两个不同的操作。
单独的   不应该换行,只是将 x 回 0 即可,y 是不变的。
单独的  恰好相反。组合后,可以实现从下一行开始。
不过下一行为空时,往往   自己就能完成类似的组合效果。

虽然你的问题我还没有看到代码,不过,从描述中,你在   后换行,那就不对了。
dragon7799
6楼-- · 2019-08-24 22:37

下载了2.2版的,看了下,你的   处理也是不对的,  并不是无条件的向后移动固定个数的字符宽度。而是按照设置好的栏距移动。

比如你设置的是 4 个字符为一个  ,那么每栏的起始字符是第1、5、9...。如果在前面有5个字符时,也就是说现在位置为第6个字符开始处,你输出一个  并不是跳到第 10 个字符的开始处,而是跳到第 9 个字符的的开始处(第8个字符结束处后一个像素),如果前面有6个字符,仍然是跳到第9个字符的开始处。 是跳固定栏距,而不是相对前一个字符移动一个栏距。


我用C#写了个简单的演示,你看下效果

一周热门 更多>