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

📄 halht1621.c

📁 威望公司MP3 + USB MCU 的参考软件
💻 C
字号:
/****************************************************************
*                      Viaon Technology (Suzhou) Co.,Ltd
*
*    Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
*                    All rights reserved.
*
*
* Filename:      	halHT1621.c
*
* Programmer:    	Greg 
*
* Created: 	 	1/2/2008
*
* Description: 		public functions 
*              
*        
* Change History (most recent first):	2008.1.2
****************************************************************/
#include "halHT1621.h"

#if (DIGITAL_SHOW == DIGITAL_SHOW_LCMPX)
//#define DELAY(x)	DelayUs(x)
#define DELAY(x)

static void SendByte(BYTE byData, BOOL bCmd)
{
	BYTE byCnt;
	
	DATA_OUT();
	P_RD = 1;
	P_WR = 1;
	
	if(bCmd)
		byCnt = 8;
	else
		byCnt = 4;
	while(byCnt > 0)
	{
		P_WR = 0;
		byCnt--;
		if(byData & (0x01 << byCnt))
			P_DATA = 1;
		else
			P_DATA = 0;
		DELAY(DUR_TIME);
		P_WR = 1;
		DELAY(DUR_TIME);
	}

	if(bCmd)
	{
		P_WR = 0;
		P_DATA = 0;
		DELAY(DUR_TIME);
		P_WR = 1;
		DELAY(DUR_TIME);
	}
}

static BYTE GetByte(void)
{
	BYTE byRet;
	BYTE byCnt = 4;
	
	DATA_IN();
	P_WR = 1;
	P_RD = 1;
	byRet = 0;
	while(byCnt > 0)
	{
		P_RD = 0;
		byCnt--;
		byRet <<= 1;
		if(P_DATA == 1)
			byRet |= 0x01;
		else
			byRet &= 0xFE;
		DELAY(DUR_TIME);
		P_RD = 1;
		DELAY(DUR_TIME);
		
	}
	return byRet;
	
}

static void SetMode(BYTE byMode, BYTE byAddr)//mode bits are 3 bits, addr are 5 bits
{
	BYTE byCnt = 3;
	DATA_OUT();
	P_RD = 1;
	P_WR = 1;
	while(byCnt > 0)
	{
		byCnt --;
	 	P_WR = 0;
	 	if(byMode & (0x1 << byCnt))
	 		P_DATA = 1;
		else
			P_DATA = 0;
		DELAY(DUR_TIME);
		P_WR = 1;
		DELAY(DUR_TIME);
	 }

	 if(byMode == MODE_CMD)
	 {
	 	return;
	 }

	 byCnt = 6;
	 while(byCnt > 0)
	 {
	 	byCnt--;
	 	P_WR = 0;
	 	if(byAddr & (0x01 << byCnt))
	 		P_DATA = 1;
		else
			P_DATA = 0;
		DELAY(DUR_TIME);
		P_WR = 1;
		DELAY(DUR_TIME);
	 }
	 
}

void halHTWriteData(BYTE byAddr, BYTE *byData, BYTE byLen)
{
	BYTE byCurPos = 0;
	ENABLE_HT1621();
	P_CS = 0;
	DELAY(DUR_TIME);
	SetMode(MODE_WRITE, byAddr);
	while(byCurPos < byLen)
	{
		SendByte(*(byData+byCurPos), FALSE);
		byCurPos++;
	}
	P_CS = 1;
	DELAY(DUR_TIME);
}

void halHTWriteOneByte(BYTE byAddr, BYTE byData)
{
	ENABLE_HT1621();
	P_CS = 0;
	DELAY(DUR_TIME);
	SetMode(MODE_WRITE, byAddr);
	SendByte(byData, FALSE);
	P_CS = 1;
	DELAY(DUR_TIME);
}

void halHTSendCmd(BYTE byCmd)
{
	ENABLE_HT1621();
	P_CS = 0;
	DELAY(DUR_TIME);
	SetMode(MODE_CMD, 0);
	SendByte(byCmd, TRUE);
	P_CS = 1;
	DELAY(DUR_TIME);
}

BYTE halHTReadData(BYTE byAddr)
{
	SetMode(MODE_READ, byAddr);
	return GetByte();
}

void halHTInit(void)
{
	halHTSendCmd(SYS_EN);
	halHTSendCmd(BIAS_1_3 | 0x08);
	halHTSendCmd(LCD_ON);
	halHTClr();
}

void halHTClr(void)
{
	BYTE byCnt = 0;
	while(byCnt < 32)
	{
		halHTWriteOneByte(byCnt, 0);
		byCnt++;
	}
}

void halHTTest(void)
{
	BYTE byCnt = 0;
	while(byCnt < 32)
	{
		halHTWriteOneByte(byCnt, 0xF);
		byCnt++;
	}
}

void halHTWriteChar(BYTE byIdx)
{
	BYTE i;
	BYTE byCnt = byIdx<<2;
	
	for(i=0; i<4; i++){
		halHTWriteOneByte(byCnt, 0xF);
		byCnt++;
	}

	return;
}


WORD wDigMap[10] = {
	A_SEG|B_SEG|C_SEG|D_SEG|E_SEG|F_SEG,			// 0
	B_SEG|C_SEG,									// 1
	A_SEG|B_SEG|G_SEG|K_SEG|D_SEG|E_SEG,			// 2
	A_SEG|B_SEG|G_SEG|K_SEG|D_SEG|C_SEG,			// 3
	B_SEG|C_SEG|G_SEG|K_SEG|F_SEG,					// 4	
	A_SEG|F_SEG|G_SEG|K_SEG|C_SEG|D_SEG,			// 5
	A_SEG|F_SEG|G_SEG|K_SEG|C_SEG|D_SEG|E_SEG,		// 6
	A_SEG|J_SEG|M_SEG,								// 7

	A_SEG|B_SEG|C_SEG|D_SEG|E_SEG|F_SEG|G_SEG|K_SEG,	// 8
	A_SEG|B_SEG|C_SEG|D_SEG|F_SEG|G_SEG|K_SEG,			// 9

};

//From 0 to 9
void halHTWriteDig(BYTE byPos, BYTE byDig)
{
	BYTE i;
	WORD wMap= wDigMap[byDig];
	BYTE byCnt = byPos<<2;

	
	for(i=0; i<4; i++){
		halHTWriteOneByte(byCnt, (BYTE)(wMap&0xF));
		byCnt++;
		wMap >>= 4;
	}

	return;
}

void halHTRefresh(WORD *wPtr)
{
	BYTE i;
	WORD *wLPtr = wPtr;
	WORD wTmp;

	for(i=0; i<8; i++){
		wTmp = wLPtr[i];
		
		halHTWriteOneByte((i<<2)+0, (wTmp>>0)&0x0f);
		halHTWriteOneByte((i<<2)+1, (wTmp>>4)&0x0f);
		halHTWriteOneByte((i<<2)+2, (wTmp>>8)&0x0f);
		halHTWriteOneByte((i<<2)+3, (wTmp>>12)&0x0f);
	}	

	return;
}

#endif

⌨️ 快捷键说明

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