打印
[家电应用]

SH79F1616 LCD驱动 LCDRAM配置问题

[复制链接]
2671|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
之前用SH79F166A 驱动LCD时使用的SEG脚都用连续的 如SEG1 SEG2 SEG3.......SEG19
定义LCD RAM    unsigned char xdata Lcd_RAM[LCD_RAM_LEN] _at_ 0x01e0 ;
最近采用了SH79F1616驱动LCD时发现SEG脚是不连续的,如SEG1 SEG2 SEG3 SEG4 SEG5  SEG9 SEG10 SGE14 SEG15 SEG19
请教像这种不连续的我需要怎么定义
沙发
ayb_ice| | 2015-8-27 08:28 | 只看该作者
每个LCD的RAM的地址是固定的,有相对应的一个SEG而已

使用特权

评论回复
板凳
liguohong327|  楼主 | 2015-8-27 08:53 | 只看该作者
比如我用了1 2 3 4 5 9 10 14 15   我可不可以按如下定义啊,

unsigned char xdata Lcd_RAM[9]={ 0x01e0 ,0x01e1,0x01e2,0x01e3,0x01e4,0x01e8,0x01e9,0x01ed,0x01ee};

使用特权

评论回复
地板
liguohong327|  楼主 | 2015-8-27 09:37 | 只看该作者
试了用上面这种方法不行, 不知道怎么搞了, 有坛友碰到过这样的问题吗

使用特权

评论回复
5
黑夜之狼| | 2015-8-27 13:19 | 只看该作者
往哪里显示,指针就往哪里指

使用特权

评论回复
6
liguohong327|  楼主 | 2015-8-27 16:00 | 只看该作者
黑夜之狼 发表于 2015-8-27 13:19
往哪里显示,指针就往哪里指

我目前是这样做的  SH79F1616 SEG5过了就是SEG9     IC的SEG5我接在LCD的SEG5上 IC的SEG9接在LCD的SEG6上
void display_num3(unsigned char dat)
{
        unsigned char tmp;
        tmp = g_LCD_DispyNum[dat];

        Lcd_RAM[4] = (tmp>>4);
        Lcd_RAM[8] = tmp&0x0f;

}

如我要在这一位上显示3 就调用display_num3(3);

因为其它也有不是连续的,所以我如果要用到显示四个8的话 我就列出了四组函数
不知道有没有更好的方法

使用特权

评论回复
7
wuxing1106| | 2015-8-27 18:59 | 只看该作者
楼主你要仔细看一下规格书,166a的LCDRAM地址是以COM为基准的,1616的LCDRAM地址是以SEG为基准的。注意到这一点之后就不存在你所说的问题了

使用特权

评论回复
8
liguohong327|  楼主 | 2015-8-27 20:26 | 只看该作者
我刚认真看了一下,两芯片是一样的呢

使用特权

评论回复
9
pang7| | 2015-8-27 21:46 | 只看该作者
不连续的 你不理他就好了 放那里空着就好了 操作那些有效地址即可

使用特权

评论回复
10
wuxing1106| | 2015-8-28 08:59 | 只看该作者
liguohong327 发表于 2015-8-27 20:26
我刚认真看了一下,两芯片是一样的呢

不好意思看错了,都是以SEG为基准的,这样就更好解决了,你把数组定义到对应地址后,没有的SEG不去操作它就可以了呀。
以1/4 Duty为例,如下定一个数组
      unsigned char xdata Lcd_RAM[19] _at_ 0x01e0 ;
操作SEG1对应的数据时,Lcd_RAM[0]=0x0F;
操作SEG5对应的数据时,Lcd_RAM[4]=0x0F;
操作SEG9对应的数据时,Lcd_RAM[8]=0x0F;

使用特权

评论回复
11
ayb_ice| | 2015-8-28 15:15 | 只看该作者
本帖最后由 ayb_ice 于 2015-8-28 15:22 编辑
liguohong327 发表于 2015-8-27 08:53
比如我用了1 2 3 4 5 9 10 14 15   我可不可以按如下定义啊,

unsigned char xdata Lcd_RAM[9]={ 0x01e0 , ...

/*

你那是初始化RAM而已,里面的数据是RAM的地址而已,没有意义
假设LCDRAM的首地址是XARM的0x01e0,那么可以如下定义

#define LCD_RAM        ((volatile unsigned char xdata*)0x01e0)

就可以这样使用了
        LCD_RAM[0] = 0x00,        // SEG0不显示
        LCD_RAM[1] = 0xff,        // SEG1显示

注意不要越界


一般是开设缓冲区,最后再显示,可以这样

unsigned char lcd_ram[40];                // 与LCD_RAM一一对应

        // 初始化
        for(char i = 0; i <sizeof(lcd_ram); i++){
                lcd_ram
【i】 = 0xff;
        }
        
        // 最后显示
        for(char i = 0; i <sizeof(lcd_ram); i++){
                LCD_RAM【i】 = lcd_ram
【i】;
        }
*/

使用特权

评论回复
12
黑夜之狼| | 2015-8-29 10:08 | 只看该作者
liguohong327 发表于 2015-8-27 16:00
我目前是这样做的  SH79F1616 SEG5过了就是SEG9     IC的SEG5我接在LCD的SEG5上 IC的SEG9接在LCD的SEG6上 ...

这个不好说,看你C语言功底了

使用特权

评论回复
13
QQ178960471| | 2016-4-7 22:41 | 只看该作者
不晓得,没遇到过

使用特权

评论回复
14
qiangweii| | 2016-4-9 18:04 | 只看该作者
  IC的SEG5不知道应该如何处理呢??

使用特权

评论回复
15
gradyhuang| | 2016-7-19 15:48 | 只看该作者
赛元芯片,除开电源脚和地任意IO都可以软件设置为seg或者com,支持1/2,1/3bais,可加QQ索取资料2920952784

7312.png (364.2 KB )

7312.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

38

帖子

1

粉丝