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