调了一个多星期的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_CS
B4--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); //个位
}
一周热门 更多>