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

2019-07-21 05:44发布

各位老师,我现在正在用stm32f103rbt6芯片 驱动ht1621断码屏,现在怎么也调不通,没有反应(蜂鸣器都不响),请各位老师给指导下,项目着急中!!  CS--PA0  WR--PA1  DAT--PA2其他口未用,另外ht1621vdd接5v,因为lcd屏是5v的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
gonzhao
2019-07-21 12:51


/*硬件连接:单片机使用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);
     }
    }  



一周热门 更多>