📄 spilcd.c
字号:
0x00,0x00,0x00,
/*-- 文字: g --*/
0x00,0x00,0x00,
/*-- 文字: h --*/
0x00,0x00,0x00,
/*-- 文字: i --*/
0x00,0x00,0x00,
/*-- 文字: j --*/
0x00,0x00,0x00,
/*-- 文字: k --*/
0x00,0x00,0x00,
/*-- 文字: l --*/
0x00,0x00,0x00,
/*-- 文字: m --*/
0x00,0x00,0x00,
/*-- 文字: n --*/
0x00,0x00,0x00,
/*-- 文字: o --*/
0x00,0x00,0x00,
/*-- 文字: p --*/
0x00,0x00,0x00,
/*-- 文字: q --*/
0x00,0x00,0x00,
/*-- 文字: r --*/
0x00,0x00,0x00,
/*-- 文字: s --*/
0x00,0x00,0x00,
/*-- 文字: t --*/
0x00,0x00,0x00,
/*-- 文字: u --*/
0x00,0x00,0x00,
/*-- 文字: v --*/
0x00,0x00,0x00,
/*-- 文字: w --*/
0x00,0x00,0x00,
/*-- 文字: x --*/
0x00,0x00,0x00,
/*-- 文字: y --*/
0x00,0x00,0x00,
/*-- 文字: z --*/
0x00,0x00,0x00,
/*-- 文字: { --*/
0x00,0x00,0x00,
/*-- 文字: | --*/
0x00,0x00,0x00,
/*-- 文字: } --*/
0x00,0x00,0x00,
/*-- 文字: ~ --*/
0x00,0x00,0x00,
};
/*
*********************************************************************************************
start_coordinate:char start coordinate
val:it will be display char
*********************************************************************************************
*/
void bitchar_value(UINT8 start_coordinate, UINT8 val)
{
if(val>0x1f)
{
switch(start_coordinate)
{
/*第1个字符位置*/
case 1:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
n.TempData[3]=0x00;
n.x=n.x<<4;
LCDchar.char_num[0]&=0x0f;
LCDchar.char_num[0]|=n.TempData[0];
LCDchar.char_num[1]=n.TempData[1];
LCDchar.char_num[2]&=0xfc;
LCDchar.char_num[2]|=n.TempData[2];
break ;
/*第2个字符位置*/
case 2:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
n.TempData[3]=0x00;
n.x=n.x<<3;
LCDchar.char_num[2]&=0x07;
LCDchar.char_num[2]|=n.TempData[0];
LCDchar.char_num[3]=n.TempData[1];
LCDchar.char_num[4]&=0xfc;
LCDchar.char_num[4]|=n.TempData[2];
break ;
/*第3个字符位置*/
case 3:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
n.TempData[3]=0x00;
n.x=n.x<<2;
LCDchar.char_num[4]&=0x03;
LCDchar.char_num[4]|=n.TempData[0];
LCDchar.char_num[5] =n.TempData[1];
break ;
/*第4个字符位置*/
case 4:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
n.TempData[3]=0x00;
n.x=n.x<<1;
LCDchar.char_num[6]&=0x01;
LCDchar.char_num[6]|=n.TempData[0];
LCDchar.char_num[7]&=0x80;
LCDchar.char_num[7]|=n.TempData[1];
break ;
/*第5个字符位置*/
case 5:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
LCDchar.char_num[8]=n.TempData[0];
LCDchar.char_num[9]&=0xc0;
LCDchar.char_num[9]|=n.TempData[1];
LCDchar.char_num[9]=n.TempData[1];
break ;
/*第6个字符位置*/
case 6:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
n.TempData[3]=n.TempData[0]&0x01;
n.TempData[3]<<=7;
LCDchar.char_num[9]&=0x7f;
LCDchar.char_num[9]|=n.TempData[3];
n.x=n.x>>1;
LCDchar.char_num[10]=n.TempData[0];
LCDchar.char_num[11]&=0xe0;
LCDchar.char_num[11]|=n.TempData[1];
break ;
/*第7个字符位置*/
case 7:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
n.TempData[3]=n.TempData[0]&0x03;
n.TempData[3]=n.TempData[3]<<6;
LCDchar.char_num[11]&=0x3f;
LCDchar.char_num[11]|=n.TempData[3];
n.x=n.x>>2;
LCDchar.char_num[12]=n.TempData[0];
LCDchar.char_num[13]&=0xf0;
LCDchar.char_num[13]|=n.TempData[1];
break ;
/*第8个字符位置*/
case 8:
n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
n.TempData[3]=n.TempData[0]&0x07;
n.TempData[3]=n.TempData[3]<<5;
LCDchar.char_num[13]&=0x1f;
LCDchar.char_num[13]|=n.TempData[3];
n.x=n.x>>3;
LCDchar.char_num[14]=n.TempData[0];
LCDchar.char_num[15]&=0xf8;
LCDchar.char_num[15]|=n.TempData[1];
break ;
/*第9个字符位置小字*/
case 9:
n.TempData[0]=ASC_MSKsmall[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSKsmall[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
n.TempData[3]=n.TempData[0]&0x01;
n.TempData[3]=n.TempData[3]<<7;
LCDchar.char_num[15]&=0x7f;
LCDchar.char_num[15]|=n.TempData[3];
n.x=n.x>>1;
n.TempData[2]=LCDchar.char_num[16]&0x60;
LCDchar.char_num[16]=n.TempData[0]|n.TempData[2];
break ;
/*第10个字符位置小字*/
case 10:
n.TempData[0]=ASC_MSKsmalltwo[(val-0x1f)*3+0];
n.TempData[1]=ASC_MSKsmalltwo[(val-0x1f)*3+1];
n.TempData[2]=0x00;
n.TempData[3]=0x00;
n.TempData[3]=n.TempData[0]&0x03;
n.TempData[3]=n.TempData[3]<<5;
LCDchar.char_num[16]&=0x9f;
LCDchar.char_num[16]|=n.TempData[3];
n.x=n.x>>3;
LCDchar.char_num[17]&=0xe0;
LCDchar.char_num[17]|=n.TempData[0];
break ;
default :
break;
}
}
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void delay(void)
{
unsigned char i=0;
for(i=0;i<50;i++)
{
;
}
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void lcd7528init(void)
{
PM0.4=0;//CLK OUT MODE
PM0.3=0;
PM0.5=0;
CLR_CS;
SET_LCDSCLK;
SET_LCDDATA;
}
/*
*********************************************************************************************
function:单字节写
*********************************************************************************************
*/
void WriteByte7528( unsigned char bytedata)
{
unsigned char i,val=0;
val=bytedata;
SET_LCDSCLK;
for (i=0; i<8; i++)
{
CLR_LCDSCLK;
delay();
if(val & 0x01)
SET_LCDDATA;
else
CLR_LCDDATA;
delay();
SET_LCDSCLK;
delay();
val >>=1;
}
}
/*
*********************************************************************************************
FUNCTION:LCD 数据
*********************************************************************************************
*/
void LCD_SENDDATA(void)
{
unsigned char i;
CLR_CS;
delay();
WriteByte7528(0x41);
SET_CS ;
delay();
delay();
for (i=0; i<20; i++)
{
WriteByte7528(LCDchar.char_num[i]);
}
CLR_LCDSCLK;
delay();
SET_LCDSCLK;
delay();
delay();
CLR_CS;
}
/*
*********************************************************************************************
Function:char display
start_coordinate:char start coordinate
fmt:char string
num:1~10
*********************************************************************************************
*/
void eprintf(UINT8 start_coordinate,char *fmt,...)
{
UINT8 i,uLen;
va_list arg_ptr;
char c1,c2;
uLen=0;
va_start(arg_ptr,fmt);
uLen = (unsigned char)vsprintf(display, fmt, arg_ptr) ;
va_end(arg_ptr);
if(start_coordinate>10)
{
start_coordinate=0;
}
c2=start_coordinate+uLen;
if(c2<=11)
{
while(i<uLen)
{
c1 = display[i];
if(c1 >= 0)
{
bitchar_value(start_coordinate,c1);
}
start_coordinate++;
i++;
}
LCD_SENDDATA();
}
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void clearchar(void)
{
UINT8 i;
CLR_CS;
delay();
WriteByte7528(0x41);
SET_CS ;
delay();
delay();
for(i=0;i<19;i++)
{
LCDchar.char_num[i]=0x00;
WriteByte7528(LCDchar.char_num[i]);
}
CLR_LCDSCLK;
delay();
SET_LCDSCLK;
delay();
delay();
CLR_CS;
}
/*
*********************************************************************************************
function:specialties char display
num:specialties char display coordinate 1~10
*********************************************************************************************
*/
void spec_char_display(UINT8 num,UINT8 fit)
{
UINT8 tempdata=0;
switch(num)
{
case 1:
if(fit)
{
tempdata=LCDchar.char_num[0];
tempdata|=0x0f;
LCDchar.char_num[0]=tempdata;
tempdata=LCDchar.char_num[4];
tempdata|=0x02;
LCDchar.char_num[4]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[0];
tempdata&=0xf0;
LCDchar.char_num[0]=tempdata;
tempdata=LCDchar.char_num[4];
tempdata&=0xfd;
LCDchar.char_num[4]=tempdata;
LCD_SENDDATA();
}
break;
case 2:
if(fit)
{
tempdata=LCDchar.char_num[2];
tempdata|=0x04;
LCDchar.char_num[2]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[2];
tempdata&=0xfb;
LCDchar.char_num[2]=tempdata;
LCD_SENDDATA();
}
break;
case 3:
if(fit)
{
tempdata=LCDchar.char_num[7];
tempdata|=0x80;
LCDchar.char_num[7]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[7];
tempdata&=0x7f;
LCDchar.char_num[7]=tempdata;
LCD_SENDDATA();
}
break;
case 4:
if(fit)
{
tempdata=LCDchar.char_num[9];
tempdata|=0x40;
LCDchar.char_num[9]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[9];
tempdata&=0xbf;
LCDchar.char_num[9]=tempdata;
LCD_SENDDATA();
}
break;
case 5:
if(fit)
{
tempdata=LCDchar.char_num[11];
tempdata|=0x20;
LCDchar.char_num[11]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[11];
tempdata&=0xdf;
LCDchar.char_num[11]=tempdata;
LCD_SENDDATA();
}
break;
case 6:
if(fit)
{
tempdata=LCDchar.char_num[13];
tempdata|=0x10;
LCDchar.char_num[13]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[13];
tempdata&=0xef;
LCDchar.char_num[13]=tempdata;
LCD_SENDDATA();
}
break;
case 7:
if(fit)
{
tempdata=LCDchar.char_num[15];
tempdata|=0x08;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[15];
tempdata&=0xf7;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
break;
case 8:
if(fit)
{
tempdata=LCDchar.char_num[15];
tempdata|=0x10;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[15];
tempdata&=0xef;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
break;
case 9:
if(fit)
{
tempdata=LCDchar.char_num[15];
tempdata|=0x20;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[15];
tempdata&=0xdf;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
break;
case 10:
if(fit)
{
tempdata=LCDchar.char_num[15];
tempdata|=0x40;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[15];
tempdata&=0xbf;
LCDchar.char_num[15]=tempdata;
LCD_SENDDATA();
}
break;
case 11:
if(fit)
{
tempdata=LCDchar.char_num[17];
tempdata|=0x20;
LCDchar.char_num[17]=tempdata;
LCD_SENDDATA();
}
else
{
tempdata=LCDchar.char_num[17];
tempdata&=0xdf;
LCDchar.char_num[17]=tempdata;
LCD_SENDDATA();
}
break;
default :
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -