📄 ht1623.c
字号:
//******************************************************** HT1623.c ***********************************************//
//
//Hardware Connect:
// MCU --------------- HT1623
// LCDCS <-------------> /CS
// LCDRD <-------------> /RD
// LCDRW <-------------> /WR
// LCDDA_IN/_OUT <-------------> /DATA
// LEDCTRL <----backlight
//*****************************************************************************************************************//
#include "delays.h" //soft delay Head Flie
//Delay1TCY(); delay one TCY
//Delay10TCYx(uchar t); (255~0)*10TCY
//.....100........
//.....1K.........
//.....10K........
//if uchar t = 0 that delay time = 2560000tCY
#include "PIC18F6720_IO.h"
#include "PIC18F6720_PERIPHERYDEVICE.h"
#include "p18f6720.h"
#include "OFF_CHIP_DEVICE.h"
//************************************************** define data**************************************************//
//HT1623 CommandID
#define READDATAID 0xc0 //0b11000000
#define WRITEDATAID 0xa0 //0b10100000
#define RD_MD_WRID 0xa0 //0b10100000
#define CMDID 0x80 //0b10000000
//HT1623 Command
#define SYS_DIS 0x00 //Close system osc and LCD bias generator
#define SYS_EN 0x01 //Turn on system oscillator
#define LCD_OFF 0x02 //
#define LCD_ON 0x03 //
#define TIMER_DIS 0x04 //Disable time base output
#define WDT_DIS 0x05 //Disable WDT time-out flag output
#define TIMER_EN 0x06 //
#define WDT_EM 0x07 //
#define TONE_OFF 0x08 //
#define CLR_TIMER 0x0d //Clear the contents of the time base generator
#define CLR_WDT 0x0f //Clear the contents of the WDT stage
#define RC_32K 0x18 //System clock source :on-chip RC OSC
#define EXT32K 0x1c //System clock source :external 32k or 32.768kHz OSC
#define TONE_4K 0x40 //
#define TONE_2K 0x60 //
#define _IRQ_DIS 0x80 //Disable _IRQ output
#define _IRQ_EN 0x88 //Enable _IRQ output
//delay
#define _5TCY Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY()
#define _10TCY Delay10TCYx(1);
//***********************************************************//
//Name :InitHT1623Port
//Input :void
//Output :void
//Function :Inital MCU I/O Port for HT1623
//D.R.P :QiuHao
//Data :06.06.07
//**********************************************************//
void InitHT1623Port(void)
{
ENHT1623IO;
LCDCS = 1;
LCDRD = 1;
LCDRW = 1;
_5TCY;
}
//****************************************************************//
//Name :RdHT1623OneByte
//Input :unsigned uchar Id_addr Type:(0 a6 a5 a4 a3 a2 a1 a0)
//Output :unsigned char Type:(0 0 0 0 d3 d2 d1 d0)
//Function :Read one byte data from HT1623 memory in one address
//D.R.P :QiuHao
//Data :06.06.07
//****************************************************************//
unsigned char RdHT1623OneByte(unsigned char Id_addr)
{
unsigned char redata = 0,isf;
unsigned int tmep = 0;
DSGIE;
DDRLCDDA = 0; //Set mcu LCDDA Port OutPut
LCDDA_OUT = 1; //Init OUTPUT=1
LCDRD = 1;
LCDCS = 0; //Selecet HT1623
tmep |= READDATAID;
tmep <<= 2;
tmep |= Id_addr;
tmep <<= 6; //1 1 0 a6 a5 a4 a3 a2 a1 a0 X X X X X X
_5TCY;
_5TCY;
for(isf=0;isf<10;isf++)
{
LCDRW = 0;
_5TCY;
_5TCY;
if(tmep & 0x08000)
LCDDA_OUT = 1;
else
LCDDA_OUT = 0;
tmep = tmep << 1;
_5TCY;
_5TCY;
LCDRW = 1;
_5TCY;
_5TCY;
}
DDRLCDDA = 1; //Set mcu LCDDA Port InPut
_5TCY;
_5TCY;
for(isf=0;isf<4;isf++)
{
LCDRD = 0;
redata = redata >> 1;
_5TCY;
_5TCY;
LCDRD = 1;
if(LCDDA_IN == 1)
{
redata |= 0X08;
_5TCY;
_5TCY;
}
_5TCY;
_5TCY;
}
InitHT1623Port();
ENGIE;
return redata;
}
//****************************************************************//
//Name :WrHT1623OneByte
//Input :unsigned char Toid_addr Type:(0 a6 a5 a4 a3 a2 a1 a0)
// :unsigned char Todata Type:(0 0 0 0 d3 d2 d1 d0)
//Output :void
//Function :Write one byte data to HT1623 memory in one address
//D.R.P :QiuHao
//Data :06.06.07
//****************************************************************//
void WrHT1623OneByte(unsigned char Toid_addr,unsigned char Todata)
{
unsigned int tmep = 0;
unsigned char idf;
DSGIE;
tmep |= WRITEDATAID; //Load write commandbyte
tmep = tmep << 2;
tmep |= Toid_addr; //Load address
tmep = tmep << 4;
tmep |= Todata; //Load data
tmep = tmep << 2;
DDRLCDDA = 0; //Port set output
LCDDA_OUT = 1;
LCDCS = 0; //Selecet HT1623
_5TCY;
_5TCY;
for(idf=0;idf<10;idf++)
{
LCDRW = 0;
_5TCY;
_5TCY;
if(tmep & 0x08000)
LCDDA_OUT = 1;
else
LCDDA_OUT = 0;
_5TCY;
_5TCY;
LCDRW = 1;
tmep = tmep << 1;
_5TCY;
_5TCY;
}
for(idf=0;idf<4;idf++)
{
LCDRW = 0;
_5TCY;
_5TCY;
if(tmep & 0x01000)
LCDDA_OUT = 1;
else
LCDDA_OUT = 0;
_5TCY;
_5TCY;
LCDRW = 1;
tmep = tmep >> 1;
_5TCY;
_5TCY;
}
LCDDA_OUT = 1;
_5TCY;
_5TCY;
InitHT1623Port();
ENGIE;
}
//*****************************************************************//
//Name :SentCmdToHT1623
//Input :unsigned char ht1623cmd Type:(see HT1623 Command define)
//Output :void
//Function :Write one byte command to HT1623
//D.R.P :QiuHao
//Data :06.06.09
//*****************************************************************//
void SentCmdToHT1623(unsigned char ht1623cmd )
{
unsigned int tmepcmd=0,ifs;
DSGIE;
tmepcmd = tmepcmd | CMDID;
tmepcmd = tmepcmd << 3;
tmepcmd = tmepcmd | ht1623cmd;
tmepcmd = tmepcmd << 5;
DDRLCDDA = 0; //LCDdata port set output
LCDDA_OUT = 1;
LCDCS = 0; //selecet chip
_5TCY;
_5TCY;
for(ifs=0;ifs<12;ifs++)
{
LCDRW = 0;
_5TCY;
_5TCY;
if(tmepcmd & 0x8000)
LCDDA_OUT = 1;
else
LCDDA_OUT = 0;
_5TCY;
_5TCY;
LCDRW = 1;
tmepcmd = tmepcmd << 1;
_5TCY;
_5TCY;
}
LCDDA_OUT = 1;
InitHT1623Port();
ENGIE;
}
//*****************************************************************//
//Name :Endisplay
//Input :void
//Output :void
//Function :Enaible HT1623 LCD Display
//D.R.P :QiuHao
//Data :06.06.09
//*****************************************************************//
void Endisplay(void)
{
DSGIE;
InitHT1623Port();
SentCmdToHT1623(0x01);//Turn on system oscillator
Delay10KTCYx(1);
SentCmdToHT1623(0x1C);//system clock since extren 32.768 oscillator
Delay10KTCYx(1);
SentCmdToHT1623(0x03);//Turn on LCD diaplay
SentCmdToHT1623(0x05);//close wdt
SentCmdToHT1623(0x04);//close timer
SentCmdToHT1623(0x08);//close tone
SentCmdToHT1623(0x80);//close IRQ out
ENGIE;
}
void Dsdisplay(void)
{
DSGIE;
SentCmdToHT1623(0x05);//close wdt
SentCmdToHT1623(0x80);//close IRQ out
SentCmdToHT1623(0x04);//close timer
SentCmdToHT1623(0x08);//close tone
SentCmdToHT1623(0x02);//Turn off LCD diaplay
SentCmdToHT1623(0x00);//Close system osc and LCD bias generator
DSHT1623IO;
ENGIE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -