Embedded arm cortex m3显示器
您好,我正在使用arm控制器lm3s8962,我无法理解下面的代码,根据我的理解,它正在检查字符是否来自他使用ascii字符创建的数组{即在while循环中:while(*pcStr!=0)}, 在“构建并显示字符缓冲区”一行之后,我无法理解他在代码中所做的事情。有人能解释一下吗Embedded arm cortex m3显示器,embedded,arm,embed,cortex-m3,Embedded,Arm,Embed,Cortex M3,您好,我正在使用arm控制器lm3s8962,我无法理解下面的代码,根据我的理解,它正在检查字符是否来自他使用ascii字符创建的数组{即在while循环中:while(*pcStr!=0)}, 在“构建并显示字符缓冲区”一行之后,我无法理解他在代码中所做的事情。有人能解释一下吗 void RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX, unsigned long
void
RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX,
unsigned long ulY, unsigned char ucLevel)
{
unsigned long ulIdx1, ulIdx2;
unsigned char ucTemp;
//
// Check the arguments.
//
ASSERT(ulX < 128);
ASSERT((ulX & 1) == 0);
ASSERT(ulY < 96);
ASSERT(ucLevel < 16);
//
// Setup a window starting at the specified column and row, ending
// at the right edge of the display and 8 rows down (single character row).
//
g_pucBuffer[0] = 0x15;
g_pucBuffer[1] = ulX / 2;
g_pucBuffer[2] = 63;
RITWriteCommand(g_pucBuffer, 3);
g_pucBuffer[0] = 0x75;
g_pucBuffer[1] = ulY;
g_pucBuffer[2] = ulY + 7;
RITWriteCommand(g_pucBuffer, 3);
RITWriteCommand(g_pucRIT128x96x4VerticalInc,
sizeof(g_pucRIT128x96x4VerticalInc));
//
// Loop while there are more characters in the string.
//
while(*pcStr != 0)
{
//
// Get a working copy of the current character and convert to an
// index into the character bit-map array.
//
ucTemp = *pcStr++ & 0x7f;
if(ucTemp < ' ')
{
ucTemp = 0;
}
else
{
ucTemp -= ' ';
}
//
// Build and display the character buffer.
//
for(ulIdx1 = 0; ulIdx1 < 6; ulIdx1 += 2)
{
//
// Convert two columns of 1-bit font data into a single data
// byte column of 4-bit font data.
//
for(ulIdx2 = 0; ulIdx2 < 8; ulIdx2++)
{
g_pucBuffer[ulIdx2] = 0;
if(g_pucFont[ucTemp][ulIdx1] & (1 << ulIdx2))
{
g_pucBuffer[ulIdx2] = (ucLevel << 4) & 0xf0;
}
if((ulIdx1 < 4) &&
(g_pucFont[ucTemp][ulIdx1 + 1] & (1 << ulIdx2)))
{
g_pucBuffer[ulIdx2] |= (ucLevel << 0) & 0x0f;
}
}
//
// Send this byte column to the display.
//
RITWriteData(g_pucBuffer, 8);
ulX += 2;
//
// Return if the right side of the display has been reached.
//
if(ulX == 128)
{
return;
}
}
}
}
void
RIT128x96x4StringDraw(常量字符*pcStr,无符号长ulX,
无符号长ulY,无符号字符级别)
{
无符号长ulIdx1,ulIdx2;
无符号字符;
//
//检查参数。
//
断言(ulX<128);
断言((ulX&1)==0);
断言(ulY<96);
断言(核级<16);
//
//设置一个窗口,从指定的列和行开始,结束
//在显示屏的右边缘,向下8行(单字符行)。
//
g_pucBuffer[0]=0x15;
g_pucBuffer[1]=ulX/2;
g_[2]=63;
RITWriteCommand(g_pucBuffer,3);
g_pucBuffer[0]=0x75;
g_pucBuffer[1]=ulY;
g_pucBuffer[2]=ulY+7;
RITWriteCommand(g_pucBuffer,3);
RITWriteCommand(g_pucRIT128x96x4VerticalInc,
尺寸(g_pucRIT128x96x4VerticalInc);
//
//当字符串中有更多字符时循环。
//
而(*pcStr!=0)
{
//
//获取当前角色的工作副本并转换为
//索引到字符位图数组中。
//
ucTemp=*pcStr++&0x7f;
如果(ucTemp<'')
{
ucTemp=0;
}
其他的
{
ucTemp-='';
}
//
//构建并显示字符缓冲区。
//
对于(ulIdx1=0;ulIdx1<6;ulIdx1+=2)
{
//
//将两列1位字体数据转换为单个数据
//4位字体数据的字节列。
//
对于(ulIdx2=0;ulIdx2<8;ulIdx2++)
{
g_pucBuffer[ulIdx2]=0;
如果(g_pucFont[ucTemp][ulIdx1]&(1他正在进行一些位操作以建立字节
x |=y
与x=x | y
相同,它将所有的1保留在x中,并且如果y在同一位置有1,也会将一些0更改为1
1如果你想知道答案,请重新组织你的问题,也请阅读FAQhi MELLWCANDLE我编辑了我的帖子,看看你是否能理解我的问题,实际上我无法找到他是如何构建缓冲区的。请你向我澄清一下,谢谢你的回答。我理解代码,但我在这方面遇到了一些问题(核级C不会使运算符过载。核级