微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 测试段码液晶

测试段码液晶

时间:10-02 整理:3721RD 点击:
       捡了一块电子称上的段码LCD液晶,驱动器为TM1621。一直未测试其好坏,今天抽空搜了下资料,点亮了LCD,其中有块液晶缺段,可能是LCD有问题,也可能是TM1621性能不良。
移植的mbed测试代码

  1. #include "mbed.h"

  2. DigitalOut HT1621_CS(P0_28);
  3. DigitalOut HT1621_WR(P0_16);
  4. DigitalOut HT1621_DAT(P0_17);
  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. #define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com
  8. #define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
  9. #define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器
  10. #define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
  11. #define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压
  12. #define XTAL 0x28 //0b1000 0010 1000 外部接时钟
  13. #define RC256 0X30 //0b1000 0011 0000 内部时钟
  14. #define TONEON 0X12 //0b1000 0001 0010 打开声音输出
  15. #define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
  16. #define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗

  17. uchar  Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  18. 0x00,0x00,0x00,0x00,0x00};
  19. void Ht1621_Init(void); // - - 初始化 HT1621
  20. void Ht1621Wr_Data(uchar Data,uchar cnt); // - - HT1621 写入数据函数
  21. void Ht1621WrCmd(uchar Cmd); // - - HT1621 写入命令函数
  22. void Ht1621WrOneData(uchar Addr,uchar Data); // - - HT1621 在指定地址写入数据函数
  23. void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt); // - - HT1621 连续写入数据函数

  24. void Ht1621_Init(void)
  25. {
  26. HT1621_CS=1;
  27. HT1621_WR=1;
  28. HT1621_DAT=1;
  29. wait_ms(500); // - - 延时使LCD工作电压稳定
  30. Ht1621WrCmd(BIAS);
  31. Ht1621WrCmd(RC256); // - - 使用内部振荡器
  32. Ht1621WrCmd(SYSDIS); // - - 关振系统荡器和LCD偏压发生器
  33. Ht1621WrCmd(WDTDIS); // - - 禁止看门狗
  34. Ht1621WrCmd(SYSEN); // - - 打开系统振荡器
  35. Ht1621WrCmd(LCDON); // - - 打开声音输出
  36. }

  37. void Ht1621Wr_Data(uchar Data,uchar cnt)
  38. {
  39. uchar i;
  40. for (i=0;i<cnt;i++)
  41. {
  42. HT1621_WR=0;
  43. wait_us(10);
  44. HT1621_DAT=Data&0x80;
  45. wait_us(10);
  46. HT1621_WR=1;
  47. wait_us(10);
  48. Data<<=1;
  49. }
  50. }

  51. void Ht1621WrCmd(uchar Cmd)
  52. {
  53. HT1621_CS=0;
  54. wait_us(10);
  55. Ht1621Wr_Data(0x80,4); // - - 写入命令标志100
  56. Ht1621Wr_Data(Cmd,8); // - - 写入命令数据
  57. HT1621_CS=1;
  58. wait_us(10);
  59. }

  60. void Ht1621WrOneData(uchar Addr,uchar Data)
  61. {
  62. HT1621_CS=0;
  63. Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
  64. Ht1621Wr_Data(Addr<<2,6); // - - 写入地址数据
  65. Ht1621Wr_Data(Data<<4,4); // - - 写入数据
  66. HT1621_CS=1;
  67. wait_us(10);
  68. }

  69. void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
  70. {
  71. uchar i;
  72. HT1621_CS=0;
  73. Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
  74. Ht1621Wr_Data(Addr<<2,6); // - - 写入地址数据
  75. for (i=0;i<cnt;i++)
  76. {
  77. Ht1621Wr_Data(*p,8); // - - 写入数据
  78. p++;
  79. }
  80. HT1621_CS=1;
  81. wait_us(10);
  82. }

  83. int main() {           
  84.   
  85.    uchar i,j,t;
  86. Ht1621_Init(); // - - 上电初始化LCD
  87. wait(5); // - - 延时一段时间
  88. wait(2);
  89. Ht1621WrAllData(0,Ht1621Tab,16); // - - 清除1621寄存器数据,清屏
  90. for (i=0;i<32;i++)
  91. {
  92. t=0x01;
  93. for (j=0;j<4;j++)
  94. {
  95. Ht1621WrOneData(i,t);
  96. t<<=1;
  97. t++;
  98. wait_ms(500);
  99. }
  100. }
  101. while(1){

  102. }
  103. }

复制代码



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top