📄 sed1335lcd.c
字号:
/*----------------直线--------------------------------------------------*/
/***********************************************************
* 函数名称: QuickLineX() *
* 函数用途: 作水平线 *
* 输入参数: *
* Y: 纵坐标 *
* XStart:起点横坐标 *
* XEnd: 终点横坐标 *
* 输出参数:无 *
* *
************************************************************/
void QuickLineX(uchar ucY , uint unXStart , uint unXEnd)
{
char cWholeByte;
uchar ucStartByte;
uchar ucEndByte;
union CURSOR_ADR POSITION;
ucStartByte = 0x0FF>>( unXStart%8);
ucEndByte=0x0FF <<(7-unXEnd%8);
if((unXEnd/8)==(unXStart/8))
ucStartByte = ucStartByte & ucEndByte;
POSITION.Adr = ucY*APL + unXStart/8;
LCDCommand = CSRDIR_RIGHT;
LCDCommand = CSRW; //设置光标地址
LCDDataWrite = POSITION.AdrByte.AdrL;
LCDDataWrite = POSITION.AdrByte.AdrH;
LCDCommand = MWRITE;
LCDDataWrite = ucStartByte;
cWholeByte = (unXEnd-unXStart)/8 ;
if(cWholeByte >0)
{
cWholeByte -=1;
while(cWholeByte-->0)
LCDDataWrite = 0xFF;
LCDDataWrite = ucEndByte;
}
}
/************************************************************************
* 函数名称: QuickLineY() *
* 函数用途: 作垂直线 *
* 输入参数: *
* X: 横坐标 *
* YStart: 起点纵坐标 *
* YEnd: 终点纵坐标 *
* ucWidth:直线宽度(点) ,最大值强行置为8 *
* 输出参数:无 *
* *
*************************************************************************/
void QuickLineY(uint unX , uchar ucYStart , uchar ucYEnd, uchar ucWidth)
{
uchar uData[2];
uchar ucColumnCounter;
uchar ucRowCounter;
uchar ucSplit;
union CURSOR_ADR POSITION;
if(ucWidth>8)
ucWidth=8;
if((unX%8+ucWidth)>8)
{
ucSplit = 1;
uData[0]=0x0FF>>(unX%8);
uData[1]=0x0FF<<(16-unX%8-ucWidth);
}
else
{
ucSplit = 0;
uData[0]=(0x0FF>>(unX%8))&(0x0FF<<(8-unX%8-ucWidth));
}
POSITION.Adr = ucYStart*APL + unX/8;
LCDCommand = CSRDIR_DOWN;
for(ucColumnCounter = 0;ucColumnCounter <= ucSplit;ucColumnCounter++) //点阵显示列控制(2字节,16点)
{
LCDCommand = CSRW;
LCDDataWrite = POSITION.AdrByte.AdrL;
LCDDataWrite = POSITION.AdrByte.AdrH;
LCDCommand=MWRITE;
for(ucRowCounter = 0;ucRowCounter <=(ucYEnd-ucYStart);ucRowCounter++) //点阵显示行控制
{
LCDDataWrite = uData[ucColumnCounter];
}
POSITION.Adr++; //显示内存地址加1,指向字符右半部显示内存地址
}
}
/*******************************************************************
* 函数名称: CursorDisplay() *
* 函数用途: 线状光标 显示 *
* 输入参数: *
* ucRow : 屏幕行号 *
* ucColumn : 屏幕列号(单位:字节) *
* ucAttribute: 字符显示属性(0:正常;1:反白)*
* 输出参数:无 *
* *
*********************************************************************/
void CursorDisplay(uchar ucRow , uchar ucColumn , uchar ucAttribute)
{
union CURSOR_ADR xdata POSITION;
POSITION.Adr = ucRow*APL + ucColumn; //计算显示位置的内存地址
LCDCommand = CSRDIR_DOWN;
LCDCommand = CSRW;
LCDDataWrite = POSITION.AdrByte.AdrL;
LCDDataWrite = POSITION.AdrByte.AdrH;
LCDCommand=MWRITE;
if(ucAttribute == 0)
{
LCDDataWrite = 0x00;
LCDDataWrite = 0x00;
}
else
{
LCDDataWrite =0xFF;
LCDDataWrite =0xFF;
}
}
/*----------------字符串显示---------------------------------------------------*/
/*******************************************************************************
* 函数名称: LCDPrintf() *
* 函数用途: 显示16X16的汉字与字符串 *
* 输入参数: *
* ucRowStart: 显示起始行号 *
* ucColumnStar: 显示起始列号(单位:字节) *
* *pStringDisplay: 显示的字符串 *
* ucAttribute: 字符显示属性(0:正常;1:反白) *
* 输出参数:无 *
* *
*******************************************************************************/
void LCDPrintf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay )
{
uchar idata ucIndex;
uchar idata ucCodeH ;
uchar idata ucCodeL; //字符编码高低位
while((*pStringDisplay != '\0') && (ucColumnStart < 39))
{
ucCodeL = *pStringDisplay; //取编码低字节,字符为单字节编码,无高字节
if(ucCodeL < 128) //字符
{
ucIndex = ucCodeL - 32; //求字符在字库的索引值,首个字符位空格,按ASCII嘛顺序存放
Char16Display(ucIndex , ucRowStart , ucColumnStart , ucAttribute);
pStringDisplay++;
}//if(ucCodeL < 128)
else //汉字
{
ucCodeH = *(pStringDisplay + 1); //取编码高字节
for(ucIndex = 0 ; ucIndex < (sizeof(GB_16) / sizeof(GB_16[0])) ; ucIndex++)
{
if((ucCodeL == GB_16[ucIndex].GBCode[0]) && (ucCodeH ==GB_16[ucIndex].GBCode[1])) //查找汉字在字库的索引值
{
ChineseDisplay(ucIndex , ucRowStart , ucColumnStart , ucAttribute);
break;
}
}//for(ucIndex = 0 ; ucIndex < (sizeof(GB_16) / sizeof(GB_16[0])) ; ucIndex++)
pStringDisplay += 2;
}//else
ucColumnStart = ucColumnStart + 2;
}
}
/********************************************************************************
* 函数名称: LCD24Printf() *
* 函数用途: 显示24X24的字符串 *
* 输入参数: *
* ucRowStart: 显示起始行号 *
* ucColumnStar: 显示起始列号(单位:字节) *
* *pStringDisplay: 显示的字符串 *
* ucAttribute: 字 符显示属性(0:正常;1:反白) *
* 输出参数:无 *
* *
********************************************************************************/
void LCD24Printf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay )
{
uchar idata ucIndex;
while(*pStringDisplay != '\0')
{
if(*pStringDisplay == 32 ) // 空格
{
ucIndex = 0;
}
else if(*pStringDisplay > 57) // XYZ
{
ucIndex = *pStringDisplay - 88 + 14;
}
else // - ~ 9
{
ucIndex = *pStringDisplay - 45 + 1;
}
Char24Display(ucIndex , ucRowStart , ucColumnStart , ucAttribute);
pStringDisplay++;
ucColumnStart = ucColumnStart + 3;
}
}
/******************************************************************************
* 函数名称: LCD16X24Printf() *
* 函数用途: 显示16X24的字符串 *
* 输入参数: *
* ucRowStart: 显示起始行号 *
* ucColumnStar: 显示起始列号(单位:字节) *
* *pStringDisplay: 显示的字符串 *
* ucAttribute: 字符显示属性(0:正常;1:反白) *
* 输出参数:无 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -