非常感谢网友“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文件夹也有说明,同样的,不喜欢的朋友也假装喜欢的样子,也是可以的,嘿嘿
还是非常感谢各位朋友的支持与反馈
花了多少时间完成的呀。。
看我移植的。
图形显示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持续更新,哈,造福万民。。。。
非常感谢。
---------------------------------
这个我也就是想到就封装了,还没优化呢,后面有时间再说
---------------------------------
现在遇到转义字符 和 的问题了,换行之后显示不对劲了, 之后设计是X回到0点的,现在 之后有8个像素点了,还没找到原因, 倒是回到0点了,啊。。。。
---------------------------------
和 其实是两个不同的操作。
单独的 不应该换行,只是将 x 回 0 即可,y 是不变的。
单独的 恰好相反。组合后,可以实现从下一行开始。
不过下一行为空时,往往 自己就能完成类似的组合效果。
虽然你的问题我还没有看到代码,不过,从描述中,你在 后换行,那就不对了。
下载了2.2版的,看了下,你的 处理也是不对的, 并不是无条件的向后移动固定个数的字符宽度。而是按照设置好的栏距移动。
比如你设置的是 4 个字符为一个 ,那么每栏的起始字符是第1、5、9...。如果在前面有5个字符时,也就是说现在位置为第6个字符开始处,你输出一个 并不是跳到第 10 个字符的开始处,而是跳到第 9 个字符的的开始处(第8个字符结束处后一个像素),如果前面有6个字符,仍然是跳到第9个字符的开始处。 是跳固定栏距,而不是相对前一个字符移动一个栏距。
我用C#写了个简单的演示,你看下效果
一周热门 更多>