OpenEdv-开源电子网

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

超小白求教 3.5屏幕 6804的 LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)疑问

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-4-1
在线时间
0 小时
发表于 2013-4-12 16:26:45 | 显示全部楼层 |阅读模式
买的是战舰3.5的屏  显示id 6804
LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)不大明白 

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{    
    u8 temp,t1,t;
u16 y0=y;
u16 colortemp=POINT_COLOR;           
//设置窗口   
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
   for(t=0;t<size;t++)
   {   
if(size==12)temp=asc2_1206[num][t];  //调用1206字体
else temp=asc2_1608[num][t]; //调用1608字体                          
       for(t1=0;t1<8;t1++)
{    
       if(temp&0x80)POINT_COLOR=colortemp;
else POINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp<<=1;//为什么会向左移动一位
y++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
break;
}
}    
   }    
}else//叠加方式
{
   for(t=0;t<size;t++)
   {   
if(size==12)temp=asc2_1206[num][t];  //调用1206字体
else temp=asc2_1608[num][t]; //调用1608字体                          
       for(t1=0;t1<8;t1++)
{    
       if(temp&0x80)LCD_DrawPoint(x,y); 
temp<<=1;
y++;
if(x>=lcddev.height){POINT_COLOR=colortemp;return;}//超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
break;
}
}    
   }     
}
POINT_COLOR=colortemp;        










疑问在这
temp=asc2_1608[num][t];  //调用1608字体    
temp 已经取对值了  但是不知道是怎么写入的   看后边有个函数   LCD_DrawPoint(x,y);    里边有LCD_SetCursor(x,y);LCD_WriteRAM_Prepare();LCD->LCD_RAM=POINT_COLOR;
但没看到是怎么操作的temp值     LCD_WriteRAM_Prepare(); 中就只有一条命令  LCD->LCD_REG=lcddev.wramcmd;    这个应该是些gram的  但是后边也没看到写temp的值到里边啊
我看原子的手册上写着  和oled的类似  里边只有temp<<=1 是对temp操作的 难道是这个就能把temp的值写入 gram     有点糊涂







工作
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

243

主题

429

帖子

0

精华

禁止发言

积分
1067
金钱
1067
注册时间
2011-12-23
在线时间
17 小时
发表于 2013-4-12 19:49:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-12 20:34:02 | 显示全部楼层
if(temp&0x80)POINT_COLOR=colortemp;
else OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp<<=1;//为什么会向左移动一位
y++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
break;
}

仔细看这一段吧
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
发表于 2016-3-17 12:20:33 | 显示全部楼层
兰斯洛 发表于 2013-4-12 20:34
if(temp&0x80)POINT_COLOR=colortemp;
                                else&nbspOINT_COLOR=BACK_COLOR;
                                LCD_DrawPoint(x,y);       
         ...

到底为什么要左移一位?
回复 支持 反对

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
发表于 2016-3-17 12:55:06 | 显示全部楼层
兰斯洛 发表于 2013-4-12 20:34
if(temp&0x80)POINT_COLOR=colortemp;
                                else&nbspOINT_COLOR=BACK_COLOR;
                                LCD_DrawPoint(x,y);       
         ...

ok 知道了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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