当前位置: 代码迷 >> 单片机 >> HT1621B 不能显示出来呢,该如何解决
  详细解决方案

HT1621B 不能显示出来呢,该如何解决

热度:74   发布时间:2016-04-28 15:19:57.0
HT1621B 不能显示出来呢,
以下是子程序:
不能显示出段,也不能关闭
#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显示