OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11291|回复: 12

STM32TFT液晶显示程式中u8 csize=(size/8+((size%8)?1:0))*(size/2)什么意思??

[复制链接]

12

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2017-7-15
在线时间
16 小时
发表于 2017-7-29 19:46:38 | 显示全部楼层 |阅读模式
1金钱

最佳答案

查看完整内容[请看2#楼]

看教程,有说明,计算字体用的。要看教程啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-7-29 19:46:39 | 显示全部楼层
看教程,有说明,计算字体用的。要看教程啊
回复

使用道具 举报

2

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2019-4-25
在线时间
87 小时
发表于 2019-10-29 13:47:18 | 显示全部楼层
我认为是计算字体占用的空间。size/8得到一个整数n,而这个字体需要占用的空间肯定在(n,n+1)之间,所以要加上((size%8)?1:0)),就是说如果size/8有余数,csize就加1个以保证分配的空间可以放下这个字体。
好了我的理解就到这儿了,我想问为什么要乘以 (size/2) 呢,想不懂啊~  
回复

使用道具 举报

2

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2019-4-25
在线时间
87 小时
发表于 2019-12-5 16:42:55 | 显示全部楼层
cin444 发表于 2019-10-29 13:47
我认为是计算字体占用的空间。size/8得到一个整数n,而这个字体需要占用的空间肯定在(n,n+1)之间,所以 ...

找到了,《STM32F4开发指南-寄存器版本》201页:
每个 12*6 的字符占用 12 个字节,每个 16*8 的字符占用16 个字节,每个 24*12 的字符占用 36 个字节。
回复

使用道具 举报

11

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2017-3-17
在线时间
83 小时
发表于 2020-1-10 15:48:06 | 显示全部楼层
本帖最后由 乘云十万八千里 于 2020-1-10 15:50 编辑

同样一个大小的字体,如果是英文则占一个字符,如果是中文则占两个字符。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-24 11:51:29 | 显示全部楼层
正点原子 发表于 2017-7-29 19:46
看教程,有说明,计算字体用的。要看教程啊

教程里没有做进一步的解释。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-24 12:13:32 | 显示全部楼层
字体大小size表示的是字符在y方向所占像素点的数量,假如字体大小size=12,size/8=1,size%8=4,((size%8)?1:0)=1,size%8等于零,表示字体的大小刚好是整数字节数量,不等于0表示该字体大小还需要额外的像素点,不够一个字节按一个字节算,所以就有了((size%8)?1:0),把size/8和((size%8)?1:0)相加表示在y方向一列所需要的总共的字节数量,总共有x方向size/2列(字体所占像素点的宽x方向是高y方向的一半,在教程中并没有说,在软件PCtoLCD2002中也是这么做的),所以结果就是一个字符所占所有像素点的字节数了。size=12时,csize=(1+1)*6=12B,size=16,24就更好算了。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-24 12:17:49 | 显示全部楼层
乘云十万八千里 发表于 2020-1-10 15:48
同样一个大小的字体,如果是英文则占一个字符,如果是中文则占两个字符。

这里只有英文字符
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-24 12:18:14 | 显示全部楼层
cin444 发表于 2019-10-29 13:47
我认为是计算字体占用的空间。size/8得到一个整数n,而这个字体需要占用的空间肯定在(n,n+1)之间,所以 ...

字体大小size表示的是字符在y方向所占像素点的数量,假如字体大小size=12,size/8=1,size%8=4,((size%8)?1:0)=1,size%8等于零,表示字体的大小刚好是整数字节数量,不等于0表示该字体大小还需要额外的像素点,不够一个字节按一个字节算,所以就有了((size%8)?1:0),把size/8和((size%8)?1:0)相加表示在y方向一列所需要的总共的字节数量,总共有x方向size/2列(字体所占像素点的宽x方向是高y方向的一半,在教程中并没有说,在软件PCtoLCD2002中也是这么做的),所以结果就是一个字符所占所有像素点的字节数了。size=12时,csize=(1+1)*6=12B,size=16,24就更好算了。。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-4-9
在线时间
2 小时
发表于 2021-4-9 17:14:11 | 显示全部楼层
不等宽字体怎么弄?有哪位可以指教下?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-1-21
在线时间
3 小时
发表于 2021-4-17 10:46:48 | 显示全部楼层
计算字体所需的字节数,size/8+((size%8)?1:0)计算的是字体每列所需的字节数,size/2计算的是字体有多少列。这个公式单纯是针对正点原子的PCtoLCD2002字体取模软件设计的,因为PCtoLCD2002软件的取模说明中明确指出了,取模规则是自第一列向下,每8个点作为1个字节,如果不足8个点,就补满8位,取模顺序是自上向下,自左向右。对于1608字体和2412字体,每列正好可以满足2个字节和3个字节,不需要补满8位,而对于1206字体,需要补满8位,所以实际上看到的并不是1206字体,而是1606字体,这也就是为什么1206字体,两行显示的间隔要大一些感觉奇奇怪怪的原因。size/8+((size%8)?1:0)式中size/8计算的是这列有几个完整的字节,((size%8)?1:0)计算的是剩余的点是否够8位,要不要补满凑成1个字节,如果size%8为真,就需要补满1个字节,如果为假则不需要补满。而每种字体的宽均为长的1/2,所以size/2计算的是有多少列。在PCtoLCD2002软件中1206字体定义的是需要12个字节,但其他取模软件定义的可能是9个字节,即不足8个点的列,自动向下一列补足,形成9个字节,如果是这样的软件,则不能用上式编程。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2021-3-28
在线时间
3 小时
发表于 2021-5-12 19:52:56 | 显示全部楼层
STM32总工程师 发表于 2021-3-24 12:13
字体大小size表示的是字符在y方向所占像素点的数量,假如字体大小size=12,size/8=1,size%8=4,((size%8 ...

谢谢大佬的解释 懂了
回复

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2023-7-28
在线时间
17 小时
发表于 2023-12-12 20:52:41 | 显示全部楼层
这里size表示点阵大小,表示y轴上的长度,宽度x轴实际上只是y的一半,所以有size/2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表