OpenEdv-开源电子网

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

问一个OLED_ShowChar函数的问题

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-7-29
在线时间
11 小时
发表于 2012-10-20 10:01:49 | 显示全部楼层 |阅读模式
在OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)函数中的chr为要显示的字符,在函数体中:数组oled_asc2_1206[chr][t]或者oled_asc2_1608[chr][t]中的chr就直接变为该显示字符在该数组中对应的行值了吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-20 10:31:40 | 显示全部楼层
回复【楼主位】tanfei378:
---------------------------------
看源码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-8-28
在线时间
11 小时
发表于 2013-3-9 22:05:35 | 显示全部楼层
程序有错:
应把如下去掉:  
if((y-y0)==size)
   {
    y=y0;
    x++;
    break;
   } 
换成
y=y0;
x++;
即:
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{            
 u8 temp,t,t1;
 u8 y0=y;
 chr=chr-' ';//得到偏移后的值      
    for(t=0;t<size;t++)
    {  
  if(size==12)temp=asc2_1206[chr][t];  //调用1206字体,提取一列点的字节。
  else temp=asc2_1608[chr][t];   //调用1608字体,提取一列点的字节。                          
        for(t1=0;t1<8;t1++)
  {/*刷新8个点的SRAM矩阵*/
   if(temp&0x80)OLED_DrawPoint(x,y,mode); //高位还是低位开始跟取模方式有关。
   else OLED_DrawPoint(x,y,!mode);
   temp<<=1;
   y++;
/*   
if((y-y0)==size)
   {
    y=y0;
    x++;
    break;
   } 
 */
   y=y0;
   x++;
  }   
    }         
}
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-8-28
在线时间
11 小时
发表于 2013-3-9 23:03:29 | 显示全部楼层
回复【3楼】guotaosheng:
---------------------------------
楼主没错,是我取模弄错了。
回复 支持 反对

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-12-6
在线时间
6 小时
发表于 2013-12-9 15:49:30 | 显示全部楼层
回复【4楼】guotaosheng:
---------------------------------
哈哈,看来初学者都是同样的错误,我也忽略了这个break;
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2016-10-13
在线时间
4 小时
发表于 2016-10-14 00:10:37 | 显示全部楼层
chr是一个字符串的首地址,在调用函数的时候就相当于赋值了,chr-=" ";这句话相当于把字符串的首字母在1206字体库里找到在第多少行,即把1206字体库里的那一行的首字母地址给chr。然后chr就可以当做行数使用了。具体可以翻一番C语言的书。
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2021-1-21
在线时间
6 小时
发表于 2021-4-17 11:25:31 | 显示全部楼层
本帖最后由 Arce 于 2021-4-17 12:42 编辑

asc2_1608是个字库数组,其中包含了所有ASCII字符库中的字符所对应的1608字体的字节内容,其中空字符' ',是第一个,其序号是0,那么数组内asc2_1608[0][0]到asc2_1608[0][15]的元素内容,就表示空字符' '所占的1608字体的字节内容。而要显示的字符chr,在进行chr = chr - ' '计算时,chr会被自动转化为chr在ASCII字符库中的十进制序号,以a举例来说,a在ASCII字符库中的序号是97,那么chr = chr - ' '既是chr=97-0,得到的97就是a在ASCII字符库中相对' '的偏移量,那么asc2_1608[97][0]到asc2_1608[97][15]的元素内容就是数组中a字符的1608字体的字节内容。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 23:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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