c51单片机代码求解释

void LeftShift(bit CHTimeIcon, UCHAR RowSeq)
{
bit cFlg;
UCHAR i, k;
UCHAR bdata CHCode;

i = RowSeq<<1;

if (CHTimeIcon==1 || G_OrderIcon!=0)
cFlg = IBytesLeftShift(&G_Cur_TimeCode[i+1], 0);
else
{
if (i == 0 || i == 16)
CHCode = G_Cur_CHCode[i/16];
//取字节最高位,并左移
//cFlg = ReturnFlg(&CHCode);
cFlg = (CHCode & 0x80)>>7;
CHCode<<=1;
}

//显示缓冲区汉字点阵码左移位
for (k = _WIN_CH_NUM_; k > 0; k--)
cFlg = TwoBytesLeftShift(&G_CHCode[k-1][i+1], cFlg);
}

不知道这些代码是干嘛的,程序也不完整,只能给你字面的解释:

//XX子程序,有两个输入参数,一个是位变量CHTimeIcon,UCHAR的原型应该是关键字unsigned char 那么另一个是无符号字符型变量RowSeq
void LeftShift(bit CHTimeIcon, UCHAR RowSeq)
{
bit cFlg;//定义了1个位变量cFlg
UCHAR i, k;//定义了2个无符号字符型变量i和k
UCHAR bdata CHCode;//定义了1个可位寻址的无符号字符型变量CHCode

i = RowSeq<<1;//RowSeq没有在该子程序内声明,应该是全局变量,将RowSeq整个数据左移1位,最高位被移走,最低位变成0,然后将该值赋给变量i

if (CHTimeIcon==1 || G_OrderIcon!=0)//如果CHTimeIcon的值是1或者G_OrderIcon的值不等于0则进入下一行(CHTimeIcon和G_OrderIcon也是全局变量)
cFlg = IBytesLeftShift(&G_Cur_TimeCode[i+1], 0);//执行IBytesLeftShift(&G_Cur_TimeCode[i+1], 0)这个子程序,返回1个位变量,并将该值赋给cFlg,&G_Cur_TimeCode[i+1]的意思是把数组G_Cur_TimeCode[]的第i+1位数取出来作为地址变量参数送到IBytesLeftShift子程序中。
else
{
if (i == 0 || i == 16)//如果i等于0或者i=16,执行下面一句程序
CHCode = G_Cur_CHCode[i/16];将数组G_Cur_CHCode[]中的第i/16位数值取出送给变量CHCode
//取字节最高位,并左移
//cFlg = ReturnFlg(&CHCode);
cFlg = (CHCode & 0x80)>>7;//将CHCode除了最高位,其它位统统清0,然后把最高位移动到最低位的位置上,例如10110001->10000000->00000001,然后把结果赋值给变量cFlg,要注意的是cFlg是bit变量,在C语言里char变量赋值给bit变量,只要char变量的值不为0则赋给bit变量的值就是1,反之则是0。
CHCode<<=1;//CHCode整体左移1位,例如00000001->00000010
}

//显示缓冲区汉字点阵码左移位
for (k = _WIN_CH_NUM_; k > 0; k--)//将_WIN_CH_NUM_的值赋给k,作为k的初值,只要k的值大于0则执行下面的程序,执行完毕后k的值减1,然后判断k的值是否还大于0,大于0则继续循环,否则退出for语句
cFlg = TwoBytesLeftShift(&G_CHCode[k-1][i+1], cFlg);//执行TwoBytesLeftShift(&G_CHCode[k-1][i+1], cFlg)这个子程序,返回1个bit变量,并将该值赋给cFlg,TwoBytesLeftShift有两个输入参数,1个是&G_CHCode[k-1][i+1],1个是cFlg,上面有类似的语句说明。
}
温馨提示:答案为网友推荐,仅供参考
相似回答