OpenEdv-开源电子网

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

关于OLCD程序中chr=chr-' '问题的咨询

[复制链接]

15

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2020-12-19
在线时间
20 小时
发表于 2021-3-1 22:47:02 | 显示全部楼层 |阅读模式
10金钱
就这个显示一个字符的程序,当中chr是字符串的首地址,也就是要显示字符的地址。
第一个问题                   然后chr既然是地址。为什么asc2_2412[chr][t]这样用。  这个chr怎么会是一个整数。
第二个问题                  chr-“ ”    也是很不理解。我知道的是这个asc2_2412[chr][t]数组刚开始是空格的编码。

这整个程序我就这里这一点不理解了,心里特堵得慌。

本人新手,对于很多知识学习不到位,希望各位能伸手帮一下!     






void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{                                  
        u8 temp,t,t1;
        u8 y0=y;
        u8 csize=(size/8+((size%8)?1:0))*(size/2);                //μÃμ½×Öìåò»¸ö×Ö·û¶Ôó|μãÕó¼ˉËùÕ¼μÄ×Ö½úêy






        chr=chr-' ';//μÃμ½Æ«òÆoóμÄÖμ                    就是这一句







    for(t=0;t<csize;t++)
    {   
                if(size==12)temp=asc2_1206[chr][t];                  //μ÷ó&#195;1206×&#214;ì&#229;
                else if(size==16)temp=asc2_1608[chr][t];        //μ÷ó&#195;1608×&#214;ì&#229;
                else if(size==24)temp=asc2_2412[chr][t];        //μ÷ó&#195;2412×&#214;ì&#229;
                else return;                                                                //&#195;&#187;óDμ&#196;×&#214;&#191;a
        for(t1=0;t1<8;t1++)
                {
                        if(temp&0x80)OLED_DrawPoint(x,y,mode);  //&#187;-μ&#227;oˉêy
                        else OLED_DrawPoint(x,y,!mode);
                        temp<<=1;
                        y++;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                break;
                        }
                }           
    }         
}





最佳答案

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

第一个问题:数组定义不能用变量,但是查找可以用变量。chr指字符在数组中的偏移量。 第二个问题: C第一课,ASCII码表,比如'0'对应16进制0x30,那么获取'9'就是变量9+'0'就获得了‘9’这个ASCII码,'9'在内存中是0x39。实际计算是 0x30+0x9=0x39。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-14
在线时间
965 小时
发表于 2021-3-1 22:47:03 | 显示全部楼层
第一个问题:数组定义不能用变量,但是查找可以用变量。chr指字符在数组中的偏移量。
第二个问题:
C第一课,ASCII码表,比如'0'对应16进制0x30,那么获取'9'就是变量9+'0'就获得了‘9’这个ASCII码,'9'在内存中是0x39。实际计算是 0x30+0x9=0x39。
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8691
金钱
8691
注册时间
2020-5-11
在线时间
4183 小时
发表于 2021-3-2 10:19:43 | 显示全部楼层
ASCII码了解一下,编译器会把单引号中的字符自动转换为其ASCII码。
估计是字库asc2_1206中的第一个字符是空格符' ',后面的字符依次排列,
所以要显示' '就是从asc2_1206[0]开始取数据。
专治疑难杂症
回复

使用道具 举报

15

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2020-12-19
在线时间
20 小时
 楼主| 发表于 2021-3-2 22:16:37 | 显示全部楼层
姚先起 发表于 2021-3-2 12:14
第一个问题:数组定义不能用变量,但是查找可以用变量。chr指字符在数组中的偏移量。
第二个问题:
C第一 ...

还是不懂,chr不是传过来的字符的地址吗。地址怎么会有用处
回复

使用道具 举报

15

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2020-12-19
在线时间
20 小时
 楼主| 发表于 2021-3-2 22:20:29 | 显示全部楼层
姚先起 发表于 2021-3-2 12:14
第一个问题:数组定义不能用变量,但是查找可以用变量。chr指字符在数组中的偏移量。
第二个问题:
C第一 ...

每个字符的地址难道是他对应的ASCII值的16进制吗,字符的地址不是随机分配的吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 04:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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