社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 708|回复: 10

[经验] 极度精简的LCD12864显示地址转换函数

[复制链接]

201

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-11-10 16:57:42 | 显示全部楼层 |阅读模式
本帖最后由 shipeng 于 2017-11-10 17:00 编辑

最近急性强迫癌又发作,决定把LCD12864显示地址转换函数简化一下,目标是不想看到分支结构在里面,绞尽脑汁费时无数最后勉强完成:
精简前:
//设定显示位置
//x=0-7,y=0-3
void LCD_SetCursor(u8 x,u8 y)
{                          
  if (y==0)
    {y=0x80;}
  else if (y==1)
    {y=0x90;}
  else if (y==2)
    {y=0x88;}
  else if (y==3)
    {y=0x98;}

  LCD_Wcmd(x+y);     //显示地址
}
精简后:

//设定显示位置
//x=0-7,y=0-3
void LCD_SetCursor(u8 x,u8 y)
{
y=y>>1|y<<1&3;
  y=0x80+y*8;
  LCD_Wcmd(x+y);    //显示地址
}
本人一直都在用显示正常;
此帖出自单片机论坛

评分

1

查看全部评分

模电临时工


回复

使用道具 举报

23

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-15 19:30:34 | 显示全部楼层
新手看不懂

点评

兄dei有没有用过LCD12864?  详情 回复 发表于 2018-4-16 09:31


回复

使用道具 举报

201

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2018-4-16 09:31:48 | 显示全部楼层

兄dei有没有用过LCD12864?
模电临时工


回复

使用道具 举报

1257

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-16 10:10:13 | 显示全部楼层
是很简单,点个赞


回复

使用道具 举报

175

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-16 10:42:41 | 显示全部楼层
谢谢分享
充放电数显全套方案,双口快充慢充检测电流电压,两线三线直流电压表,配套三个8尺寸15*8MM带AV电流电压单位专利数码屏,资料QQ2981074992 邮箱同上


回复

使用道具 举报

23

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-16 18:02:28 | 显示全部楼层
shipeng 发表于 2018-4-16 09:31
兄dei有没有用过LCD12864?

现在正在学习


回复

使用道具 举报

23

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-16 18:02:58 | 显示全部楼层
shipeng 发表于 2018-4-16 09:31
兄dei有没有用过LCD12864?

现在正在学习当中

点评

其实就是这么个情况:分析总结后发现:y的值只在0b01(1)或0b10(2)时需要互换,即1变2,2变1。0b00(0)和0b11(3)时不变。转换完成后把新的y值乘以8并加上0x80。  详情 回复 发表于 2018-4-16 18:48


回复

使用道具 举报

201

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2018-4-16 18:48:17 | 显示全部楼层
yulin3192 发表于 2018-4-16 18:02
现在正在学习当中

其实就是这么个情况:分析总结后发现:y的值只在0b01(1)或0b10(2)时需要互换,即1变2,2变1。0b00(0)和0b11(3)时不变。转换完成后把新的y值乘以8并加上0x80。
模电临时工


回复

使用道具 举报

23

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-16 20:23:59 | 显示全部楼层
shipeng 发表于 2018-4-16 18:48
其实就是这么个情况:分析总结后发现:y的值只在0b01(1)或0b10(2)时需要互换,即1变2,2变1。0b00(0 ...

还是看不懂、
楼主发个例题看一下

点评

看一下LCD12864的规格书:[attachimg]351350[/attachimg][attachimg]351351[/attachimg] LCD12864的驱动芯片实际Y只有32行,X有16*16列。但实际屏幕却需要64行8*16列,实现方式就是当X大于7*16列时作为Line3和Line4  详情 回复 发表于 2018-4-17 08:21


回复

使用道具 举报

201

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2018-4-17 08:21:39 | 显示全部楼层
yulin3192 发表于 2018-4-16 20:23
还是看不懂、
楼主发个例题看一下

看一下LCD12864的规格书:

LCD12864GDRAMxy

LCD12864GDRAMxy

LCD12864DDRAMxy

LCD12864DDRAMxy

LCD12864的驱动芯片实际Y只有32行,X有16*16列。但实际屏幕却需要64行8*16列,实现方式就是当X大于7*16列时作为Line3和Line4,因此Line2和Line3的Y位置需要互换。
模电临时工


回复

使用道具 举报

8

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-17 09:12:17 | 显示全部楼层
现在正在学习当中


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-23 10:10 , Processed in 0.308022 second(s), 18 queries , Gzip On, Redis On.

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