📄 hal_lcd.c
字号:
* @brief Write one line on display
*
* @param uint8 line - display line
* char *pText - text buffer to write
*
* @return none
**************************************************************************************************/
void HalLcd_HW_WriteLine(uint8 line, const char *pText)
{
uint8 count;
uint8 totalLength = strlen(pText);
/* Write the content first */
for (count=0; count<totalLength; count++)
{
HalLcd_HW_WriteChar(line, count, (*(pText++)));
}
/* Write blank spaces to rest of the line */
for(count=totalLength; count<LCD_MAX_LINE_LENGTH;count++)
{
HalLcd_HW_WriteChar(line, count, ' ');
}
}
/**************************************************************************************************
* @fn HalLcd_HW_Wait
*
* @brief wait for 4 "nop"
*
* @param uint16 i - number of 4xNOP
*
* @return None
**************************************************************************************************/
void HalLcd_HW_Wait(uint16 i)
{
while(i--)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
/*******************************************************************************
//函数名:void Printn(INT8U xx ,INT8U yy , INT32U no,INT8U yn,INT8U le)
//功能:显示一个6*8无符号数据
//输入:xx , yy屏幕当中位置,no待显示数据 yn=0正常显示 yn=1反黑显示 le有效位
//输出:无
********************************************************************************/
void Printn(uint8 xx ,uint8 yy , uint32 no,uint8 yn,uint8 le)
{
uint8 ch2[6];
uint8 ii;
for(ii = 1 ; ii <= le ;)
{
ch2[le - ii] = no % 10 + 0x30;
no /= 10;
ii += 1;
}
ch2[le] = '\0';
Print6(xx ,yy ,ch2 ,yn);
}
/*******************************************************************************
//函数名:void Printn8(INT8U xx ,INT8U yy , INT32U no,INT8U yn,INT8U le)
//功能:显示8*8一个无符号数据
//输入:xx , yy屏幕当中位置,no待显示数据 yn=0正常显示 yn=1反黑显示 le有效位
//输出:无
********************************************************************************/
void Printn8(uint8 xx ,uint8 yy , uint32 no,uint8 yn,uint8 le)
{
uint8 ch2[6];
uint8 ii;
for(ii = 1 ; ii <= le ;){
ch2[le - ii] = no % 10 + 0x30;
no /= 10;
ii += 1;
}
ch2[le] = '\0';
Print(xx ,yy ,ch2 ,yn);
}
/*******************************************************************************
//函数名:void Print6(INT8U xx, INT8U yy, INT8U ch1[], INT8U yn)
//功能:显示6*8字符串
//输入:xx ,yy 坐标,ch1待显示的字符串,yn是否反黑
//输出:无
********************************************************************************/
void Print6(uint8 xx, uint8 yy, uint8 ch1[], uint8 yn)
{
uint8 ii = 0;
uint8 bb = 0;
unsigned int index = 0 ;
SetRamAddr(xx , yy);
while(ch1[bb] != '\0')
{
index = (unsigned int)(ch1[bb] - 0x20);
index = (unsigned int)index*6;
for(ii=0;ii<6;ii++)
{
if(yn)
{
Lcdwritedata(FontSystem6x8[index]);
}
else
{
Lcdwritedata(FontSystem6x8[index]^0xff);
}
index += 1;
}
bb += 1;
}
}
/*******************************************************************************
//函数名:void Print8(uint8 y,uint8 x, uint8 ch[],uint8 yn)
//功能:显示8*8字符串
//输入:xx ,yy 坐标,ch1待显示的字符串,yn是否反黑
//输出:无
********************************************************************************/
void Print8(uint8 y,uint8 x,uint8 ch[],uint8 yn)
{
uint8 wm ,ii = 0;
uint16 adder;
while(ch[ii] != '\0')
{
adder = (ch[ii] - 0x20) * 16;
SetRamAddr(y , x);
for(wm = 0;wm < 8;wm++)
{
if(yn == 0)
{
Lcdwritedata(Font8X8[adder]^0xff);
}
else
{
Lcdwritedata(Font8X8[adder]);
}
adder += 1;
}
SetRamAddr(y + 1 , x);
for(wm = 0;wm < 8;wm++)
{
if(yn == 0)
{
Lcdwritedata(Font8X8[adder]^0xff);
}
else
{
Lcdwritedata(Font8X8[adder]);
}
adder += 1;
}
ii += 1;
x += 8;
}
}
/*******************************************************************************
//函数名:void Print16(uint8 y,uint8 x,uint8 ch[],uint8 yn)
//功能:在屏幕上显示汉字
//输入:x ,y 坐标,ch[]待显示的汉字,yn是否反黑
//输出:无
********************************************************************************/
void Print16(uint8 y,uint8 x,uint8 ch[],uint8 yn)
{
uint8 wm ,ii = 0;
uint16 adder;
wm = 0;
adder = 1;
while(FontNew8X16_Index[wm] > 100)
{
if(FontNew8X16_Index[wm] == ch[ii])
{
if(FontNew8X16_Index[wm + 1] == ch[ii + 1])
{
adder = wm * 14;
break;
}
}
wm += 2; //找到汉字在索引中的位置
}
SetRamAddr(y , x);
if(adder != 1) //找到汉字,显示出来
{
SetRamAddr(y , x);
for(wm = 0;wm < 14;wm++)
{
if(yn == 0)
{
Lcdwritedata(FontNew16X16[adder]^0xff);
}
else
{
Lcdwritedata(FontNew16X16[adder]);
}
adder += 1;
}
for(wm = 0;wm < 2;wm++)
{
if(yn == 0)
{
Lcdwritedata(0xff);
}
else
{
Lcdwritedata(0x00);
}
}
SetRamAddr(y + 1 , x);
for(wm = 0;wm < 14;wm++)
{
if(yn == 0)
{
Lcdwritedata(FontNew16X16[adder]^0xff);
}
else
{
Lcdwritedata(FontNew16X16[adder]);
}
adder += 1;
}
for(wm = 0;wm < 2;wm++)
{
if(yn == 0)
{
Lcdwritedata(0xff);
}
else
{
Lcdwritedata(0x00);
}
}
}
else //找不到字显示空格
{
ii += 1;SetRamAddr(y , x);
for(wm = 0;wm < 16;wm++)
{
if(yn == 0)
{
Lcdwritedata(0xff);
}
else
{
Lcdwritedata(0x00);
}
}
SetRamAddr(y + 1 , x);
for(wm = 0;wm < 16;wm++)
{
if(yn == 0)
{
Lcdwritedata(0xff);
}
else
{
Lcdwritedata(0x00);
}
}
}
}
/*******************************************************************************
//函数名:void Print(INT8U y, INT8U x, INT8U ch[], INT16U yn)
//功能:实现汉字及字母混合显示
//输入:x ,y 坐标,ch[]待显示的汉字或字母,yn是否反黑
//输出:无
********************************************************************************/
void Print(uint8 y, uint8 x, uint8 ch[], uint16 yn)
{
uint8 ch2[3];
uint8 ii;
ii = 0;
while(ch[ii] != '\0')
{
if(ch[ii] > 127)
{
ch2[0] = ch[ii];
ch2[1] = ch[ii + 1];
ch2[2] = '\0'; //汉字为两个字节
Print16(y , x , ch2 , yn); //显示汉字
x += 16;
ii += 2;
}
else
{
ch2[0] = ch[ii];
ch2[1] = '\0'; //字母占一个字节
Print8(y , x , ch2 , yn); //显示字母
x += 8;
ii += 1;
}
}
}
/*******************************************************************************
//函数名:void Rectangle(INT8U x1,INT8U y1,INT8U x2,INT8U y2)
//功能:画直线函数,本函数目前只能画水平和垂直线
//输入:x1,y1(第一个点) x2,y2第二个点
//输出:无
********************************************************************************/
void Rectangle(uint8 x1,uint8 y1,uint8 x2,uint8 y2)
{
uint8 ii;
for(ii=x1; ii<x2; ii++)
{
SetRamAddr(y1,ii);
Lcdwritedata(0x08);
SetRamAddr(y2,ii);
Lcdwritedata(0x08); //画横线
}
SetRamAddr(y1,x1);
Lcdwritedata(0xF0);
SetRamAddr(y1,x2);
Lcdwritedata(0xF0);
for(ii = y1+1;ii<y2;ii++)
{
SetRamAddr(ii,x1);
Lcdwritedata(0xff);
SetRamAddr(ii,x2);
Lcdwritedata(0xff); //画竖线
}
SetRamAddr(y2,x1);
Lcdwritedata(0x0F);
SetRamAddr(y2,x2);
Lcdwritedata(0x0F);
}
#endif
/**************************************************************************************************
**************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -