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

📄 ht1623.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 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 + -