找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5658|回复: 3
收起左侧

HT1621显示屏驱动芯片单片机源程序(不带字库)与资料

[复制链接]
ID:152434 发表于 2018-1-12 14:17 | 显示全部楼层 |阅读模式
0.png
HT1621是128 点内存映象和多功能的LCD 驱动器 , HT1621 的软件配置特性使它适用于多种 LCD 应用场合,包括 LCD 模块和显示子系统。用于连接主控制器和HT1621 的管脚只有 4 或 5 条, HT1621 还有一个节电命令用于降低系统功耗。在虎风所做的这个系统中 ht1621 用于驱动一个静态的 LCD 液晶显示器。液晶显示的方式分为静态显示和动态显示 。 静态与动态的区别在于静态显示是持续供电的 , 而动态显示是利用人的视觉停留效果 , 快速扫描数码管各个段 , 让人在视觉上感觉到数码管是同时显示的。
0.jpg 0.jpg

各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶
程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平

打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子大家帮我看看是什么问题,谢谢了下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的

单片机源程序如下:
  1. 各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶
  2. 程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形
  3. 刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平

  4. 打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子
  5. 大家帮我看看是什么问题,谢谢了
  6. 下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的

  7. //STC12C5204AD单片机控制HT1621B驱动LCD
  8. #include <STC12C52XXAD.h>
  9. #include <stdio.h>
  10. #include <intrins.h>
  11. #define BIAS 0X52             //1/3偏压,4背极
  12. #define RC256K 0X30           //系统时钟选择为片内RC振荡器
  13. #define WDTDIS1 0X0A           //禁止WDT溢出标志输出
  14. #define TIMERDIS 0X08           //时基输出禁止
  15. #define SYSEN 0X02              //打开系统时钟
  16. #define SYSDIS 0X00             //关闭系统时钟和偏压发生器
  17. #define LCDON 0X06            //打开LCD偏压发生器
  18. #define LCDOFF 0X04        //关闭LCD偏压发生器
  19. #define TONEON  0X12       //打开音频输出
  20. #define TONEOFF 0X10       //关闭音频输出  
  21. #define CS P3_2
  22. #define WR P3_4
  23. #define DATA P3_5

  24. #define uchar unsigned char
  25. #define uint unsigned int
  26. /***************************延时子函数******************************/
  27. void delay(uchar i)                   //j=12延时约4.3us
  28. {

  29.   while(i--)
  30.   {
  31.    uchar j=0;
  32.    while(j<8)
  33.    j++;
  34.   }
  35. }
  36. void SendBit_1621(uchar dat ,uchar cnt)
  37. {
  38. uchar i;
  39. for(i =0; i <cnt; i ++)
  40. {
  41.   if((dat&0x80)==0)
  42.   DATA=0;
  43.   else DATA=1;
  44.   WR=0;
  45.   delay(2);  
  46.   WR=1;
  47.         dat=dat<<1;
  48. }
  49. }

  50. void SendDataBit_1621(uchar dat,uchar cnt)
  51. {
  52. uchar i;
  53. for(i =0; i <cnt; i ++)
  54. {
  55.   if((dat&0x01)==0) DATA=0;
  56.   else DATA=1;
  57.   WR=0;
  58.   delay(2);
  59.   WR=1;
  60.   dat=dat>>1;
  61. }
  62. }
  63. void SendCmd(uchar command)
  64. {
  65. CS=0;
  66. _nop_();
  67. _nop_();
  68. SendBit_1621(0x80,4);
  69. SendBit_1621(command,8);
  70. CS=1;
  71. }
  72. void Write_1621(uchar addr,uchar dat)
  73. {
  74. CS=0;
  75. _nop_();
  76. _nop_();
  77. SendBit_1621(0xa0,3);
  78. SendBit_1621(addr,6);
  79. SendDataBit_1621(dat,4);
  80. CS=1;
  81. }
  82. void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
  83. {
  84. uchar i;
  85. CS=0;
  86. _nop_();
  87. _nop_();
  88. SendBit_1621(0xa0,3);
  89. SendBit_1621(addr,6);
  90. for(i =0; i <cnt; i ++,p++)
  91. {
  92.   SendDataBit_1621(*p,8);
  93. }
  94. CS=1;
  95. }
  96. /*******************************主函数******************************/
  97. main()                                    
  98. {
  99. uchar a[10];
  100. a[0]=0xFF;a[1]=0xFF;a[2]=0xFF;a[3]=0xFF;a[4]=0xFF;
  101. a[5]=0xFF;a[6]=0xFF;a[7]=0xFF;a[8]=0xFF;a[9]=0xFF;
  102. a[10]=0xFF;a[11]=0xFF;a[12]=0xFF;a[13]=0xFF;a[14]=0xFF;
  103. a[15]=0xFF;

  104. SendCmd(BIAS);
  105. SendCmd(SYSEN);
  106. SendCmd(LCDON);
  107. // SendCmd(RC256K);
  108. WriteAll_1621(0,a,16);
  109. // SendCmd(LCDOFF);  


  110. }
  111. LCD驱动程序 适用于HT1621
  112. //=============================================================================
  113. #define Lcd_Delay _nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
  114. void  Lcd_Data(uchar Start,uchar cData)
  115. //将数据当中的字节与LCD上的进行同步
  116. // Start    --要开始同页面地址,每个页面为4个有效位,总其为32X4字节
  117. // Length   --要同步的页面数量
  118. {
  119.         uchar i;
  120.         LCD_CS=0;
  121.         Lcd_Delay;
  122.         Lcd_Delay;
  123.         Lcd_Delay;
  124.           //Send ID 101B
  125.           LCD_CLK=0;
  126.           Lcd_Delay;
  127.           LCD_IO=1;
  128.           Lcd_Delay;
  129.           LCD_CLK=1;
  130.           Lcd_Delay;
  131.           LCD_CLK=0;
  132.           Lcd_Delay;
  133.           LCD_IO=0;
  134.           Lcd_Delay;
  135.           LCD_CLK=1;
  136.           Lcd_Delay;
  137.           LCD_CLK=0;
  138.           Lcd_Delay;
  139.           LCD_IO=1;
  140.           Lcd_Delay;
  141.           LCD_CLK=1;
  142.           Lcd_Delay;
  143.           //Send Address 6bit
  144.           Start=Start*2;
  145.           for(i=0;i<6;i++)
  146.     {
  147.               if(Start&0x20) LCD_IO=1;
  148.               else LCD_IO=0;
  149.               Lcd_Delay;
  150.               LCD_CLK=0;
  151.               Lcd_Delay;
  152.               Start=Start<<1;
  153.               LCD_CLK=1;
  154.               Lcd_Delay;
  155.     }
  156.     //Send data 8bit
  157.     for(i=0;i<8;i++)
  158.     {
  159.               if(cData&0x01) LCD_IO=1;
  160.               else LCD_IO=0;
  161.               Lcd_Delay;
  162.               LCD_CLK=0;
  163.               Lcd_Delay;
  164.               cData=cData>>1;
  165.               LCD_CLK=1;
  166.               Lcd_Delay;
  167.     }
  168.         LCD_CS=1;
  169.         Lcd_Delay;
  170. }
  171. //=============================================================================
  172. void  Lcd_Command(uchar Command)
  173. //向指定的LCD当中写入一个命令
  174. //每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0
  175. // LcdSelect--LCD的片选确定,取值为0,1,2
  176. // Command----要写入的8位命令
  177. {
  178.         uchar i;
  179.         LCD_CS=0;
  180.         Lcd_Delay;
  181.         Lcd_Delay;
  182.         Lcd_Delay;
  183.           //Send ID 100B
  184.           LCD_CLK=0;
  185.           Lcd_Delay;
  186.           LCD_IO=1;
  187.           Lcd_Delay;
  188.           LCD_CLK=1;
  189.           Lcd_Delay;
  190.           LCD_CLK=0;
  191.           Lcd_Delay;
  192.           LCD_IO=0;
  193.           Lcd_Delay;
  194.           LCD_CLK=1;
  195.           Lcd_Delay;
  196.           LCD_CLK=0;
  197.           Lcd_Delay;
  198.           LCD_IO=0;
  199.           Lcd_Delay;
  200.           LCD_CLK=1;
  201.         Lcd_Delay;
  202.           for(i=0;i<8;i++)
  203.     {
  204.             LCD_CLK=0;
  205.             Lcd_Delay;
  206.               if(Command&0x80) LCD_IO=1;
  207.               else LCD_IO=0;
  208.               Command=Command<<1;
  209.               Lcd_Delay;
  210.               LCD_CLK=1;
  211.               Lcd_Delay;
  212.     }
  213.     ///最后补一个0
  214.            LCD_CLK=0;
  215.            Lcd_Delay;
  216.           LCD_IO=0;
  217.           Lcd_Delay;
  218.           LCD_CLK=1;
  219.           Lcd_Delay;
  220.         LCD_CS=1;
  221.         Lcd_Delay;
  222. }
  223. //=============================================================================
  224. void  Lcd_Refresh(void)        //重新对LCD进行刷屏
  225. {
  226.         uchar i;
  227.         for(i=0;i<LCD_BUFF_MAX;i++)
  228.                 Lcd_Data(i,lcd.buff[i]);
  229. ……………………

  230. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
HT1621(不带字库).zip (1.43 MB, 下载次数: 110)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:429142 发表于 2018-11-27 20:11 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:839438 发表于 2020-11-26 08:37 | 显示全部楼层
谢谢楼主,帮助,我下了你的附件,谢谢
回复

使用道具 举报

ID:63106 发表于 2021-7-12 18:58 | 显示全部楼层
ganxie fenxiang
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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