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

📄 ht1621.c

📁 一种液晶驱动程序(使用HT1621驱动)
💻 C
字号:
/**********************************************************
*名称:液晶驱动程序(HT1621驱动)
*编程:czj100
**********************************************************/
#include <var.h>
#define NOP() _nop_()
sbit HT1621_CS=P1^4;
sbit HT1621_RD=P1^3;
sbit HT1621_WR=P1^2;
sbit HT1621_DAT=P1^1;
//HT1621完成下写一个命令包括头(100)
//HT1621各功能设定的初值
#define BIAS 	0x50  //0b1000 0101 0010  1/2duty 4com
#define SYSDIS 	0x00  //0b1000 0000 0000  关振系统荡器和LCD偏压发生器
#define LCDOFF	0x04  //0b1000 0000 0100  关LCD偏压
#define LCDON 	0x06  //0b1000 0000 0110  打开LCD偏压
#define SYSEN 	0x02  //0b1000 0000 0010  打开系统振荡器
#define XTAL 	0x28  //0b1000 0010 1000  外部接时钟
#define RC256 	0x30  //0b1000 0011 0000  内部时钟
#define TONEON 	0x12  //0b1000 0001 0010  打开声音输出
#define TONEOFF 0x10  //0b1000 0001 0000  关闭声音输出
#define TONE4K	0x80  //0b1000 1000 0000  声音频率4kHZ
#define TONE2K	0xc0  //0b1000 1100 0000  声音频率2KHZ
#define WDTDIS 	0x0A  //0b1000 0000 1010  禁止看门狗
void delays(unsigned char  n)
{  
	uchar j,k;
  	for(j=n;j>0;j--)
		for(k=200;k>0;k--);
}
/**********************************************************
*函数名:HT1621WrCmd 
*功能:液晶初始化功能函数
*说明:
*输入:初始量
*返回:无
**********************************************************/
void HT1621WrCmd(uchar ucTmpCmd)
{
 	uchar ucCmdBety=0x80,data i;
 	HT1621_CS=0;
	for(i=0;i<4;i++)
 	{
  		if(ucCmdBety&0x80)
  			HT1621_DAT=1;
  		else 
  			HT1621_DAT=0;
  			HT1621_WR=0;
  			NOP();
 			NOP();
 			HT1621_WR=1;
 			NOP();
 			ucCmdBety<<=1;
  	} 
  	for (i=0;i<8;i++)
 	{
  		if (ucTmpCmd&0x80) 
  			HT1621_DAT=1;
  		else 
  			HT1621_DAT=0;
  			HT1621_WR=0;
 			NOP();
  			NOP();
			HT1621_WR=1;
			NOP();
  			ucTmpCmd<<=1;
 	}
  		HT1621_CS=1;
}

/**********************************************************
*函数名:HT1621WrDataCmd
*功能:HT1621写命令+地址
*说明:
*输入地址(ucAddr)
*返回:无
**********************************************************/
void HT1621WrDataCmd(uchar ucAddr)
{
 	uchar data i,ucDataCmd=0xA0;
 	for (i=0;i<3;i++)
 	{
 	 if (ucDataCmd&0x80) 
  		HT1621_DAT=1;
  	else 
  		HT1621_DAT=0;
 	HT1621_WR=0;		    
  	NOP();
  	NOP();
 	HT1621_WR=1;
  	NOP();
 	ucDataCmd<<=1;
	}
  	ucAddr<<=2;
  	for (i=0;i<6;i++)
	{
  		if (ucAddr&0x80) 
  			HT1621_DAT=1;
  		else 
			HT1621_DAT=0;
  		HT1621_WR=0;
  		NOP();
  		NOP();
  		HT1621_WR=1;
  		NOP();
  		ucAddr<<=1;
 	}
}

/**********************************************************
*函数名:HT1621WrByte
*功能:HT1621完成写一个字节数据(8位)
*说明:
*输入:数据(ucTmpData)
*返回:无
**********************************************************/ 
//HT1621完成写一个字节数据(8位)
void HT1621WrByte(uchar ucTmpData)
{
	uchar data i;
 	for (i=0;i<8;i++)
 	{
  		if (ucTmpData&0x01) 
  			HT1621_DAT=1;
  		else 
			HT1621_DAT=0;
  		HT1621_WR=0;
  		NOP();
  		NOP();
  		HT1621_WR=1;
  		NOP();
  		ucTmpData>>=1;
 	}
}

/**********************************************************
*函数名:HT1621Show
*功能:送液晶显示一个字节数据(8位)
*说明:
*输入:数据(num) 地址(add)
*返回:无
**********************************************************/ 
void HT1621Show(uchar add,uchar num )
{
	HT1621_CS=0;					  
	HT1621WrDataCmd(add);
	HT1621WrByte(num);
  	HT1621_CS=1;
}

/**********************************************************
*函数名:HT1621Inital
*功能:初始化
*说明:
*输入:无
*返回:无
**********************************************************/ 
void HT1621_Inital(void)
{
	 HT1621WrCmd(LCDON);
 	 HT1621WrCmd(BIAS);
 	 HT1621WrCmd(SYSEN);
}
/**********************************************************
*函数名:HT1621_Show()
*功能:蜂鸣器控制
*说明:
*输入:hz(频率)、time(延迟时间)
*返回:无
**********************************************************/	
void HT1621_Sound(uchar hz,uchar time)
{
	uchar j;
	if(hz == 2)
		j =  TONE2K;
	if(hz == 4)
		j =  TONE4K;
	HT1621WrCmd(TONEON);
	HT1621WrCmd(j);
	delays(time);
	HT1621WrCmd(TONEOFF);

}
/**********************************************************
*函数名:HT1621Show4Byte()
*功能:HT1621完成写4位数据(4位)
*说明:
*输入:数据(ucTmpData)
*返回:无
**********************************************************/ 
//HT1621完成写数据(低4位)
void HT1621Wr4Byte(uchar ucTmpData)
{
	uchar data i;
 	for (i=0;i<4;i++)
 	{
  		if (ucTmpData&0x01) 
  			HT1621_DAT=1;
  		else 
			HT1621_DAT=0;
  		HT1621_WR=0;
  		NOP();
  		NOP();
  		HT1621_WR=1;
  		NOP();
  		ucTmpData>>=1;
 	}
}
void HT1621Show4Byte(uchar add,uchar num)
{
	HT1621_CS=0;					  
	HT1621WrDataCmd(add);
	HT1621Wr4Byte(num);
  	HT1621_CS=1;
}

⌨️ 快捷键说明

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