分享

HT1621 测试驱动程序,高手勿喷!

 zmc419 2019-01-07
最近在某宝淘元件的时候,一同买了几种段码LCD模块。。。
据说是HT1621驱动的,所以在网上搜索来搜索去。。。
下了好多代码,基本都是加了其他功能的,
对于我一个新手来说,其实要的只是驱动显示LCD的程序就可 以了。。

在不断的搜索研究中发现一位网友发布的一个HT1621测试驱动程序。。
这里我在里做了一点点修改和增加了一些备注。。。

下面上代码:
  1. // - - * * * * * * * HT1621 段码屏驱动 * * * * * * *
  2. // - - * MCU: AT89C51 单片机 *
  3. // - - * MCU-Crystal: 12M 24M 晶振 *
  4. // - - * Version: 00 版本 *
  5. // - - * Last Updata: *
  6. // - - * Author: www.ndiy.cn *
  7. // - - * Description: HT1621 段码屏驱动 *
  8. // - - * C 语言程序 *
  9. // - - * * * * * * * * * * * * * * * * * * * * * * *


  10. /********************************************************
  11. 功能描述: HT1621芯片测试程序

  12. 说 明:本测试程序能够测试HT1621的每一个字段,

  13. 依次点亮每一个字段

  14. 参数:
  15. ********************************************************/

  16. // - - 引用库
  17. #include

  18. // - - 定义函数
  19. #define uchar unsigned char
  20. #define uint unsigned int

  21. #define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com
  22. #define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
  23. #define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器
  24. #define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
  25. #define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压
  26. #define XTAL 0x28 //0b1000 0010 1000 外部接时钟
  27. #define RC256 0X30 //0b1000 0011 0000 内部时钟
  28. #define TONEON 0X12 //0b1000 0001 0010 打开声音输出
  29. #define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
  30. #define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗

  31. // - - 定义接口
  32. // - - HT1621控制位(液晶模块接口定义,根据自已的需要更改)
  33. sbit HT1621_CS=P3^2; // - - HT1621使能引脚
  34. sbit HT1621_WR=P3^3; // - - HT1621时钟引脚
  35. sbit HT1621_DAT=P3^4; // - - HT1621数据引脚

  36. // - - 定义变量,数组
  37. uchar code
  38. Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  39. 0x00,0x00,0x00,0x00,0x00};

  40. // - - 定义子程序函数
  41. void Ht1621_Init(void); // - - 初始化 HT1621
  42. void Ht1621Wr_Data(uchar Data,uchar cnt); // - - HT1621 写入数据函数
  43. void Ht1621WrCmd(uchar Cmd); // - - HT1621 写入命令函数
  44. void Ht1621WrOneData(uchar Addr,uchar Data); // - - HT1621 在指定地址写入数据函数
  45. void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt); // - - HT1621 连续写入数据函数

  46. void Ht1621_delay_10us(uint n); // - - 10微秒的延时子程序
  47. void Ht1621_delayms(uint xms); // - - 1毫秒延时程序

  48. /********************************************************
  49. 函数名称:void Ht1621_Init(void)
  50. 功能描述: HT1621初始化
  51. 全局变量:无
  52. 参数说明:无
  53. 返回说明:无
  54. 版 本:1.0
  55. 说 明:初始化后,液晶屏所有字段均显示
  56. ********************************************************/
  57. void Ht1621_Init(void)
  58. {
  59. HT1621_CS=1;
  60. HT1621_WR=1;
  61. HT1621_DAT=1;
  62. Ht1621_delayms(500); // - - 延时使LCD工作电压稳定
  63. Ht1621WrCmd(BIAS);
  64. Ht1621WrCmd(RC256); // - - 使用内部振荡器
  65. Ht1621WrCmd(SYSDIS); // - - 关振系统荡器和LCD偏压发生器
  66. Ht1621WrCmd(WDTDIS); // - - 禁止看门狗
  67. Ht1621WrCmd(SYSEN); // - - 打开系统振荡器
  68. Ht1621WrCmd(LCDON); // - - 打开声音输出
  69. }

  70. /******************************************************
  71. 函数名称:void Ht1621Wr_Data(uchar Data,uchar cnt)
  72. 功能描述: HT1621数据写入函数
  73. 全局变量:无
  74. 参数说明:Data为数据,cnt为数据位数
  75. 返回说明:无
  76. 说 明:写数据函数,cnt为传送数据位数,数据传送为低位在前
  77. *******************************************************/
  78. void Ht1621Wr_Data(uchar Data,uchar cnt)
  79. {
  80. uchar i;
  81. for (i=0;i<>
  82. {
  83. HT1621_WR=0;
  84. Ht1621_delay_10us(1);
  85. HT1621_DAT=Data&0x80;
  86. Ht1621_delay_10us(1);
  87. HT1621_WR=1;
  88. Ht1621_delay_10us(1);
  89. Data<>
  90. }
  91. }

  92. /********************************************************
  93. 函数名称:void Ht1621WrCmd(uchar Cmd)
  94. 功能描述: HT1621命令写入函数
  95. 全局变量:无
  96. 参数说明:Cmd为写入命令数据
  97. 返回说明:无
  98. 说 明:写入命令标识位100
  99. ********************************************************/
  100. void Ht1621WrCmd(uchar Cmd)
  101. {
  102. HT1621_CS=0;
  103. Ht1621_delay_10us(1);
  104. Ht1621Wr_Data(0x80,4); // - - 写入命令标志100
  105. Ht1621Wr_Data(Cmd,8); // - - 写入命令数据
  106. HT1621_CS=1;
  107. Ht1621_delay_10us(1);
  108. }

  109. /********************************************************
  110. 函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
  111. 功能描述: HT1621在指定地址写入数据函数
  112. 全局变量:无
  113. 参数说明:Addr为写入初始地址,Data为写入数据
  114. 返回说明:无
  115. 说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
  116. ********************************************************/
  117. void Ht1621WrOneData(uchar Addr,uchar Data)
  118. {
  119. HT1621_CS=0;
  120. Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
  121. Ht1621Wr_Data(Addr<2,6); -="" -="">
  122. Ht1621Wr_Data(Data<4,4); -="" -="">
  123. HT1621_CS=1;
  124. Ht1621_delay_10us(1);
  125. }

  126. /********************************************************
  127. 函数名称:void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
  128. 功能描述: HT1621连续写入方式函数
  129. 全局变量:无
  130. 参数说明:Addr为写入初始地址,*p为连续写入数据指针,
  131. cnt为写入数据总数
  132. 返回说明:无
  133. 说 明:HT1621的数据位4位,此处每次数据为8位,写入数据
  134. 总数按8位计算
  135. ********************************************************/
  136. void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
  137. {
  138. uchar i;
  139. HT1621_CS=0;
  140. Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
  141. Ht1621Wr_Data(Addr<2,6); -="" -="">
  142. for (i=0;i<>
  143. {
  144. Ht1621Wr_Data(*p,8); // - - 写入数据
  145. p++;
  146. }
  147. HT1621_CS=1;
  148. Ht1621_delay_10us(1);
  149. }

  150. void Ht1621_delay_10us(uint n) // - - 10微秒的延时子程序
  151. {
  152. uint i,j;
  153. for(i=n;i>0;i--)
  154. for(j=2;j>0;j--);
  155. }

  156. void Ht1621_delayms(uint xms) // - - 1毫秒延时程序
  157. {
  158. uint i,j;
  159. for(i = xms;i > 0;i --)
  160. for(j = 110;j > 0;j --);
  161. }


  162. /***********************************
  163. HT1621 测试程序,作为库文件请注释掉
  164. ***********************************/
  165. void main()
  166. {
  167. uchar i,j,t;
  168. Ht1621_Init(); // - - 上电初始化LCD
  169. Ht1621_delayms(5000); // - - 延时一段时间
  170. while(1){
  171. Ht1621_delayms(2000);
  172. Ht1621WrAllData(0,Ht1621Tab,16); // - - 清除1621寄存器数据,暨清屏
  173. for (i=0;i<>
  174. {
  175. t=0x01;
  176. for (j=0;j<>
  177. {
  178. Ht1621WrOneData(i,t);
  179. t<>
  180. t++;
  181. P1_5=~P1_5; // - - 循环点亮LED
  182. Ht1621_delayms(500);
  183. }
  184. }
  185. }
  186. }
经测试在12M 24M 的晶振下能正常显示。。
本代码文件可以直接注释掉main主程序,再引用来本文件即可使用。
简单明了,不用复制到你的代码中去。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多