OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3182|回复: 14

stm32f103rbt6 驱动 ht1621问题,急急急!!!

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
发表于 2018-8-21 17:38:38 | 显示全部楼层 |阅读模式
1金钱
各位老师,我现在正在用stm32f103rbt6芯片 驱动ht1621断码屏,现在怎么也调不通,没有反应(蜂鸣器都不响),请各位老师给指导下,项目着急中!!  CS--PA0  WR--PA1  DAT--PA2其他口未用,另外ht1621vdd接5v,因为lcd屏是5v的。

ht1621接线图

ht1621接线图
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 18:12:17 | 显示全部楼层
有哪位老师用过这个ht1621啊??
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 18:53:51 | 显示全部楼层
在线等。。。。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 20:02:26 | 显示全部楼层


/*硬件连接:单片机使用stm32f103rbt6的64脚芯片,来驱动HT1621B显示LCD。

   (1)单片机与HT1621之间只需连接3根线:CS,WR,DATA。

   (2)HT1621的VCC接5v(液晶片是5v的),vlcd通过10k电阻接5v电源。

   (3)ht1621与LCD之间需要把com0~com3,seg0-seg17都对应连接起来。

   软件部分:
        */

        #include "main.h"

           
    /*HT1621控制位(液晶模块接口定义)
  
    #define CLS_HT_WR     GPIO_ResetBits(GPIOA, GPIO_Pin_2)      // 拉低PA2
    #define SET_HT_WR     GPIO_SetBits(GPIOA, GPIO_Pin_2)        // 拉高PA2
   
    #define CLS_HT_CS     GPIO_ResetBits(GPIOA, GPIO_Pin_0)      // 拉低PA0
    #define SET_HT_CS     GPIO_SetBits(GPIOA, GPIO_Pin_0)        // 拉高 PA0
   
    #define CLS_HT_DAT    GPIO_ResetBits(GPIOA, GPIO_Pin_3)      // 数据位PA3
    #define SET_HT_DAT    GPIO_SetBits(GPIOA, GPIO_Pin_3)        // 数据位PA3
   */


  //  #define _Nop()  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()


    #define BIAS    0x52           // 0b1000 0101 0010  1/3duty 4com  
    #define SYSDIS  0x00           // 0b1000 0000 0000  关振系统荡器和LCD偏压发生器
    #define SYSEN   0x02           // 0b1000 0000 0010 打开系统 振荡器
    #define LCDOFF  0x04           // 0b1000 0000 0100  关LCD偏压
    #define LCDON   0x06           // 0b1000 0000 0110  打开LCD偏 压
    #define XTAL    0x28           // 0b1000 0010 1000 外部接时钟
    #define RC256   0x30           // 0b1000 0011 0000  内部时钟RC256K
    #define TONEON  0x12           // 0b1000 0001 0010  打开声音 输出
    #define TONEOFF 0x10           // 0b1000 0001 0000 关闭声音输出
    #define WDTDIS  0x0A           // 0b1000 0000 1010  禁止看门狗
    #define TONE_4K 0x80           // 4k声音输出频率
    #define TONE_2K 0xC0               // 2k声音输出频率,现用蜂鸣器为2khz频率
        #define TIM_DIS 0x08           // 关闭定时          
        #define IRQ_DIS 0x00           // IRQ禁止



   u8 Ht1621Tab[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
   u8 Ht1621Tab1[16]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};


/*******************************************************************************
* Function Name  : Delay
* Description    : Inserts a delay time.
* Input          : nCount: specifies the delay time length.
* Output         : None
* Return         : None
*******************************************************************************/

void Delay(vu32 nCount)                                                                          
{
  for(; nCount != 0; nCount--)   IWDG_ReloadCounter();
}
         

    //-----------------------------------------------------------------------------------------
    //函数名称:DelayMS()
    //功 能:延时子程序
    //-----------------------------------------------------------------------------------------
    void DelayMS(u16 iMs)
    {
     u16 i,j;
     for(i=0;i<iMs;i++)
     for(j=0;j<65;j++)
     {
      Delay(1);
     }
    }


        //-----------------------------------------------------------------------------------------
    //函数名称:Ht1621Wr_data_high(u8 Addr,u8 cnt)
    //功 能:Addr为地址变量,cnt为传送地址位数,此函数为数据高位先发出(发送地址时,高位在前)
    //-----------------------------------------------------------------------------------------
    void Ht1621Wr_Data_High(u8 Addr,u8 cnt)
    {
     u8 i;
     for (i=0;i<cnt;i++)
     {
          if((Addr & 0x80)==0x80)
          {
             SET_HT_DAT;
       
          }
          else
          {
             CLS_HT_DAT;
       
          }         
           DelayMS(20);
           CLS_HT_WR;
           DelayMS(20);
           SET_HT_WR;   
           DelayMS(20);

           Addr <<= 1;
     }
    }


    //-----------------------------------------------------------------------------------------
    //函数名称:Ht1621Wr_Data_low( )
    //功 能:写数据函数,cnt为传送数据位数,数据传送为低位在前
    //-----------------------------------------------------------------------------------------
    void Ht1621Wr_Data_Low(u8 Data,u8 cnt)
    {
     u8 i;
     for (i=0;i<cnt;i++)
     {
      if((Data & 0x01)==0x01)
      {
         SET_HT_DAT;
      }
      else
      {
         CLS_HT_DAT;
      }         
           DelayMS(20);
       CLS_HT_WR;
       DelayMS(20);
       SET_HT_WR;   
       DelayMS(20);

       Data >>=1 ;
     }
    }


    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
    //功能描述: HT1621在指定地址写入数据函数
    //参数说明:Addr为写入初始地址,Data为写入数据
    //说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
    //-----------------------------------------------------------------------------------------
    void Ht1621WrOneData(u8 Addr,u8 Data)
    {
     CLS_HT_CS;  
     DelayMS(3);

     Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
     Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
     Ht1621Wr_Data_Low(Data,4); //写入数据

     SET_HT_CS;//
     DelayMS(3);


    }
    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621WrOneNum(uchar Addr,uchar Num)
    //功能描述: HT1621在指定地址写入一个数字(0-9)函数
    //参数说明:Addr为写入初始地址,Num为写入数据
    //说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
    //-----------------------------------------------------------------------------------------

    void Ht1621WrOneNum(u8 Addr,u8 num)
    {
     CLS_HT_CS;//HT1621_CS=0;  
     DelayMS(5);

     Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
     Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
     Ht1621Wr_Data_Low(num,8);//写一个完整的数。就是连续写两个数。

     SET_HT_CS;//  
     DelayMS(5);   


    }
    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621WrAllData()
    //功能描述: HT1621连续写入方式函数
    //说 明:HT1621的数据位4位,此处每次数据为8位,写入数据总数按8位计算
    //-----------------------------------------------------------------------------------------
    void Ht1621WrAllData(u8 Addr,u8 *p,u8 cnt)
    {
     u8 i;

     CLS_HT_CS;//  
     DelayMS(3);

     Ht1621Wr_Data_High(0xA0,3); //写入数据标志101
     Ht1621Wr_Data_High(Addr<<2,6); //写入地址数据
     for (i=0;i<cnt;i++)
     {
         Ht1621Wr_Data_Low(*p,8);//0x00,8); //写入数据
             p++;
     }

     SET_HT_CS;//  
     DelayMS(3);   

       

    }
    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621WrCmd(uchar Cmd)
    //功能描述: HT1621命令写入函数
    //参数说明:Cmd为写入命令数据
    //说 明:写入命令标识位100
    //-----------------------------------------------------------------------------------------
    void Ht1621WrCmd(u8 Cmd)
    {
     CLS_HT_CS;//HT1621_CS=0;
     DelayMS(3);

     Ht1621Wr_Data_High(0x80,4); //写入命令标志100+0
     Ht1621Wr_Data_High(Cmd,8); //写入命令数据       
     DelayMS(3);

     SET_HT_CS;//HT1621_CS=1;  
     DelayMS(3);  

    }

    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621_Clr_All_Display(  )
    //功能描述: 清屏函数
    //-----------------------------------------------------------------------------------------
           
        void Ht1621_Clr_All_Display(  )
        {
                u8 i;
                u8 Addr = 0;
               
                for (i=0; i<9; i++)
                {
                        Ht1621WrOneNum(Addr, 0x00);
                        Addr += 2;          
                        DelayMS(3);
                }
        }
       
       
        //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621_All_Display(  )
    //功能描述: 全显函数
    //-----------------------------------------------------------------------------------------
     
        void Ht1621_All_Display()
        {
                u8 i;
                u8 Addr = 0;
               
                for (i=0; i<9; i++)
                {
                        Ht1621WrOneNum(Addr, 0xFF);
                        Addr += 2;          
                        DelayMS(3);
                }       
        }


    //-----------------------------------------------------------------------------------------
    //函数名称:void Ht1621_Init(void)
    //功能描述: HT1621初始化
    //说 明:初始化后,液晶屏所有字段均显示
    //-----------------------------------------------------------------------------------------
    void Ht1621_Init(void)
    {                                         

     SET_HT_CS;//HT1621_CS=1;       
     DelayMS(3);
     SET_HT_WR;//HT1621_WR=1;
     DelayMS(3);           
     SET_HT_DAT;//HT1621_DAT=1;          
         DelayMS(2000);       
     Ht1621WrCmd(RC256); //使用内部振荡器
     Ht1621WrCmd(BIAS);             
     Ht1621WrCmd(TIM_DIS);         
     Ht1621WrCmd(WDTDIS);         
     Ht1621WrCmd(TONEON);        
     Ht1621WrCmd(TONE_2K);
     Ht1621WrCmd(IRQ_DIS);   
                                                                  
     Ht1621WrCmd(LCDON);          
    }


    void HT1621_DIS(void)
    {
       
      Ht1621_Init(  ); //上电初始化LCD   
          
          DelayMS(1000);   // 延时一段时间
          
      while(1)
     {
            

      Ht1621_All_Display( );   // 赋值1621寄存器数据,暨全部点亮
     // DelayMS(50000);          

      Ht1621_Clr_All_Display( );    // 清除1621寄存器数据,暨清屏

          
                     Ht1621WrOneData(5,0xff);       
                     Ht1621WrOneData(17,0x0D);
                     Ht1621WrOneData(0x04,0x78);
                     Ht1621WrOneData(0x08,0x78);
   

    //  DelayMS(50000);
     }
    }  



回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2018-8-21 20:21:47 | 显示全部楼层
看了一下程序,感觉没有太大的问题呀。
把复杂的事,做简单!
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 20:45:24 | 显示全部楼层
月无缺 发表于 2018-8-21 20:21
看了一下程序,感觉没有太大的问题呀。

不知道是不是stm32太快了,但是把频率降下来还是不行,真是郁闷死了
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 20:46:00 | 显示全部楼层
月无缺 发表于 2018-8-21 20:21
看了一下程序,感觉没有太大的问题呀。

买了一个ht1621驱动的小屏也是不能驱动,没有任何反应,不知道哪里出了问题
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2018-8-21 21:19:13 | 显示全部楼层
gonzhao 发表于 2018-8-21 20:45
不知道是不是stm32太快了,但是把频率降下来还是不行,真是郁闷死了

不是太快的原因。没看到你IO口初始化的部分呢,是不是因为这个?
把复杂的事,做简单!
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2018-8-21 21:21:00 | 显示全部楼层
gonzhao 发表于 2018-8-21 20:46
买了一个ht1621驱动的小屏也是不能驱动,没有任何反应,不知道哪里出了问题

用示波器或者仿真看看IO口有没有输出,看看有没有信号到H1621B,然后再看看H1621B有没有信号出来到LCD屏。
把复杂的事,做简单!
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 21:21:41 | 显示全部楼层
  // HT1621B  CS WR DAT     RD
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;         
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;         

  GPIO_Init(GPIOA, &GPIO_InitStructure);   
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-21
在线时间
4 小时
 楼主| 发表于 2018-8-21 21:22:04 | 显示全部楼层
初始化再main。c函数内
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-21 21:32:37 | 显示全部楼层
逻辑分析仪, 对比规格书上的时序
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2018-8-22 12:01:26 | 显示全部楼层
本帖最后由 365mcu 于 2018-8-22 12:04 编辑

测量一下VLCD脚的电压应该在4V左右,如果不在你就再下拉电阻分压到4V;还有测量数据收发引脚波形,看电压高低值;
先使用内部晶振。
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-8-5
在线时间
45 小时
发表于 2018-8-23 22:23:04 | 显示全部楼层
正在学习这一块,留个脚印学习一下。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-7-9
在线时间
4 小时
发表于 2019-1-19 22:48:40 | 显示全部楼层
楼主,你的问题解决了没,最近也在做1621的驱动,也没成功,能不能分享一下经验,谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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