以下是子程序:
不能显示出段,也不能关闭
#define BIAS 0x52
#define SYSEN 0x02
#define LCDON 0x06
#define LCDOFF 0x04
void SendBit_1621(uchar data2,uchar cnt) //data的高cnt位写入HT1621,高位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data2&0x80)==0) dat=0;
else dat=1;
wr=0;
delay(10);
wr=1;
data2<<=1;
}
}
void SendDataBit_1621(uchar data2,uchar cnt) //data的低cnt位写入HT1621,低位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data2&0x01)==0) dat=0;
else dat=1;
wr=0;
delay(10);
wr=1;
data2>>=1;
}
}
void SendCmd(uchar command)
{
cs=0;
SendBit_1621(0x80,4); //写入标志位码”100”和9位command命令,由于
SendBit_1621(command,8); //没有使有到更改时钟输出等命令,为了编程方便
cs=1; //直接将command的最高位写”0”
}
void Write_1621(uchar addr,uchar data2)
{
cs=0;
SendBit_1621(0xa0,3); //写入标志位码”101”
SendBit_1621(addr,6); //写入addr的高6位
SendDataBit_1621(data2,4); //写入data的低4位
cs=1;
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
cs=0;
SendBit_1621(0xa0,3); //写入标志位码”101”
SendBit_1621(addr,6); //写入addr的高6位
for(i =0; i <cnt; i ++,p++) //连续写入数据
{
SendDataBit_1621(*p,8);
}
cs=1;
}
SendCmd(BIAS); //设置偏压和工作周期
SendCmd(SYSEN); //打开系统振荡器
SendCmd(LCDON); //打开LCD偏压发生器
WriteAll_1621(0,a,5); //0:(起始地址)高6位有效,
//a:(写入数据的起始地址)8位都有效,
//5:为写入的字节数。连续写入”123456789a”
SendCmd(LCDOFF); //关闭LCD显示