5115|2

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

HT1622的使用问题,望牛人告知! [复制链接]

硬件结构图

这是我的源代码:

  1. #include
  2. #include

  3. typedef unsigned char byte;
  4. typedef unsigned int byte2;
  5. typedef unsigned long byte4;

  6. typedef byte bool;
  7. #define TRUE 1
  8. #define FALSE 0

  9. sbit CS = P0^0;
  10. sbit WR_CLK = P0^1;
  11. sbit DATA = P0^2;

  12. byte addr_count = 0;
  13. const byte dat_buf[ 100 ] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
  14.                               21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
  15.                                                           41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
  16.                                                           61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
  17.                                                           81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99};
  18. sbit STAT = P1^7;

  19. // HT1622 Write Operation
  20. void TurnOnLCD( bool openState );  // to enable system oscillator and to turn on LCD display
  21.                                    // if openstate is TRUE, then turn on the LCD display, and enbale system oscillator
  22.                                                                    // otherwisr, turn off the LCD display, and disable system osillator
  23. void WriteHalfByte( byte addr, byte dat );

  24. void Ext0Svr();
  25. void Ext1Svr();

  26. void main()
  27. {
  28.         byte index  = 0;
  29.         _nop_();
  30.         P3 = 0x0F;

  31.         EA = 1;
  32.         EX0 = 1;
  33.         IT0 = 1;
  34.         EX1 = 1;
  35.         IT1 = 1;
  36.         STAT = 1;
  37.         while ( TRUE );
  38. }
  39. ////////////////////////////////////////////////////////
  40. void TurnOnLCD( bool openState )
  41. {
  42.         byte4 cmd_frame = 0;
  43.         byte bit_count = 21;

  44.         if ( openState )
  45.         {
  46.                 cmd_frame = 0x80203000;
  47.                 // this frame include comamnd ID( 1 0 0 ),  SYS EN ID( 0 0 0 0 0 0 1 0 x )
  48.                 // and TURB ON DISPLAY ID ( 0 0 0 0 0 0 1 1 x )
  49.         }
  50.         else
  51.         {
  52.                 cmd_frame = 0x80202000;
  53.                 // this frame include comamnd ID( 1 0 0 ),  SYS EN ID( 0 0 0 0 0 0 1 0 x )
  54.                 // and TURB ON DISPLAY ID ( 0 0 0 0 0 0 1 0 x )
  55.         }

  56.         CS = 0;  // Select the chip HT1622 to be valid
  57.         _nop_();
  58.         _nop_();
  59.         WR_CLK = 1;
  60.         while ( bit_count -- )
  61.         {
  62.                 WR_CLK = 0;
  63.                 DATA = ( cmd_frame & 0x80000000 ) == 0x80000000 ? 1 : 0;
  64.                 /*delay for 24 us*/
  65.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  66.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  67.                
  68.                 WR_CLK = 1;
  69.                 /*delay for 9 us*/
  70.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  71.                 cmd_frame = _lrol_( cmd_frame, 1 );
  72.         }
  73.         CS = 1;
  74.        
  75. }

  76. void WriteHalfByte( byte addr, byte dat )
  77. {
  78.         byte2 write_frame = 0, temp_buf;   //用来封装生成的帧
  79.         byte index = 0;

  80.         write_frame = 0xA000;    //封装写操作的指令码 1 0 1

  81.         temp_buf = _irol_( (byte2) addr, 7 );
  82.         write_frame += temp_buf;  //封装地址A5-A0
  83.        
  84.         dat &= 0x0F;
  85.         temp_buf = 0;
  86.        
  87.         for ( ; index < 4; index ++ )
  88.         {
  89.                
  90.                 if ( ( dat & 0x01 ) == 0x01 )
  91.                 {
  92.                         temp_buf += _irol_( (byte2)1, 6 - index );
  93.                                
  94.                 }
  95.                 dat = _cror_( dat, 1 );
  96.         }
  97.        
  98.         _nop_();

  99.         write_frame += temp_buf;  //封装半字节数据D0-D3

  100.         index = 13;
  101.         CS = 0;  // Select the chip HT1622 to be valid
  102.         _nop_();
  103.         _nop_();
  104.         WR_CLK = 1;
  105.         while ( index -- )
  106.         {
  107.                 /*delay for 30 us*/
  108.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  109.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  110.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  111.                
  112.                 WR_CLK = 0;
  113.                 /*delay for 24 us*/
  114.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  115.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  116.                 _nop_();_nop_();_nop_();_nop_();
  117.                
  118.                 DATA = (write_frame & 0x8000 ) == 0x8000 ? 1 : 0;
  119.                 /*delay for 30 us*/
  120.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  121.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  122.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  123.                 WR_CLK = 1;
  124.                 write_frame = _irol_( write_frame, 1 );

  125.         }
  126.         CS = 1;
  127. }

  128. void Ext0Svr() interrupt 0
  129. {
  130.         for ( addr_count = 0; addr_count < 100; addr_count ++ )
  131.         {
  132.                  WriteHalfByte( addr_count, dat_buf[ addr_count ] );
  133.         }

  134. }

  135. void Ext1Svr() interrupt 2
  136. {
  137.         STAT = ~STAT;
  138.         TurnOnLCD( STAT );
  139. }
复制代码


板子是从别人那里拿的,自己从学习版上面接出来链接HT1622。
仔细对照的datasheet写的程序,可是就是一点反应没有!
望牛人助我!

最新回复

有IC 驱动程序可以提供,完美替代兼容HT1622 LQFP48 LQFP44 LQFP52 LQFP64 QFP64 QQ 191 888 5898 ,另外还有工程技术支持!  详情 回复 发表于 2018-7-23 16:23
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 


  1. //定义HT1622的命令和数据
  2. #define  RCosc      0x30  //内部RC振荡器(上电默认)1000 0011 0000
  3. #define  LCD_on     0x06  //打开LCD 偏压发生器    1000 0000 0110
  4. #define  LCD_off    0x04  //打开LCD 偏压发生器    1000 0000 0100
  5. #define  Sys_en     0x02  //系统振荡器开          1000 0000 0010
  6. #define  Sys_dis    0x00  //系统振荡器开          1000 0000 0000
  7. #define  Tim_dis    0x00  //系统振荡器开          1000 0000 1000
  8. #define  Wtd_dis    0x00  //系统振荡器开          1000 0000 1010
  9. #define  Ton_off    0x00  //系统振荡器开          1000 0001 0000
  10. #define  lcd_wr          5
  11. #define  lcd_cs          4
  12. #define  lcd_da          6
  13. #define  LCDPORT        PORTA
  14. //定义简单的命令
  15. #define SETLCDWR()  LCDPORT|=1<
  16. #define CLRLCDWR()  LCDPORT&=~(1<
  17. #define SETLCDCS()  LCDPORT|=1<
  18. #define CLRLCDCS()  LCDPORT&=~(1<
  19. #define SETLCDDA()  LCDPORT|=1<
  20. #define CLRLCDDA()  LCDPORT&=~(1<
  21. /**-------------------------------------------------------------------------
  22. Name: SendBit_1622(送数据程序)
  23. INPUT: sdata 送入的数据  cnt  数据的长度
  24. ---------------------------------------------------------------------------*/
  25. void SendBit_1622(uchar sdata,uchar cnt) //sdata 的高cnt 位写入HT1622,高位在前
  26. {
  27. uchar i;
  28. for(i=0;i
  29.   {
  30.    if(sdata&0x80) SETLCDDA();
  31.    else CLRLCDDA();
  32.    CLRLCDWR();
  33.    SETLCDWR();
  34.    sdata<<=1;
  35.    }
  36. }
  37. /**-------------------------------------------------------------------------
  38.                   Name: SendCmd(送命令)
  39. ---------------------------------------------------------------------------*/
  40. void SendCmd_1622(uchar command)
  41. {
  42. CLRLCDCS();
  43. SendBit_1622(0x80,4);    //写入标志码“100”和9 位command 命令,由于
  44. SendBit_1622(command,8); //没有使有到更改时钟输出等命令,为了编程方便
  45. SETLCDCS();                     //直接将command 的最高位写“0”
  46. }
  47. /**-------------------------------------------------------------------------
  48.                   Name: Write_1622(送数据和命令程序)
  49. ---------------------------------------------------------------------------*/
  50. void Write_1622(uchar addr,uchar sdata,uchar longth)
  51. {
  52. addr<<=2;
  53. CLRLCDCS();
  54. SendBit_1622(0xa0,3);     //写入标志码“101”
  55. SendBit_1622(addr,6);     //写入addr 的高6位
  56. SendBit_1622(sdata,longth);    //写入data 的高long位
  57. SETLCDCS();
  58. }

  59. /**-------------------------------------------------------------------------
  60.                           Name: all_off(清除1622显示)
  61. ---------------------------------------------------------------------------*/

  62. void HT1622_all_off(void)
  63. { uchar i;
  64. CLRLCDCS();
  65. SendBit_1622(0xa0,3);     //写入标志码“101”
  66. SendBit_1622(0,6);     //写入addr 的高6位
  67.   for(i=0;i<64;i++)
  68.   SendBit_1622(0,4);    //写入data 的高long位
  69. SETLCDCS();
  70. }
  71. /****************************************************************************
  72.                           Name: Init_1622(初始化1622)
  73. *****************************************************************************/
  74. void Init_1622(void)
  75. {   
  76. SendCmd_1622(RCosc);  
  77. SendCmd_1622(Sys_en);
  78. SendCmd_1622(LCD_on);
  79. }

  80. void show_all(void)//show all the memery
  81. {
  82. uchar i;
  83. CLRLCDCS();
  84. SendBit_1622(0xa0,3);     //写入标志码“101”
  85. SendBit_1622(0,6);     //写入addr 的高6位
  86.   for(i=0;i<64;i++)
  87.   SendBit_1622(disp_buff[i],4);    //写入data 的高long位
  88. SETLCDCS();
  89. SETLCDDA();
  90. SETLCDWR();
  91. }

复制代码

希望对你有帮助,绝对可用,
我的是使用avr单片机的,主要在以下部分改为51的定义即可
#define  lcd_wr          5
#define  lcd_cs          4
#define  lcd_da          6
#define  LCDPORT        PORTA
//定义简单的命令
#define SETLCDWR()  LCDPORT|=1< #define CLRLCDWR()  LCDPORT&=~(1< #define SETLCDCS()  LCDPORT|=1< #define CLRLCDCS()  LCDPORT&=~(1< #define SETLCDDA()  LCDPORT|=1< #define CLRLCDDA()  LCDPORT&=~(1<
例如
#define SETLCDWR()  P1^0=1
#define CLRLCDWR()  P1^0=0
#define SETLCDCS()  P1^1=1
#define CLRLCDCS()  P1^1=0
#define SETLCDDA()  P1^2=1
#define CLRLCDDA()  P1^2=0
也可以改为
#define  lcd_wr          0   //P1.0
#define  lcd_cs          1   //P1.1
#define  lcd_da          2   //P1.2
#define  LCDPORT        P1
//定义简单的命令
#define SETLCDWR()  LCDPORT|=1< #define CLRLCDWR()  LCDPORT&=~(1< #define SETLCDCS()  LCDPORT|=1< #define CLRLCDCS()  LCDPORT&=~(1< #define SETLCDDA()  LCDPORT|=1< #define CLRLCDDA()  LCDPORT&=~(1<

 
 

回复

42

帖子

15

TA的资源

一粒金砂(中级)

板凳
 

有IC 驱动程序可以提供,完美替代兼容HT1622 LQFP48 LQFP44 LQFP52 LQFP64 QFP64
QQ 191 888 5898 ,另外还有工程技术支持!

HT1621B替代HT1622取代HT1623兼容HT1625代替HT1626 中文资料 .pdf

319.13 KB, 下载次数: 6

VK1622B LQFP48液晶驅動IC.pdf

600.82 KB, 下载次数: 4

 
个人签名联系人:许先生 QQ:1918885898  电话:18898582398  免费样品赠送,工程技术支持,PDF产品资料提供!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表