📄 hallcm.c
字号:
/****************************************************************
* Viaon Technology (Suzhou) Co.,Ltd
*
* Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
* All rights reserved.
*
*
* Filename: hallcm.c
*
* Programmer: Greg
*
* Created: 1/2/2008
*
* Description: public functions
*
*
* Change History (most recent first): 2008.1.2
****************************************************************/
#include "config.h"
#include "common.h"
#include "va4010reg.h"
#include "hallcm.h"
//#include "libfat.h"
#include "libfatif.h"
#include "hallcmsplc502b.h"
#if(DIGITAL_SHOW == DIGITAL_SHOW_LCM)
//#include "8x5ascii.h"
#include "8x16ascii.h"
//#include "icon.h"
#include "mycaricon.h"
//when 24c08,61*16 when 24c64,96*16
BYTE nAsciiDot[ASCIIDOT_BUF_SIZE];//96*16
//CSB set as 0 always after reset
#ifdef ENABLE_START_SCREEN
void halLCMIcon(BYTE bCol, BYTE *buf)
{
//MyCarDot
BYTE i, j;
BYTE data bEndCol = (bCol + MYCAR_WIDTH);
BYTE * bpTmp;
if(bEndCol>128)
bEndCol = 128;
for(i=0; i<MYCAR_PAGES; i++){ //Page 0 -> page 3
halLCMSPIInit();
halLCMSPISend(0xb0+(3-(i+1)), FALSE);//Page address
halLCMSPISend(0x10|(bCol>>4), FALSE);//Column address, high 4bits
halLCMSPISend(0x00|(bCol&0x0f), FALSE);//Column address, low 4bits;
bpTmp = buf+i*MYCAR_WIDTH;
for(j=bCol; j<bEndCol; j++){
halLCMSPISend(*bpTmp, TRUE);
bpTmp++;
}
for(j=bEndCol; j<128; j++){
halLCMSPISend(0X00, TRUE);
}
}
return;
}
#endif
static void _halLCMWrite(BYTE bColum, BYTE bPage, BYTE* bChar, BYTE bLen)
{
BYTE i;
BYTE *bpTmp = bChar;
halLCMSPIInit();
halLCMSPISend(0xb0+(3-bPage), FALSE);//Page address
halLCMSPISend(0x10|(bColum>>4), FALSE);//Column address, high 4bits
halLCMSPISend(0x00|(bColum&0x0f), FALSE);//Column address, low 4bits;
for(i=0; i<bLen; i++)//FONT WIDTH
{
halLCMSPISend(*bpTmp, TRUE);
bpTmp++;
}
return;
}
#if 1
void halLCMSPIInit(void)
{
// LCM_CSB = 0;
LCM_SCLK = 1;
// LCM_CSB_OUT();
LCM_SCLK_OUT();
LCM_A0 = 0;
LCM_A0_OUT();
LCM_SDA_OUT();
// LCM_CSB = 1;
}
#else
#define halLCMSPIInit()
#endif
void halLCMSPISend(BYTE byData, BOOL bFlag)
{
#if 0
static BYTE data byBtCnt;
byBtCnt = 8;
LCM_CSB = 0;
LCM_A0 = bData; // 1=data, 0=cmd
LCM_SDA_OUT();
do
{
if(byData & (0x01<<(byBtCnt-1)))
LCM_SDA = 1;
else
LCM_SDA = 0;
LCM_SCLK = 0; //low
LCM_SCLK = 1; //high
byBtCnt--;
}while(byBtCnt > 0);
LCM_CSB = 1;
#else
BYTE data i;
// LCM_A0_OUT();
LCM_A0 = bFlag; // 1=data, 0=cmd
// LCM_SDA_OUT();
// LCM_SCLK_OUT();
// LCM_CSB_OUT();
// LCM_CSB = 0;
// LCM_SCLK = 1;
for(i=0; i<8; i++){
if(byData & 0x80)
LCM_SDA = 1;
else
LCM_SDA = 0;
LCM_SCLK = 0; //low
byData <<= 1;
LCM_SCLK = 1; //high
}
// LCM_CSB = 1;
return;
#endif
}
void halLCMInit()
{
halLCMSPIInit();
#if 0
halLCMSPISend(0x21, FALSE); //function set PD=0 H1=0 H0=1
halLCMSPISend(0x14, FALSE); //set system bias, cur = 7
halLCMSPISend(0x08, FALSE); //set DO=0, bit2=0, LSB on the top
halLCMSPISend(0x82, FALSE); //Vop = 3.0V
halLCMSPISend(0x20, FALSE); //function set PD=0 H1=0 H0=0
halLCMSPISend(0x05, FALSE); //set Vlcd, prs=1
halLCMSPISend(0x0C, FALSE); //set display type : Nomal display
halLCMClear(0, 3);
#else
UartOutText("-I-: LCM Init ! \r\n");
halInitSplc502b();
halSetSplc502b(0, 3, 0X00);//Clear screen
#endif
}
// 0x0F,0x1F,0x10,0x13,0x13,0x1F,0x0F,0x00, // -@-
// 0xE0,0xF0,0x10,0xD0,0xD0,0xD0,0x80,0x00,
// MSB
// 0 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 0
// 0 1 1 1 1 1 0 0_
// 1 1 0 0 0 1 1 0
// 1 1 0 0 0 1 1 0
// 1 1 0 1 1 1 1 0
// 1 1 0 1 1 1 1 0__
// 1 1 0 1 1 1 1 0
// 1 1 0 1 1 1 0 0
// 1 1 0 0 0 0 0 0
// 0 1 1 1 1 1 0 0_
// 0 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 0
// 0 0 0 0 0 0 0 0
//
// -@- 12x24, MSB on the top
/*
char at[] = {
0x07,0x08,0x10,0x21,0x23,0x22,0x22,0x23, // -@-
0x11,0x08,0x07,0x00,0xFF,0x00,0xFF,0xFF,
0x01,0x01,0x01,0xFF,0xFF,0x00,0xFF,0x00,
0xE0,0x10,0x08,0x84,0x84,0x84,0x04,0x04,
0x84,0x88,0x10,0x00
};
// -@- 24x48
char at_big[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -@-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x0F,0x1C,0x30,0x60,
0x40,0xC0,0x81,0x81,0x82,0x82,0x82,0x41,
0x43,0x22,0x38,0x0F,0x07,0x00,0x00,0x00,
0x00,0x1F,0xFF,0xFF,0xC0,0x00,0x01,0x0F,
0x3E,0xF0,0xC0,0x00,0x00,0x00,0x07,0xFF,
0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,
0x00,0xF8,0xFF,0xFF,0x03,0x00,0xFC,0xFF,
0x03,0x01,0x01,0x03,0x07,0x1C,0xFF,0xFF,
0x81,0x01,0x03,0x1E,0xF8,0xC0,0x00,0x00,
0x00,0x00,0x80,0xE0,0xF0,0x78,0x1C,0x0E,
0x86,0x87,0x83,0x03,0x03,0x03,0x03,0x86,
0x86,0x8C,0x1C,0x30,0xE0,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
*/
void halLCMWriteData(BYTE byXAddr, BYTE byYAddr, BYTE* byData, BYTE byLen)
{
BYTE data m;
BYTE data byX, byY;
BYTE * byCharData;
BYTE data byCurChar;
m = 0;
byX = byXAddr;
byY = byYAddr;
// if(byData == NULL) return;
while(m < byLen)
{
byCurChar = *(byData+m);
if(byCurChar == 0x00){ //string terminate
break;
}
//if((byCurChar > '~')||(byCurChar < ' ')) break;
if((byCurChar > 'Z') && (byCurChar != '['))
{
if(byCurChar > 'z' || byCurChar < 'a')
byCurChar = '-';
else
byCurChar -= 32;
}
byCharData = nAsciiDot + (byCurChar - 0x20)*16;//Got the dot map
if(byX>120)//next page
{
break;
}
_halLCMWrite(byX, byY, byCharData, 8);
byCharData = nAsciiDot + (byCurChar - 0x20)*16 + 8;//Got the dot map
_halLCMWrite(byX, byY+1, byCharData, 8);
byX += 8;//Move Column
m++;
}
}
#if 0
void halLCMWriteDataW(BYTE byXAddr, BYTE byYAddr, WORD* wData)
{
BYTE byData[LFN_WORD_MAX+1];
BYTE byCount = 0;
WORD *wPtData = wData;
while(*wPtData != 0)
{
if(*wPtData < 255)
{
byData[byCount++] = *wPtData;
}
wPtData++;
}
halLCMWriteData(byXAddr, byYAddr, byData, byCount);
}
#endif
#if 0
void halLCMICon(BYTE byXAddr, BYTE byIconID)
{
BYTE *byData = NULL;
switch(byIconID)
{
#if 0
case ICON_ID_USB:
byXLen = 32;
byData = nUSBIcon;
break;
case ICON_ID_SD:
byXLen = 32;
byData = nSDIcon;
break;
#endif
case ICON_ID_PLAY:
byData = nPlayIcon;
break;
case ICON_ID_PAUSE:
byData = nPauseIcon;
break;
case ICON_ID_SPEAKER:
byData = nSpeakerIcon;
break;
case ICON_ID_ATH:
byData = nAthIcon;
break;
default:
return;
}
// if(byData != NULL)
// {
halLCMSPIInit();
halLCMSPISend(0x80 | byXAddr, FALSE);
halLCMSPISend(0x45, FALSE);
for(n = 0; n < 7; n++)
{
halLCMSPISend(*byData, TRUE);
byData++;
}
// }
}
#endif
void halLCMClear(BYTE byStart, BYTE byEnd) //range 0 - 3 line
{
#if 0
BYTE data i;
while(byStart <= byEnd)
{
halLCMSPIInit();
halLCMSPISend(0xb0+byStart, FALSE);//Page address
halLCMSPISend(0x10, FALSE);//Column address, high 4bits
halLCMSPISend(0x00, FALSE);//Column address, low 4bits;
for(i = 0; i < 128; i++)
{
halLCMSPISend(0x00, TRUE);
}
byStart++;
}
#else
byStart = 3 - byStart;
byEnd = 3 - byEnd;
//halSetSplc502b(byStart, byEnd, 0x00);
halSetSplc502b(byEnd, byStart, 0x00);
#endif
return;
}
//FONT Enlarge: 8*16 -> 16*32
static BYTE FontBuf[4][16];
static void _halLCMFontConv(BYTE *bpFont)
{
BYTE bTmp;
BYTE i;
BYTE j;
BYTE k;
WORD data wTmp;
BYTE * data bpTmp = bpFont;
BYTE * data bpTarget = FontBuf[0];
for(k=0; k<2; k++){
for(i=0; i<8; i++){
bTmp = *bpTmp;
wTmp = 0x00;
for(j=0; j<8; j++){
wTmp <<= 2;
if(bTmp&0x80){
wTmp |= 0x03;
}
bTmp <<= 1;
}
FontBuf[(k<<1)+0][(i<<1)+1] = FontBuf[(k<<1)+0][(i<<1)+0] = (BYTE)(wTmp>>8);
FontBuf[(k<<1)+1][(i<<1)+1] = FontBuf[(k<<1)+1][(i<<1)+0] = (BYTE)(wTmp&0xff);
bpTmp++;
}
}
return;
}
#if 0
void halFontTest(void)
{
static BYTE CharIdx = 0;
BYTE *bpCharData;
BYTE i;
BYTE byX, byY;
halLCMClear(0, 3);
bpCharData = nAsciiDot + CharIdx*16;//Got the dot map
CharIdx ++;
if(CharIdx >= ASCII_NUM)
CharIdx = 0;
_halLCMFontConv(bpCharData);
byX = 8;//Column
for(i=0; i< 4; i++){
_halLCMWrite(byX, i, FontBuf[i], 16);//Page i: from 0 to 3
}
return;
}
#endif
//Page address is default to zero.
void halLCMWriteBig(BYTE byXAddr, BYTE* byData, BYTE byLen)
{
BYTE data i;
BYTE data m;
BYTE data byX;
BYTE * byCharData;
BYTE data byCurChar;
m = 0;
byX = byXAddr;
//byY = 0;
// if(byData == NULL) return;
while(m < byLen)
{
byCurChar = *(byData+m);
if(byCurChar == 0x00){ //string terminate
break;
}
//if((byCurChar > '~')||(byCurChar < ' ')) break;
if(byCurChar > 'Z')
{
if(byCurChar > 'z' || byCurChar < 'a')
byCurChar = '-';
else
byCurChar -= 32;
}
if(byX>120)//next page
{
break;
}
byCharData = nAsciiDot + (byCurChar - 0x20)*16;//Got the dot map
_halLCMFontConv(byCharData);
for(i=0; i< 4; i++){
_halLCMWrite(byX, i, FontBuf[i], 16);//Page i: from 0 to 3
}
byX += 16;//Move Column
m++;
}
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -