HT1621 控制LCD屏幕显示数字,连续显示数字

今天刚刚写的一个程序,使用HT1621驱动LCD显示,通过控制WR端口到低电平,使得LCD模块得到要显示什么的数据,为何只显示了第一次的数据,让他接着清屏或者数字全部显示,或者显示下一个数据时他就不会变了,为什么?代码如下:

 

main.c

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  HT1621_Init();
  // HT1621_Display();
  while (1)
  {

    HT1621_Display();
    HAL_Delay(2000);
     HAL_Delay(2000);
    HT1621_Test();
     //HT1621_Test();
    HT1621_Display2();
    //HT1621_Test();
  }

}

//基本命令
#define OSC_OFF                    0x00        // 关闭震荡器
#define OSC_ON                    0x01        // 开启震荡器
#define DISP_OFF                 0x02        // 关LCD Bias
#define DISP_ON                   0x03        // 开LCD Bias
#define COM_1_3__4              0x29          // 1/3bias 4com
#define COM_1_3__3              0x25          // 1/3bias 3com
#define COM_1_3__2              0x21          // 1/3bias 2com
#define COM_1_2__4              0x28          // 1/2bias 4com
#define COM_1_2__3              0x24          // 1/2bias 3com
#define COM_1_2__2              0x20          // 1/2bias 2com

//扩展命令,该功能未引出关闭可降低功耗
#define TIMER_DIS               0x04        // 不使 time base 輸出
#define WDT_DIS                   0x05        // 不使 WDT 暫停旗標輸出
#define BUZZ_OFF                  0x08        // 关闭蜂鸣器 
#define RC32K                      0X18           // 
#define IRQ_DIS                  0X80        // 不使 IRQ 輸出

void HT1621_Init()//初始化
{
        HT1621_CS_H();
    HT1621_WR_H();
    HT1621_DATA_H();
        
     
    WriteCommandHT1621(OSC_ON);
    WriteCommandHT1621(DISP_ON);

        

    WriteCommandHT1621(TIMER_DIS);
    WriteCommandHT1621(WDT_DIS);
    WriteCommandHT1621(BUZZ_OFF);
    //WriteCommandHT1621(IRQ_DIS);

    HT1621_num_init();        //自动生成液晶屏需要的数组

}

void WriteClockHT1621(void)
{
    HT1621_WR_L();
    delay_us(20);
    HT1621_WR_H();
    delay_us(20);
}

void Write1DataHT1621(unsigned char Addr,unsigned char Dat)//X写数据函数
{
    unsigned char i; 
    unsigned char Shift;
    
    HT1621_CS_L();                  //CS 片选开
    delay_us(20);
    
    HT1621_DATA_H();                  //101
    WriteClockHT1621();
    HT1621_DATA_L();
    WriteClockHT1621();
    HT1621_DATA_H();
    WriteClockHT1621();
    
    Shift = 0x20;                     //屏蔽高3位 只用5位
    for( i = 0; i < HT1621_addrbit; i++) //RAM地址
    {
        if(Addr & Shift)//写数码管 一个数字组成
        {    
                  HT1621_DATA_H();
                }
        else
                {
              HT1621_DATA_L();
                }
        WriteClockHT1621();
        Shift = Shift >> 1;
    }
    
    Shift = 0x01;
    for (i = 0; i < 4; i++)//第几个数亮
    {
        if( Dat & Shift) 
                {
            HT1621_DATA_H();
                }
        else
                {
            HT1621_DATA_L();
                }
        WriteClockHT1621();
        Shift = Shift << 1;
    }   
    HT1621_CS_H();                     //CS 片选关
    delay_us(20);
    HT1621_DATA_H();

void HT1621_Display(void)//发送要写一个1234的数据
{
    unsigned int  Temp=1234;
    unsigned char Temp_Data;
    
    Temp_Data = Temp / 1000;//1
    Write1DataHT1621(HT1621_segtab[0],    LCD_RAM_Tab[Temp_Data]>>4);
    Write1DataHT1621(HT1621_segtab[1],    LCD_RAM_Tab[Temp_Data]>>0);
    
    Temp_Data = Temp % 1000 / 100;//2
    Write1DataHT1621(HT1621_segtab[2],    LCD_RAM_Tab[Temp_Data]>>4);
    Write1DataHT1621(HT1621_segtab[3],    LCD_RAM_Tab[Temp_Data]>>0);
    
    Temp_Data = Temp % 1000 % 100 / 10;//3
    Write1DataHT1621(HT1621_segtab[4],    LCD_RAM_Tab[Temp_Data]>>4);
    Write1DataHT1621(HT1621_segtab[5],    LCD_RAM_Tab[Temp_Data]>>0);
    
    Temp_Data = Temp % 1000 % 100 % 10;//4
    Write1DataHT1621(HT1621_segtab[6],    LCD_RAM_Tab[Temp_Data]>>4);
    Write1DataHT1621(HT1621_segtab[7],    LCD_RAM_Tab[Temp_Data]>>0);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1649077743

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值