这个芯片搞了好久了,原先是可以正常初始化HT1621的,在我写完其他模块后,在回来的时候,就再也无**常初始化HT1621,导致HT1621无法驱动LCD屏。
我用Debug模式调试的时候,发现传送的数据完全和需要的一模一样,但是就是没**常工作,说一下HT1621的现象:所有的SEG和COM都是高电平。
所使用的单片机是:pic18f25k22,晶振是16M,由于是两个HT1621,而且是公用数据线和写入线。
程序很简单,就是初始化屏幕,然后关闭屏幕,程序很简单如下:
#include<pic18.h>
#include<delays.h>
#define LCD_DA PORTCbits.RC4 //这个是和ht连着的脚
#define LCD_WR PORTCbits.RC5
#define LCD_CS2 PORTCbits.RC6
#define LCD_CS1 PORTCbits.RC7
#define POWER_CTR PORTAbits.RA4 //这个是控制电源开关的,可以忽略
#define uint unsigned int
#define uchar unsigned char
#define WRITECMD 0x80
#define WRITEDATA 0xA0
#define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com
#define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器
#define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
#define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压
void TransmitToHtH(uchar Data,uchar Digit); //传送数据
void WriteCmd(uchar cmd); //传送命令
void main()
{
TRISA4=0; //这里是pic脚的设置
TRISC4=0;
TRISC5=0;
TRISC6=0;
TRISC7=0;
ANSC4=0;
ANSC5=0;
ANSC6=0;
ANSC7=0;
POWER_CTR=1; //这个是打开电源的.....可以忽略
Delay1KTCYx(200); //Delay50ms 使用的是pic自带的延时函数
LCD_CS1=0;
LCD_CS2=0;
LCD_DA=0;
LCD_WR=0;
Delay1KTCYx(200); //Delay50ms
LCD_CS1=1;
LCD_CS2=1; //屏蔽掉CS2,就是第二个HT1621
LCD_DA=1;
LCD_WR=1;
Delay1KTCYx(200); //Delay50ms
WriteCmd(BIAS);
WriteCmd(SYSEN);
WriteCmd(LCDON);
Delay1KTCYx(200); //Delay50ms
WriteCmd(LCDOFF);
while(1)
{
NOP();
}
}
void TransmitToHtH(unsigned char Data,unsigned char Digit)
{
uchar i,DataTem;
DataTem=Data;
for(i=0;i<Digit;++i)
{
if((DataTem&0x80)==0)
{
LCD_DA=0;
}
else
{
LCD_DA=1;
}
LCD_WR=0;
NOP();
NOP();
NOP();
LCD_WR=1;
NOP();
NOP();
NOP();
DataTem<<=1;
}
}
void WriteCmd(uchar cmd)
{
LCD_CS1=0;
TransmitToHtH(WRITECMD,4);
TransmitToHtH(cmd,8);
LCD_CS1=1;
}
|