打印

Ht1621 驱动 段码LCD的问题

[复制链接]
10917|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyae|  楼主 | 2010-6-6 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用HT1621 驱动一个段码LCD (SEG0-SEG11, COM0-COM3). 驱动还在调试中, 现在屏能显示了, 但是不是我想要输出的数字, 很奇怪.
我看了一下网上别的驱动, 好像要输出的数字要转换成一个编码才能输入到屏上的, 我不知道我这边屏的要怎么转, 这个有没什么标准的? 我用网上的试也不对...

还有一个问题是: 屏上的一个字是由二个地址控制的吗?

多谢!

相关帖子

沙发
NE5532| | 2010-6-6 15:52 | 只看该作者
1621没有8字码的概念,他只驱动液晶上的一个元素,至于那些元素组成一个8字,要看你自己的具体设计了。根据数据手册清理一张表出来,哪个寄存器对应你屏幕上的哪个显示元素,然后再写程序,你就清楚了。

使用特权

评论回复
板凳
lyae|  楼主 | 2010-6-6 15:52 | 只看该作者
附 驱动:

#define SPI_DELAY_TICKS                        (410*40) //I43_GSIU_CLOCK_CLOCK_DIVISOR_2048 //66Kb //For C10p

VOID
Delay(UINT uiMS)
{
        UINT32 uiDelay = 0;
       
        for(uiDelay=0; uiDelay<SPI_DELAY_TICKS; uiDelay++){}
}

VOID
LCDSetBit(BYTE byData, BYTE byCnt)
{
    BYTE i;
    for(i=0; i<byCnt; i++)
    {
        if((byData&0x80) == 0)
        {
            SetPin(LCD_PIN_DATA, 0);
        }
        else
        {
            SetPin(LCD_PIN_DATA, 1);
        }

        SetPin(LCD_PIN_WR, 0);
        Delay(1);
        SetPin(LCD_PIN_WR, 1);
        Delay(1);
        
        byData <<= 1;
    }
}

VOID
SendDataBit(BYTE byData, BYTE byCnt)
{
    BYTE i = 0;

    for(i=0; i<byCnt; i++)
    {
        if((byData&0x01) == 0)
        {
            SetPin(LCD_PIN_DATA, 0);
        }
        else
        {
            SetPin(LCD_PIN_DATA, 1);
        }

        SetPin(LCD_PIN_WR, 0);
        Delay(1);
        SetPin(LCD_PIN_WR, 1);
        Delay(1);
        
        byData >>= 1;
    }
}

VOID
SendCmd(BYTE byCmd)
{
    SetPin(LCD_PIN_CS, 0);

    //send flag "100"
    LCDSetBit(0x80, 3);

    LCDSetBit(byCmd, 9);

    SetPin(LCD_PIN_CS, 1);
}

VOID
WriteByte(BYTE byAddress, BYTE byData)
{
    BYTE i = 0;

    SetPin(LCD_PIN_CS, 0);

    //send flag "101"
    LCDSetBit(0xA0, 3);
   
    //Send 6 bits address
    LCDSetBit(byAddress<<2, 6);

    SendDataBit(byData, 4);

    SetPin(LCD_PIN_CS, 1);
   
}

VOID
WriteBlockData(BYTE byAddress, PBYTE pbyData, BYTE byCnt)
{
    BYTE i = 0;

    SetPin(LCD_PIN_CS, 0);

    //send flag "101"
    LCDSetBit(0xA0, 3);
   
    //Send 6 bits address
    LCDSetBit(byAddress<<2, 6);

    for(i=0; i<byCnt; i++, pbyData++)
    {
        SendDataBit(*pbyData, 8);
    }

    SetPin(LCD_PIN_CS, 1);
   
}

VOID
LCDTest()
{
    BYTE byData[5] = {0x21, 0x43, 0x65, 0x87, 0xa9};
    BYTE byData2[17] = {0xbe,0x06,0x7c,0x5e,0xc6,
         0xda,0xfa,0x0e,0xfe,0xde,
         0xe6,0xb0,0x20,0x02,0x00,//H,L, 前后冒号
         0xee,0xa8};// R, T
         
    LCDPinsConfig();

    SetPin(LCD_PIN_CS, 1);
    SetPin(LCD_PIN_WR, 1);
    SetPin(LCD_PIN_DATA, 1);

    SendCmd(LCD_SYS_EN);
    SendCmd(LCD_OSC_IN);   
    SendCmd(LCD_BIAS);   
    SendCmd(LCD_PWR_ON);

    memset(byData2, 0, 17);

    //WriteByte(0x09, 0x01);
    WriteBlockData(0, byData2, 4);

    OsThreadSleepMS(6000);
    WriteByte(0x00, 1);
    WriteByte(0x01, 2);
    WriteByte(0x02, 3);
    WriteByte(0x03, 4);
    WriteByte(0x04, 5);
    WriteByte(0x05, 6);

    //SendCmd(LCD_PWR_OFF);
}

使用特权

评论回复
地板
lyae|  楼主 | 2010-6-6 15:59 | 只看该作者
1621没有8字码的概念,他只驱动液晶上的一个元素,至于那些元素组成一个8字,要看你自己的具体设计了。根据数据手册清理一张表出来,哪个寄存器对应你屏幕上的哪个显示元素,然后再写程序,你就清楚了。 ...
NE5532 发表于 2010-6-6 15:52


感谢NE5532!

我手头没有屏的资料, 我也觉得应该有个文档来描述1621上存储空间与屏上元素的对应关系. 不然不知道怎么设置. 但供应商又说是没有这样的文档的. 说屏是标准的, 不需要资料. 想问一下这种屏是不是一般相同的, 或者都是有这样的文档啊?

使用特权

评论回复
5
NE5532| | 2010-6-6 16:14 | 只看该作者
TN屏一般都是定制的,是按你们公司的要求做的,他们不会知道什么1621不1621的,只知道com端和seg端与屏幕上元素的对应关系,就是引脚逻辑分布图,找他们要这个,或者资料就在你们开发部自己里面。就算是标准产品,也得提供逻辑图,不然怎么驱动?

1621的com和seg怎么接到屏上去就是你自己的事了。

上面两者共同构成寄存器到屏幕元素的映射关系。

使用特权

评论回复
6
NE5532| | 2010-6-6 16:14 | 只看该作者
如果上面的资料都掉了,你又实在找不到人问,就写测试程序一个元素一个元素的测。

使用特权

评论回复
7
xwj| | 2010-6-6 16:14 | 只看该作者
本帖最后由 xwj 于 2010-6-6 16:15 编辑

缓存的一个位代表屏上的一段(一个笔画),要由很多段来组合成一个8字数字的(7段),
而这个对应关系则是各有各的设计,是完全不同的,所以必须看Datasheet或者自己测试。


而没有资料的话,自己测试也很简单,你逐位逐位的把每一位置位、延时1秒,置位下一位,再延时1秒...
很快就能画出对应关系了。
然后就按7段码编码即可。

使用特权

评论回复
8
lyae|  楼主 | 2010-6-6 16:18 | 只看该作者
明白啦! 非常感谢 2位 版主!  NE5532 和 XWJ.

我先去测试一下, 试看找个对应关系来.

使用特权

评论回复
9
lyae|  楼主 | 2010-6-6 16:46 | 只看该作者
已经扫描出 对应表了, 发现我们的电路接错了. 现在问题可以解决啦.  多谢二位版主啊!

使用特权

评论回复
10
xwj| | 2010-6-6 16:57 | 只看该作者
呵呵,解决了就好。

小伙子做事挺快的嘛~:)

使用特权

评论回复
11
NE5532| | 2010-6-6 17:39 | 只看该作者
效率,赞一个!

使用特权

评论回复
12
zhiyonghe| | 2010-6-6 18:04 | 只看该作者
不到不半小时就搞定,程序加测试!!确实该赞!!!

使用特权

评论回复
13
一叶倾城wwq| | 2020-7-9 17:45 | 只看该作者

使用特权

评论回复
14
合泰| | 2020-7-10 11:46 | 只看该作者
我们具有最高fae级别的技术支持  如果有大佬搞不定的联系我3361807052 13534142374微信同号

使用特权

评论回复
15
芯片彭于晏| | 2020-7-13 10:29 | 只看该作者
我们这边有合泰原厂工程师可以提供技术支持哦,V18576740188

使用特权

评论回复
16
luckmanliang| | 2020-7-14 01:08 | 只看该作者
走了不少弯路,名师一句话就点通了

使用特权

评论回复
17
cpu51| | 2021-5-2 09:22 | 只看该作者
本帖最后由 cpu51 于 2021-5-2 09:25 编辑

我也没搞懂1621显示,0-31段,128个地址,我全部接了,那么我要显示一个8,每次指令数据传送一个地址,一个段点亮,显示8是不是要连续传送7次的位段码(即每次只是点亮一个位),下次再显示6,是不是要清掉原来的数据,再传送新的段码?谢谢大神解答。

使用特权

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

本版积分规则

个人签名:nothing...

19

主题

55

帖子

1

粉丝