找回密码
 立即注册
查看: 691|回复: 10

Ai8H2K32U驱动HT1621再驱动段码LCD

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-04 07:48:56

2

主题

4

回帖

274

积分

中级会员

积分
274
发表于 2024-9-30 14:14:07 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-9-30 21:14 编辑

问题:想让第一位数字显示8,结果显示 hhhh
1、原理图:

截图202409301411258913.jpg

2、代码:
LCD.C代码

#include <STC8.H>
#include "LCD.h"
#include <intrins.h>
sbit HT1621_CS =P1^3;
sbit HT1621_WR =P1^6;
sbit HT1621_Data = P1^5;
void Delay10ms(void)        //@11.0592MHz
{
        unsigned char data i, j;

        _nop_();
        _nop_();
        i = 144;
        j = 157;
        do
        {
                while (--j);
        } while (--i);
}
void Delay10us(void)        //@11.0592MHz
{
        unsigned char data i;

        _nop_();
        _nop_();
        i = 1;
        while (--i);
}

void WriteDatatoHT1621(unsigned char dat,unsigned char num)
{
    unsigned char i;
    for(i = 0 ; i<num; i++)
    {
        HT1621_WR = 0;
        Delay10us();
        if(((dat & 0x80)>>7)==1)
        {
            HT1621_Data = 1;
        }
        else
        {
            HT1621_Data = 0;
        }
        Delay10us();
        HT1621_WR = 1;
        Delay10us();
        dat<<=1;
    }
}
void WritetoHT1621(unsigned char addr,unsigned char dat,unsigned char mode)
{
    HT1621_CS = 0;
    WriteDatatoHT1621(mode,3);
    WriteDatatoHT1621(addr<<2,6);
    WriteDatatoHT1621(dat<<4,4);
    HT1621_CS = 1;
   // Delay10us();
}
void WriteCmctoHT1621(unsigned char cmd)
{
   
   
    HT1621_CS = 0;
    //Delay10us();
    WriteDatatoHT1621(0x80,3);
    WriteDatatoHT1621(cmd,8);
    HT1621_CS = 1;
   // Delay10us();
}
void HT1621_Init()
{
        P1M0 &= ~0xe8; P1M1 &= ~0xe8;

    HT1621_CS = 1;
    HT1621_WR = 1;
    HT1621_Data = 1;
    Delay10ms();
    WriteCmctoHT1621(SYSEN);
    WriteCmctoHT1621(RC256K);
    WriteCmctoHT1621(BIAS);
    WriteCmctoHT1621(LCDON);
    //WriteCmctoHT1621();
   
   
}

main.c

#include <STC8.H>
#include <stdio.h>
#include "UART.h"
#include "LCD.h"
bit flag1s = 0;


void Timer0_Init(void)                //2毫秒@11.0592MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x9A;                                //设置定时初始值
        TH0 = 0xA9;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
    ET0 = 1;
}


void main()
{
    int a = 0;
    float b=3.14;
    EA = 1;
    Timer0_Init();
    Uart_Init();
    HT1621_Init();
    while(1)
    {
        if(flag1s)
        {
            flag1s = 0;
            a++;
            printf("hello word!%d,%f\r\n",a,b);
            WritetoHT1621(0x00, 0xff,0x80);
            WritetoHT1621(0x01, 0xff,0x80);
           
        }
        
     
    }
}


void timer0_interrupt() interrupt 1
{
    static unsigned int tmr1s = 0;
    tmr1s ++;
   
    if(tmr1s ==500)
    {
        tmr1s = 0;
        flag1s = 1;
    }
}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-04 07:48:56

2

主题

4

回帖

274

积分

中级会员

积分
274
发表于 2024-9-30 14:16:17 | 显示全部楼层
补充:效果图
微信图片_20240930141530.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

907

积分

高级会员

积分
907
发表于 2024-9-30 16:31:03 来自手机 | 显示全部楼层
REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-9-30 21:22:08 | 显示全部楼层
LCD因为ITO走线不能交叉的原因,段码和数码管不一样,可能是数据不对
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-05-02 11:40:42

43

主题

336

回帖

595

积分

高级会员

积分
595
发表于 2024-10-11 07:05:44 | 显示全部楼层
求单文件代码。谢谢谢谢。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:299
  • 最近打卡:2025-05-03 08:05:19
已绑定手机

4

主题

339

回帖

1566

积分

金牌会员

积分
1566
发表于 2024-10-11 17:28:18 | 显示全部楼层
核对液晶的逻辑图,看看是不是和代码不匹配
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-05-02 11:40:42

43

主题

336

回帖

595

积分

高级会员

积分
595
发表于 2024-10-24 08:08:11 | 显示全部楼层
代码崩溃!!!
  1. /*****************************************************************************
  2. *版权信息:深圳天微电子有限公司
  3. *文 件 名:TM1621D-V1.0
  4. *当前版本:V1.0
  5. *MCU 型号:STC12C5608AD
  6. *开发环境:Keil uVision4
  7. *晶震频率:11.0592MHZ      
  8. *完成日期:2013-08-07
  9. *程序功能:1.LCD驱动:LCD屏所接SEG显示0~5
  10. *免责声明:1.此程序为TM1621D驱动LCD演示程序,仅作参考之用。
  11.             2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任            
  12. ********************************************************************************/
  13. #include <COMM/STC8H.h>                                         //MCU头文件
  14. #include "intrins.h"                                         //包含nop指令头文件
  15. #define uchar unsigned char                                 //数据类型宏定义
  16. #define uint unsigned int                                 //数据类型宏定义
  17. #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
  18. /******************TM1621D模块命令定义*********************/
  19. #define SYSDIS   0x00         //关系统振荡器和LCD偏压发生器        
  20. #define SYSEN    0x02    //打开系统振荡器        
  21. #define LCDOFF   0x04     //关LCD偏压
  22. #define LCDON    0x06     //开LCD偏压
  23.                                                          
  24. #define RC       0x30     //内部RC振荡        
  25. #define BIAS     0x52     //1/3偏压 4公共口        
  26. /********************定义控制端口**********************/
  27. sbit CS=P1^7;
  28. sbit WRITE=P1^5;
  29. sbit DATA=P1^6;
  30. /********************定义数据*************************/
  31. uchar code Smg[16]={0xeb,0x60,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};  //0~F字型码
  32. uchar code Tab0[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //清屏
  33. /********************延时函数*************************/
  34. void delay_nms(uint n)
  35. {
  36.    uint i;
  37.    while(n--)
  38.      for(i=0;i<500;i++);
  39. }
  40. /********************从高位写入数据*************************/
  41. void Write_Data_H(uchar Data, uchar Cnt)           //Data的高cnt位写入TM1621D,高位在前
  42. {
  43. uchar i;
  44. for(i=0;i<Cnt;i++)
  45. {
  46.   WRITE=0;
  47.   if(Data&0x80)                                   //从最高位发送
  48.     DATA=1;               
  49.   else
  50.     DATA=0;
  51.   nop;
  52.   nop;
  53.   WRITE=1;
  54.   Data<<=1;
  55. }
  56. WRITE=0;
  57. DATA=0;
  58. }
  59. /********************从低位写入数据*************************/
  60. void Write_Data_L(uchar Data,uchar Cnt) //Data 的低cnt位写入TM1621D,低位在前
  61. {
  62. unsigned char i;
  63. for(i=0;i<Cnt;i++)
  64. {
  65.    WRITE=0;
  66.    if(Data&0x01)                                 //从低位发送
  67.      DATA=1;  
  68.    else
  69.      DATA=0;
  70.         nop;
  71.         nop;
  72.         WRITE=1;
  73.         Data>>=1;
  74. }
  75.   WRITE=0;
  76.   DATA=0;  
  77. }
  78. /********************写入控制命令*************************/
  79. void WriteCmd(uchar Cmd)
  80. {
  81. CS=0;
  82. nop;
  83. Write_Data_H(0x80,4);     //写入命令标志100
  84. Write_Data_H(Cmd,8);      //写入命令数据
  85. CS=1;
  86. nop;
  87. }
  88. /*********指定地址写入数据,实际写入后4位************/
  89. void WriteOneData(uchar Addr, uchar Data)
  90. {
  91. CS=0;
  92. Write_Data_H(0xa0,3);     //写入数据标志101
  93. Write_Data_H(Addr<<2,6);  //写入地址数据
  94. Write_Data_L(Data,4);     //写入数据
  95. CS=1;
  96. nop;
  97. }
  98. /*********连续写入方式,每次数据为8位,写入数据************/
  99. void WriteAllData(uchar Addr,uchar *p,uchar cnt)
  100. {
  101. uchar i;
  102. CS=0;
  103. Write_Data_H(0xa0,3);          //写入数据标志101
  104. Write_Data_H(Addr<<2,6);        //写入地址数据
  105. for(i=0;i<cnt;i++)                //写入数据
  106. {
  107.    Write_Data_L(*p,8);            
  108.    p++;
  109. }
  110. CS=1;
  111. nop;
  112. }
  113. /*******************TM1621D初始化**********************/
  114. void TM1621D_init()
  115. {
  116. CS=1;
  117. WRITE=1;
  118. DATA=1;
  119. nop;
  120. delay_nms(1);                        
  121. WriteCmd(BIAS);                 //1/3偏压 4公共口
  122. WriteCmd(RC);                         //内部RC振荡
  123. WriteCmd(SYSDIS);                 //关系统振荡器和LCD偏压发生器
  124. WriteCmd(SYSEN);                 //打开系统振荡器
  125. WriteCmd(LCDON);                 //开LCD偏压
  126. }
  127. void main()
  128. {
  129.                 P1M0 &= ~0xe0; P1M1 &= ~0xe0; // P1.5 1.6 1.7  准双向口用于操作1621
  130.        
  131.        
  132.        
  133.        
  134.        
  135.        
  136.        
  137.        
  138.        
  139.        
  140.        
  141. TM1621D_init();                //开机初始化
  142. delay_nms(1);
  143. WriteAllData(0,Tab0,16);         //LCD清显存
  144. while(1)
  145. {
  146.   WriteAllData(0xF8,Smg,0xAA);          //LCD SEG10到SEG21显示0~5
  147.        
  148. }
  149. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-04 07:48:56

2

主题

4

回帖

274

积分

中级会员

积分
274
发表于 2024-10-24 11:00:11 | 显示全部楼层
谢谢
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:379
  • 最近打卡:2025-05-02 11:40:42

43

主题

336

回帖

595

积分

高级会员

积分
595
发表于 2024-10-28 16:58:07 来自手机 | 显示全部楼层
这个功能代码我已经调试了一周多了。是显示出来之后一周多了。依然不能改变显示效果。分不清是单片机的问题还是。1621的问题。还是屏幕的问题。单片机的问题吧,单片人已经把数据给了1621。1621这边只显示一种。感觉1621的问题比较大,但是怎么会呢?崩溃崩溃崩崩溃了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-04-30 08:31:04

0

主题

14

回帖

536

积分

高级会员

积分
536
发表于 2024-10-31 20:54:17 | 显示全部楼层
段码LCD 占空比 偏压 工作电压 都对不
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:11 , Processed in 0.277051 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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