HT1621驱动段码屏没有任何显示

2019-07-20 23:30发布

调了一个多星期的LCD段码屏,还是没有任何显示,只能热线求助了希望路过各位给点意见,谢谢了。
HT1621部分的代码如下:
#include "LCD.h"
#include "delay.h"


#define                SYSEN                        0x02        //打开系统振荡器
#define                LCDON                        0x06        //打开LCD偏压发生器
#define              LCDOFF                     0x04        //关闭LCD
#define                 BIAS                                 0x52        //1/3偏压,4个公共口
#define                TIMERDIS                        0X08        //禁止时基输出
#define                WDTDIS1                        0X0a        //禁止WDT输出


const unsigned char num[10]={0xeb,0x0a,0xad,0x8f,0x4e,0xc7,0xe7,0x8a,0xef,0xcf}; //0--9
extern _Bool dian;

__asm void nop(void)
{
    NOP
}

void LCD_GPIO_Configuration(void)
{
       
        //LCD_CS--PB3         
        //LCD_DATA---PB4  
        //LCD_WR---PB6(In)         

        GPIO_InitTypeDef        GPIO_InitStructure;                //声明一个结构体变量
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

        //LCD三个引脚,PB3--LCD_CSB4--LCD_DATA; PB6--LCD_WR;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //管脚频率为50MHZ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //输出模式为
        GPIO_Init(GPIOB,&GPIO_InitStructure);                                 //初始化PB3,PB4,PB5

}

//*********HT1621写入开机命令***********//

void ht1621_init(void)
{
        write_com(SYSEN);
        write_com(BIAS);
        write_com(LCDON);
        write_com(TIMERDIS);
        write_com(WDTDIS1);
}

//*********HT1621开始***********//

void start(void)
{
        GPIO_SetBits(GPIOB,GPIO_Pin_3);//CS=1;
        GPIO_SetBits(GPIOB,GPIO_Pin_6);//WR=1;
        GPIO_SetBits(GPIOB,GPIO_Pin_4);//DATA=1;
        delay_us(10);
        GPIO_ResetBits(GPIOB,GPIO_Pin_3);//CS=0;
        delay_us(10);
        GPIO_ResetBits(GPIOB,GPIO_Pin_6);//WR=0;
}

//*********HT1621写命令***********//

void write_com(unsigned char com)
{
        start();
        write(0x80,4);          //写命令模式,命令长度为12位
        write(com,8);                        //写入命令
}

//*********HT1621写地址***********//

void write_data(unsigned char data)
{
        start();
        write(0xa0,3);                //写数据命令
        write(data,6);                //写入RAM 地址0--31
}

//*********HT1621写数据***********//

void write(unsigned char dat,unsigned char m)               
{
        unsigned char        x;
        for(x=0;x<m;x++)
        {
                if((dat&0x80)==0x00)
                GPIO_ResetBits(GPIOB,GPIO_Pin_4);//DATA=0;
                else
                GPIO_SetBits(GPIOB,GPIO_Pin_4);//DATA=1;
                delay_us(10);
                GPIO_SetBits(GPIOB,GPIO_Pin_6);//WR=1;
                delay_us(10);
                GPIO_ResetBits(GPIOB,GPIO_Pin_6);//WR=0;
                delay_us(10);
                dat=(unsigned char)(dat<<1);
        }
}

//*********HT1621显示***********//

void display(unsigned int data)       
{
        unsigned char i,y;
       
        write_data(0);                //从RAM  0开始装入
       
        i=(unsigned char)(data/1000);
        y=num[i];
        if(dian)
        write(y+0x10,8);        //千位
        else
        write(y,8);                                //千位
       
        i=(unsigned char)((data%1000)/100);
        y=num[i];
        if(dian)
        write(y+0x10,8);        //百位
        else
        write(y,8);                                //百位
       
        i=(unsigned char)((data%100)/10);
        y=num[i];
        if(dian)
        write(y+0x10,8);        //十位
        else
        write(y,8);                                //十位
       
        i=(unsigned char)(data%10);
        y=num[i];
        if(dian)
        write(y+0x10,8);        //个位
        else
        write(y,8);                                //个位
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。