單片機nrf51822,在移植stm32lcd的例程中發現程序報錯,報錯顯示如下
.\Peripheral\inc\FONT.h(446): error: #144: a value of type "char [4]" cannot be used to initialize an entity of type "unsigned char [2]"
"???",0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,
.\Peripheral\inc\FONT.h(448): error: #144: a value of type "char [4]" cannot be used to initialize an entity of type "unsigned char [2]"
"???",0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x80,0x00,0xFF,0x7F,0x00,0x00,
.\Peripheral\inc\FONT.h(450): error: #144: a value of type "char [4]" cannot be used to initialize an entity of type "unsigned char [2]"
"???",0x00,0x00,0xFE,0x3F,0x02,0x20,0xF2,0x27,0x02,0x20,0x02,0x20,0xFA,0x2F,0x22,0x21,
.\Peripheral\inc\FONT.h(452): error: #144: a value of type "char [4]" cannot be used to initialize an entity of type "unsigned char [2]"
"???",0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,
.\Peripheral\inc\FONT.h(454): error: #144: a value of type "char [4]" cannot be used to initialize an entity of type "unsigned char [2]"
"???",0x00,0x00,0xFE,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x80,0x01,0x80,0x00,0xFF,0x7F,
Peripheral\src\LCD.c: 0 warnings, 5 errors
報錯位置代碼是這樣的
const typFNT_GB16 tfont16[]={
"中",0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,
0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x10,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,/*"中",0*/
"景",0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x80,0x00,0xFF,0x7F,0x00,0x00,
0xF8,0x0F,0x08,0x08,0x08,0x08,0xF8,0x0F,0x80,0x00,0x84,0x10,0xA2,0x20,0x40,0x00,/*"景",1*/
"園",0x00,0x00,0xFE,0x3F,0x02,0x20,0xF2,0x27,0x02,0x20,0x02,0x20,0xFA,0x2F,0x22,0x21,
0x22,0x21,0x22,0x21,0x12,0x29,0x12,0x29,0x0A,0x2E,0x02,0x20,0xFE,0x3F,0x02,0x20,/*"園",2*/
"電",0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,
0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x50,0x80,0x40,0x80,0x40,0x00,0x7F,/*"電",3*/
"子",0x00,0x00,0xFE,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x80,0x01,0x80,0x00,0xFF,0x7F,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,/*"子",4*/
最開始我以為是漢字導致的問題,將“中景園電子”幾個字刪除以后,程序不再報錯,編譯程序可以通過,然后我調用
LCD_ShowChinese(40,0,"中景園電子",RED,WHITE,16,0);
發現下載以后程序不能正常顯示,但是調用LCD_ShowString(0,0 ,"A",GRED,BLUE ,16,0);可以正常顯示字母。
百度查找很多地方,說是關于指針的問題,只是我沒看懂,想問一下大佬們怎么改
以下是LCD_ShowChinese的具體內容,望大佬們指點
/******************************************************************************
函數說明:顯示漢字串
入口數據:x,y顯示坐標
*s 要顯示的漢字串
fc 字的顏色
bc 字的背景色
sizey 字號 可選 16 24 32
mode: 0非疊加模式 1疊加模式
返回值: 無
******************************************************************************/
void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
{
while(*s!=0)
{
if(sizey==12) LCD_ShowChinese12x12(x,y,s,fc,bc,sizey,mode);
else if(sizey==16) LCD_ShowChinese16x16(x,y,s,fc,bc,sizey,mode);
else if(sizey==24) LCD_ShowChinese24x24(x,y,s,fc,bc,sizey,mode);
else if(sizey==32) LCD_ShowChinese32x32(x,y,s,fc,bc,sizey,mode);
else return;
s+=2;
x+=sizey;
}
}
/******************************************************************************
函數說明:顯示單個12x12漢字
入口數據:x,y顯示坐標
*s 要顯示的漢字
fc 字的顏色
bc 字的背景色
sizey 字號
mode: 0非疊加模式 1疊加模式
返回值: 無
******************************************************************************/
void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
{
u8 i,j,m=0;
u16 k;
u16 HZnum;//漢字數目
u16 TypefaceNum;//一個字符所占字節大小
u16 x0=x;
TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
HZnum=sizeof(tfont12)/sizeof(typFNT_GB12); //統計漢字數目
for(k=0;k<HZnum;k++)
{
if((tfont12[k].Index[0]==*(s))&&(tfont12[k].Index[1]==*(s+1)))
{
LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
for(i=0;i<TypefaceNum;i++)
{
for(j=0;j<8;j++)
{
if(!mode)//非疊加方式
{
if(tfont12[k].Msk[ i]&(0x01<<j))LCD_WR_DATA(fc);
else LCD_WR_DATA(bc);
m++;
if(m%sizey==0)
{
m=0;
break;
}
}
else//疊加方式
{
if(tfont12[k].Msk[ i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//畫一個點
x++;
if((x-x0)==sizey)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到對應點陣字庫立即退出,防止多個漢字重復取模帶來影響
}
}
/******************************************************************************
函數說明:顯示單個16x16漢字
入口數據:x,y顯示坐標
*s 要顯示的漢字
fc 字的顏色
bc 字的背景色
sizey 字號
mode: 0非疊加模式 1疊加模式
返回值: 無
******************************************************************************/
void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
{
u8 i,j,m=0;
u16 k;
u16 HZnum;//漢字數目
u16 TypefaceNum;//一個字符所占字節大小
u16 x0=x;
TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //統計漢字數目
for(k=0;k<HZnum;k++)
{
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
{
LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
for(i=0;i<TypefaceNum;i++)
{
for(j=0;j<8;j++)
{
if(!mode)//非疊加方式
{
if(tfont16[k].Msk[ i]&(0x01<<j))LCD_WR_DATA(fc);[ i]
else LCD_WR_DATA(bc);
m++;
if(m%sizey==0)
{
m=0;
break;
}
}
else//疊加方式
{
if(tfont16[k].Msk[ i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//畫一個點[ i]
x++;
if((x-x0)==sizey)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到對應點陣字庫立即退出,防止多個漢字重復取模帶來影響
}
}
/******************************************************************************
函數說明:顯示單個24x24漢字
入口數據:x,y顯示坐標
*s 要顯示的漢字
fc 字的顏色
bc 字的背景色
sizey 字號
mode: 0非疊加模式 1疊加模式
返回值: 無
******************************************************************************/
void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
{
u8 i,j,m=0;
u16 k;
u16 HZnum;//漢字數目
u16 TypefaceNum;//一個字符所占字節大小
u16 x0=x;
TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
HZnum=sizeof(tfont24)/sizeof(typFNT_GB24); //統計漢字數目
for(k=0;k<HZnum;k++)
{
if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
{
LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
for(i=0;i<TypefaceNum;i++)
{
for(j=0;j<8;j++)
{
if(!mode)//非疊加方式
{
if(tfont24[k].Msk[ i]&(0x01<<j))LCD_WR_DATA(fc);
else LCD_WR_DATA(bc);
m++;
if(m%sizey==0)
{
m=0;
break;
}
}
else//疊加方式
{
if(tfont24[k].Msk[ i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//畫一個點
x++;
if((x-x0)==sizey)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到對應點陣字庫立即退出,防止多個漢字重復取模帶來影響
}
}
/******************************************************************************
函數說明:顯示單個32x32漢字
入口數據:x,y顯示坐標
*s 要顯示的漢字
fc 字的顏色
bc 字的背景色
sizey 字號
mode: 0非疊加模式 1疊加模式
返回值: 無
******************************************************************************/
void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
{
u8 i,j,m=0;
u16 k;
u16 HZnum;//漢字數目
u16 TypefaceNum;//一個字符所占字節大小
u16 x0=x;
TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
HZnum=sizeof(tfont32)/sizeof(typFNT_GB32); //統計漢字數目
for(k=0;k<HZnum;k++)
{
if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
{
LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
for(i=0;i<TypefaceNum;i++)
{
for(j=0;j<8;j++)
{
if(!mode)//非疊加方式
{
if(tfont32[k].Msk[ i]&(0x01<<j))LCD_WR_DATA(fc);
else LCD_WR_DATA(bc);
m++;
if(m%sizey==0)
{
m=0;
break;
}
}
else//疊加方式
{
if(tfont32[k].Msk[ i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//畫一個點
x++;
if((x-x0)==sizey)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到對應點陣字庫立即退出,防止多個漢字重復取模帶來影響
}
}
};
|