📄 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 + -