📄 lcd_old.c
字号:
#define DEBUG_MSG
#include "target.h"
//1621 is 32X4 LCD controller
#define LCD_BUF_SIZE 16
void WriteLcdData(unsigned char addr,unsigned char ucdata);
unsigned char idata FpChar[NUM_SEGMENT];
unsigned char idata LcdBuf[LCD_BUF_SIZE];
unsigned char idata LcdBufBak[LCD_BUF_SIZE];
//flash attribute for charactor
unsigned short idata uiAttribute = 0;
bit bFlashOn = 0;
unsigned char code Led_Array[]={
//number
VALUE0,VALUE1,VALUE2,VALUE3,VALUE4,
VALUE5,VALUE6,VALUE7,VALUE8,VALUE9,
//character
CHAR_A,CHAR_B,CHAR_C,CHAR_D,CHAR_E,CHAR_F,
CHAR_G,CHAR_H,CHAR_I,CHAR_J,CHAR_K,CHAR_L,
CHAR_M,CHAR_N,CHAR_O,CHAR_P,CHAR_Q,CHAR_R,
CHAR_S,CHAR_T,CHAR_U,CHAR_V,CHAR_W,CHAR_X,
CHAR_Y,CHAR_Z,
CHAR_SPACE
};
void FPDisplayIcon(unsigned int icondata,unsigned char bOn)
{
unsigned char grid = (icondata>>8);
unsigned char segment;
if(grid>=LCD_BUF_SIZE)
return;
segment = icondata;
if(bOn){
LcdBuf[grid] |= segment;
}
else{
LcdBuf[grid] &= (~segment);
}
}
void FPOutChar(unsigned char addr,char ucchar)
{
code unsigned char pos_array[NUM_SEGMENT] ={
0x01,0x02,0x03,0x04,0x07,0x08,0x09,0x0A,0x0B,0x0C
};
unsigned char grid_pos = pos_array[addr];
unsigned char uctemp;
if(ucchar>='0'&&ucchar<='9')
uctemp = Led_Array[ucchar-'0'];
else if(ucchar>='A'&&ucchar<='Z')
uctemp = Led_Array[ucchar-'A'+10];
else if(ucchar>='a'&&ucchar<='z')
uctemp = Led_Array[ucchar-'a'+10];
else{
switch(ucchar){
case '-':
uctemp = CHAR_DOT;
break;
default:
uctemp = 0;
break;
}
}
//error,we will do nothing.
if(addr>=NUM_SEGMENT)
return;
FpChar[addr] = ucchar;
LcdBuf[grid_pos] &= 0xF1;
LcdBuf[grid_pos] |= (uctemp&0x0E);
grid_pos--;
LcdBuf[grid_pos] &= 0x0F;
LcdBuf[grid_pos] |= (uctemp&0xF0);
}
void FPOutString(unsigned char addr,char *str)
{
while(addr<NUM_SEGMENT){
if(*str)
FPOutChar(addr,*str);
else
break;
addr++;
str++;
}
}
void FpClearStr()
{
unsigned char i;
for(i=0;i<NUM_SEGMENT;i++){
FPOutChar(i,' ');
}
}
void FPClearLcd()
{
unsigned char i;
for(i=0;i<LCD_BUF_SIZE;i++){
LcdBufBak[i] = 0xff;
LcdBuf[i] = 0;
}
}
void FpDisplayVol(unsigned char vol)
{
FPClearLcd();
FPOutString(0,"VL ");
FPDisplayIcon(FP_INFO_DOT_MIN1,0);
FPOutChar(5,vol/10+'0');
FPOutChar(6,vol%10+'0');
}
void FpDisplayToneValue(unsigned char ucvalue)
{
if(ucvalue<12){
FPOutChar(4,'-');
FPOutChar(5,(12-ucvalue)/10+'0');
FPOutChar(6,(12-ucvalue)%10+'0');
#ifdef __EMULATOR_H__
ShowLcdChar(4,'-');
ShowLcdChar(5,(12-ucvalue)/10+'0');
ShowLcdChar(6,(12-ucvalue)%10+'0');
#endif
}
else{
FPOutChar(5,(ucvalue-12)/10+'0');
FPOutChar(6,(ucvalue-12)%10+'0');
#ifdef __EMULATOR_H__
ShowLcdChar(5,(ucvalue-12)/10+'0');
ShowLcdChar(6,(ucvalue-12)%10+'0');
#endif
}
FPDisplayIcon(FP_INFO_DOT_MIN1,0);
SetTimerFunc(TIME_5SEC,REDRAW_KEY);
}
void FpDisplayBass(unsigned char ucvalue)
{
FPClearLcd();
FPOutString(0,"BA ");
#ifdef __EMULATOR_H__
ShowLcdString(0,"BA ");
#endif
FpDisplayToneValue(ucvalue);
}
void FpDisplayTreble(unsigned char ucvalue)
{
FPClearLcd();
FPOutString(0,"Tr ");
#ifdef __EMULATOR_H__
ShowLcdString(0,"Tr ");
#endif
FpDisplayToneValue(ucvalue);
}
void FpDisplayBalance(unsigned char ucvalue)
{
FPClearLcd();
FPOutString(0,"BL ");
#ifdef __EMULATOR_H__
ShowLcdString(0,"BL ");
#endif
FpDisplayToneValue(ucvalue);
}
void FpDisplayFade(unsigned char ucvalue)
{
FPClearLcd();
FPOutString(0,"Fa ");
#ifdef __EMULATOR_H__
ShowLcdString(0,"Fa ");
#endif
FpDisplayToneValue(ucvalue);
}
void FlashFpChar()
{
unsigned char i;
unsigned short mask = 1;
bFlashOn = !bFlashOn;
for(i=0;i<NUM_SEGMENT;i++){
if(uiAttribute&mask){
if(bFlashOn)
FPOutChar(FpChar[i],i);
else if(FpChar[i]==' ')
FPOutChar('_',i);
else
FPOutChar(' ',i);
}
mask <<= 1;
}
}
//this function should been called by the main task.
void UpdateLcd()
{
unsigned char i;
if(uiAttribute)
FlashFpChar();
//adjust the buffer have changed?if not I will return directly.
for(i=0;i<LCD_BUF_SIZE;i++){
if(LcdBufBak[i]!=LcdBuf[i])
break;
}
if(i>=LCD_BUF_SIZE)
return;
//changed,I will update it.
for(i=0;i<LCD_BUF_SIZE;i++){
if(LcdBufBak[i]!=LcdBuf[i]){
WriteLcdData(i,LcdBuf[i]);
LcdBufBak[i]=LcdBuf[i];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -