Ht1621 驱动 段码LCD的问题

[复制链接]
 楼主| 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 | 显示全部楼层
附 驱动:

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

  2. VOID
  3. Delay(UINT uiMS)
  4. {
  5.         UINT32 uiDelay = 0;
  6.        
  7.         for(uiDelay=0; uiDelay<SPI_DELAY_TICKS; uiDelay++){}
  8. }

  9. VOID
  10. LCDSetBit(BYTE byData, BYTE byCnt)
  11. {
  12.     BYTE i;
  13.     for(i=0; i<byCnt; i++)
  14.     {
  15.         if((byData&0x80) == 0)
  16.         {
  17.             SetPin(LCD_PIN_DATA, 0);
  18.         }
  19.         else
  20.         {
  21.             SetPin(LCD_PIN_DATA, 1);
  22.         }

  23.         SetPin(LCD_PIN_WR, 0);
  24.         Delay(1);
  25.         SetPin(LCD_PIN_WR, 1);
  26.         Delay(1);
  27.         
  28.         byData <<= 1;
  29.     }
  30. }

  31. VOID
  32. SendDataBit(BYTE byData, BYTE byCnt)
  33. {
  34.     BYTE i = 0;

  35.     for(i=0; i<byCnt; i++)
  36.     {
  37.         if((byData&0x01) == 0)
  38.         {
  39.             SetPin(LCD_PIN_DATA, 0);
  40.         }
  41.         else
  42.         {
  43.             SetPin(LCD_PIN_DATA, 1);
  44.         }

  45.         SetPin(LCD_PIN_WR, 0);
  46.         Delay(1);
  47.         SetPin(LCD_PIN_WR, 1);
  48.         Delay(1);
  49.         
  50.         byData >>= 1;
  51.     }
  52. }

  53. VOID
  54. SendCmd(BYTE byCmd)
  55. {
  56.     SetPin(LCD_PIN_CS, 0);

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

  59.     LCDSetBit(byCmd, 9);

  60.     SetPin(LCD_PIN_CS, 1);
  61. }

  62. VOID
  63. WriteByte(BYTE byAddress, BYTE byData)
  64. {
  65.     BYTE i = 0;

  66.     SetPin(LCD_PIN_CS, 0);

  67.     //send flag "101"
  68.     LCDSetBit(0xA0, 3);
  69.    
  70.     //Send 6 bits address
  71.     LCDSetBit(byAddress<<2, 6);

  72.     SendDataBit(byData, 4);

  73.     SetPin(LCD_PIN_CS, 1);
  74.    
  75. }

  76. VOID
  77. WriteBlockData(BYTE byAddress, PBYTE pbyData, BYTE byCnt)
  78. {
  79.     BYTE i = 0;

  80.     SetPin(LCD_PIN_CS, 0);

  81.     //send flag "101"
  82.     LCDSetBit(0xA0, 3);
  83.    
  84.     //Send 6 bits address
  85.     LCDSetBit(byAddress<<2, 6);

  86.     for(i=0; i<byCnt; i++, pbyData++)
  87.     {
  88.         SendDataBit(*pbyData, 8);
  89.     }

  90.     SetPin(LCD_PIN_CS, 1);
  91.    
  92. }

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

  103.     SetPin(LCD_PIN_CS, 1);
  104.     SetPin(LCD_PIN_WR, 1);
  105.     SetPin(LCD_PIN_DATA, 1);

  106.     SendCmd(LCD_SYS_EN);
  107.     SendCmd(LCD_OSC_IN);   
  108.     SendCmd(LCD_BIAS);   
  109.     SendCmd(LCD_PWR_ON);

  110.     memset(byData2, 0, 17);

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

  113.     OsThreadSleepMS(6000);
  114.     WriteByte(0x00, 1);
  115.     WriteByte(0x01, 2);
  116.     WriteByte(0x02, 3);
  117.     WriteByte(0x03, 4);
  118.     WriteByte(0x04, 5);
  119.     WriteByte(0x05, 6);

  120.     //SendCmd(LCD_PWR_OFF);
  121. }
 楼主| lyae 发表于 2010-6-6 15:59 | 显示全部楼层
1621没有8字码的概念,他只驱动液晶上的一个元素,至于那些元素组成一个8字,要看你自己的具体设计了。根据数据手册清理一张表出来,哪个寄存器对应你屏幕上的哪个显示元素,然后再写程序,你就清楚了。 ...
NE5532 发表于 2010-6-6 15:52


感谢NE5532!

我手头没有屏的资料, 我也觉得应该有个文档来描述1621上存储空间与屏上元素的对应关系. 不然不知道怎么设置. 但供应商又说是没有这样的文档的. 说屏是标准的, 不需要资料. 想问一下这种屏是不是一般相同的, 或者都是有这样的文档啊?
NE5532 发表于 2010-6-6 16:14 | 显示全部楼层
TN屏一般都是定制的,是按你们公司的要求做的,他们不会知道什么1621不1621的,只知道com端和seg端与屏幕上元素的对应关系,就是引脚逻辑分布图,找他们要这个,或者资料就在你们开发部自己里面。就算是标准产品,也得提供逻辑图,不然怎么驱动?

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

上面两者共同构成寄存器到屏幕元素的映射关系。
NE5532 发表于 2010-6-6 16:14 | 显示全部楼层
如果上面的资料都掉了,你又实在找不到人问,就写测试程序一个元素一个元素的测。
xwj 发表于 2010-6-6 16:14 | 显示全部楼层
本帖最后由 xwj 于 2010-6-6 16:15 编辑

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


而没有资料的话,自己测试也很简单,你逐位逐位的把每一位置位、延时1秒,置位下一位,再延时1秒...
很快就能画出对应关系了。
然后就按7段码编码即可。
 楼主| lyae 发表于 2010-6-6 16:18 | 显示全部楼层
明白啦! 非常感谢 2位 版主!  NE5532 和 XWJ.

我先去测试一下, 试看找个对应关系来.
 楼主| lyae 发表于 2010-6-6 16:46 | 显示全部楼层
已经扫描出 对应表了, 发现我们的电路接错了. 现在问题可以解决啦.  多谢二位版主啊!
xwj 发表于 2010-6-6 16:57 | 显示全部楼层
呵呵,解决了就好。

小伙子做事挺快的嘛~:)
NE5532 发表于 2010-6-6 17:39 | 显示全部楼层
效率,赞一个!
zhiyonghe 发表于 2010-6-6 18:04 | 显示全部楼层
不到不半小时就搞定,程序加测试!!确实该赞!!!
一叶倾城wwq 发表于 2020-7-9 17:45 | 显示全部楼层
合泰 发表于 2020-7-10 11:46 | 显示全部楼层
我们具有最高fae级别的技术支持  如果有大佬搞不定的联系我3361807052 13534142374微信同号
芯片彭于晏 发表于 2020-7-13 10:29 | 显示全部楼层
我们这边有合泰原厂工程师可以提供技术支持哦,V18576740188
luckmanliang 发表于 2020-7-14 01:08 | 显示全部楼层
走了不少弯路,名师一句话就点通了
cpu51 发表于 2021-5-2 09:22 | 显示全部楼层
本帖最后由 cpu51 于 2021-5-2 09:25 编辑

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

本版积分规则

个人签名:nothing...

20

主题

61

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部