Advertisement

LCD显示--HT1621b芯片驱动程序

阅读量:

该文本描述了一个名为HT1621b的芯片驱动程序及其相关功能实现。主要包括以下核心内容:
引脚配置:定义了CS(片选)、WR(写)、DATA(串行数据)引脚的功能。
时钟配置:使用TIM2中断设置了主时钟源(RC256K)和PWM定时器(BIAS13)。
初始化流程:包括端口模式设置、系统振荡器启用与关闭、偏压发生器启用与关闭。
主要功能模块:

  • Ht1621_WriteNBit():完成一位或多bit位的数据传输。
  • Ht1621_WriteData():完成连续串行数据传输。
  • Ht1621_WriteCommand():完成命令编码与传输。
  • Ht1621_BuzzerControl():控制蜂鸣器输出状态。
    整体为一个完整的硬件开发框架描述。

HT1621b芯片驱动程序

CS端子:通过连接一片上拉电阻来设置选中输入状态;该串行接口在复位状态下进行操作:当/CS处于高电平时无效;而当/CS处于低电平时作为输入进行读写。

该电路中,在/WR 信号的上升沿时刻将DATA线上的数据通过Writewave脉冲输入连接至一个上拉电阻,并完成对HT1621存储空间的操作。

DATA : 外接上拉电阻的串行数据输入/输出.

复制代码
 /* Includes ------------------------------------------------------------------*/

    
 #include "drv_ht1621.h"
    
 /* Private typedef -----------------------------------------------------------*/
    
 /* Private define ------------------------------------------------------------*/
    
 #define HT1621_CS_PORT            GPIOC
    
 #define HT1621_CS_PIN             GPIO_PIN_7
    
 #define Ht1621CsHigh              (HT1621_CS_PORT->ODR |= (u8)(HT1621_CS_PIN))
    
 #define Ht1621CsLow               (HT1621_CS_PORT->ODR &= (u8)(~HT1621_CS_PIN))
    
  
    
 #define HT1621_WR_PORT            GPIOC
    
 #define HT1621_WR_PIN             GPIO_PIN_6
    
 #define Ht1621WrHigh              (HT1621_WR_PORT->ODR |= (u8)(HT1621_WR_PIN))
    
 #define Ht1621WrLow               (HT1621_WR_PORT->ODR &= (u8)(~HT1621_WR_PIN))
    
  
    
 #define HT1621_DATA_PORT          GPIOC
    
 #define HT1621_DATA_PIN           GPIO_PIN_5
    
 #define Ht1621DataHigh            (HT1621_DATA_PORT->ODR |= (u8)(HT1621_DATA_PIN))
    
 #define Ht1621DataLow             (HT1621_DATA_PORT->ODR &= (u8)(~HT1621_DATA_PIN))
    
  
    
  
    
 #define LedPwmDuty(A)             TIM2->CCR2H = (u8)((A)>> 8);TIM2->CCR2L = (u8)(A); 
    
 #define LedOn()                   TIM2->CCER1 |= TIM2_CCER1_CC2E  
    
 #define LedOff()                  TIM2->CCER1 &= (~TIM2_CCER1_CC2E)  
    
  
    
 #define  COMMAND_CODE                0x80  //命令码
    
 #define  WRITE_DATA_CODE             0xa0  //写命令
    
 #define  READ_DATA_CODE              0xc0  //读命令
    
 #define  DISPLAY_BEGIN_ADDR          (0X0F << 2) //显示起始地址
    
 #define  SYS_EN                      0x02
    
 #define  RC_256K                     0x30
    
 #define  BIAS_13                     0x52
    
 #define  TONE_ON                     0x12  //打开声音输出
    
 #define  TONE_OFF                    0x10
    
 #define  TONE_2K                     0xc0
    
 #define  TONE_4K                     0x80
    
 #define  LCD_ON                      0x06
    
  
    
 /* Private macro -------------------------------------------------------------*/
    
 /* Private variables ---------------------------------------------------------*/
    
 /* Public functions ----------------------------------------------------------*/
    
  
    
 /*******************************************************************************
    
 函数:LCD背光PWM
    
 参数: 
    
 返回值:无
    
 *******************************************************************************/
    
 void TIM2_Configuration(void)
    
 {
    
    TIM2_DeInit();
    
   
    
    TIM2_TimeBaseInit(TIM2_PRESCALER_1,  
    
                  640);                                                      //25khz
    
   
    
    TIM2_OC2Init(TIM2_OCMODE_PWM1, 
    
             TIM2_OUTPUTSTATE_ENABLE, 
    
             500, 
    
             TIM2_OCPOLARITY_LOW);
    
    
    
    TIM2_Cmd(ENABLE);
    
 }
    
  
    
 /*******************************************************************************
    
 函数:延时函数 ms 
    
 参数: 
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_Delay(uint8_t ms)
    
 {
    
    unsigned short jj;
    
    for (jj = 1; jj <= ms; jj++)
    
    {
    
       nop();
    
    }
    
 }
    
  
    
 /*******************************************************************************
    
 函数:HT1621初始化
    
 参数: 
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_Init()
    
 {  
    
    GPIO_Init(HT1621_CS_PORT, HT1621_CS_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);         //初始化端口
    
    GPIO_Init(HT1621_WR_PORT, HT1621_WR_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    
    GPIO_Init(HT1621_DATA_PORT, HT1621_DATA_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    
    
    
    Ht1621_WriteCommand(SYS_EN);   //SYS_EN 打开系统振荡器
    
    Ht1621_Delay(5);
    
    
    
    Ht1621_WriteCommand(RC_256K);   //RC_256K 系统时钟源 片内RC振荡器
    
    Ht1621_Delay(5);
    
    
    
    Ht1621_WriteCommand(BIAS_13);  //BIAS13 4个公共口 
    
    Ht1621_Delay(5);
    
    
    
    Ht1621_WriteCommand(TONE_4K);  //TONE_2KC0  TONE_4K80 
    
    Ht1621_Delay(5);
    
    
    
    Ht1621_WriteCommand(LCD_ON);   //LCD_ON 打开LCD偏压发生器
    
    Ht1621_Delay(5);
    
 }
    
  
    
  
    
 /*******************************************************************************
    
 函数:HT1621 写一字节数据
    
 参数: 写数据的为位数 和 数据
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_WriteNBit(uint8_t wData , uint8_t BitCnt)
    
 {
    
    uint8_t i;
    
    
    
    for(i=0; i< BitCnt; i++)
    
    {
    
       Ht1621WrLow;
    
       Ht1621_Delay(2);
    
       
    
       if((wData << i) & 0x80)
    
       {
    
      Ht1621DataHigh;
    
       }
    
       else 
    
       {
    
      Ht1621DataLow;
    
       }
    
       Ht1621_Delay(2);
    
       
    
       Ht1621WrHigh;
    
       Ht1621_Delay(2);
    
    }
    
 }
    
  
    
 /*******************************************************************************
    
 函数:HT1621 写数据操作(连续写  3位写操作命令+6位地址+ ...数据)
    
 参数: 写数据指针
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_WriteData(const uint8_t *wDataBuf)
    
 {
    
    uint8_t i;
    
       
    
    Ht1621CsLow;
    
    Ht1621_Delay(2);
    
       
    
    Ht1621_WriteNBit(WRITE_DATA_CODE, 3);
    
    Ht1621_WriteNBit(DISPLAY_BEGIN_ADDR, 6);            //TODO: 20140820  hzg  注意要对应原理图上的起始地址
    
    
    
    for(i=0; i<10; i++)
    
    {
    
     Ht1621_WriteNBit(wDataBuf[i], 8);  
    
    }
    
    
    
    Ht1621CsHigh;
    
    Ht1621_Delay(2);
    
 }
    
  
    
 /*******************************************************************************
    
 函数:HT1621 写命令操作(12位命令数据)
    
 参数: 命令值
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_WriteCommand(uint8_t Cmd)
    
 {
    
    Ht1621CsLow;
    
    Ht1621_Delay(2);
    
    
    
    Ht1621_WriteNBit(COMMAND_CODE, 4);       
    
    Ht1621_WriteNBit(Cmd, 8);
    
    
    
    Ht1621CsHigh;
    
    Ht1621_Delay(2);
    
 }
    
  
    
 /*******************************************************************************
    
 函数:HT1621 蜂鸣器输出控制(12位命令数据)
    
 参数: 开关标志
    
 返回值:无
    
 *******************************************************************************/
    
 void Ht1621_BuzzerControl(uint8_t RunFlag)
    
 {
    
    (RunFlag == 0)?Ht1621_WriteCommand(TONE_OFF):Ht1621_WriteCommand(TONE_ON);
    
 }

全部评论 (0)

还没有任何评论哟~