⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ht1621.c

📁 功能:ZY886A液晶显示模块显示控制。启动程序即进入正常显示状态(循环显示一系列数字0~F)。 说明:将跳线器题J6、J19、J20分别短接到LCM_/WR、LCM_DAT、LCM_/CS端。
💻 C
字号:
//HT1621操作软件包
//文件名:HT1621.c
//包含对HT1621操作的底层函数,如发送数据位,发送字节等等.

#include <reg51.h>
#include <intrins.h>
#include <HT1621.h>

//设置HT1621控制端口
sbit  CS_PORT  = P0^1;			/*CS端口*/
sbit  CLK_PORT = P0^2;			/*WR端口*/
sbit  SDA_PORT = P0^3;			/*DATA端口*/

#define  uchar unsigned char 	/*宏定义*/
#define  uint  unsigned int
#define  _Nop()  _nop_()        /*定义空指令*/



//起动函数
//起动HT1621,以便进行器件操作.
void   Start_spi()
{ CS_PORT=1;
  CLK_PORT=1;
  SDA_PORT=1;
  _Nop();    			/*起始条件建立时间大于3.34us*/
  _Nop();
  _Nop();
  _Nop();
  CS_PORT=0;
  CS_PORT=0;
  CLK_PORT=0;
  CLK_PORT=0;
}


//发送数据位函数
//向HT1621发送dat的bitcnt位数据,由高位开始.(bitcnt不能大于8) 
void SendBit(uchar dat,uchar bitcnt)
{ uchar  i;
  for(i=0;i<bitcnt;i++)
  { if(( dat & 0X80 ) == 0) SDA_PORT = 0;
      else SDA_PORT = 1;	/*发送数据由高位到低位传送*/
    _Nop();    			/*起始条件建立时间大于4.7us,延时*/
    _Nop();
    _Nop();
    _Nop();  
    CLK_PORT = 1;		/*置时钟线为高,通知被控器开始接收数位*/
    _Nop();    			/*起始条件建立时间大于4.7us,延时*/
    _Nop();
    _Nop();
    _Nop();
    _Nop();  
    CLK_PORT = 0;		/*钳住总线准备下一个数据位*/
    dat=dat<<1;			/*发送数据左移一位*/
  }
}


// 发送字节函数 
// 向HT1621发送一字节数据,数据单元首地址在指针buf中,发送字节数由bytecnt指定
void SendByte(uchar dat)
{ SendBit(dat,8);              	/*发送字节*/
}


// 发送命令函数(A类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMA(uchar  com)
{ Start_spi();
  SendBit(0X80,4);            	/*发送设置命令ID=100 0*/
  SendByte(com);               	/*发送命令字*/
}


// 发送命令函数(B类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMB(uchar adr)
{ Start_spi();
  SendBit(0XA0,4);             	/*发送写显示RAM命令ID=101 0*/
  SendBit(adr,5);              	/*指定写入地址*/
}

// 发送命令函数(C类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMC(uchar com)
{ Start_spi();  
  SendBit(0X90,4);            	/*发送命令ID=100 1*/
  SendByte(com);           	/*发送命令*/
}


//初始化HT1621函数
void INTI1621()
{ SENDCOMA(BIAS);
  SENDCOMA(XTAL32);
  SENDCOMA(SYSEN); 
  SENDCOMA(LCDON);
  SENDCOMA(TONE4K);
}


              
//向指定一个显示缓冲区填充一个数据
void  disp(uchar dat,uchar addr)
{ addr=addr<<3;			/*左移3位,低5位作为RAM地址*/
  SENDCOMB(addr);
  SendByte(dat);
}

//循环填充并显示某一段连地址地
//addr填充段首地址,显示位数num,填充数据dat.
void dispsome(uchar num,uchar dat,uchar addr)
{ uchar i;
  for(i=0;i<num;i++)
  { disp(dat,addr);
    addr++;
    addr++;
  }
}


//左移一位循环显示.
//显示位数num,指针p指向一组要显示的数组,显示首地址addr
void disRound(uchar num, uchar *p, uchar addr)
{ uchar i;
  for(i=0;i<num;i++)
  { disp(*p,addr);
    p++;
    addr++;
    addr++;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -