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