学习金沙工作时宋雪松老师《手把教你学 51 单片机 -C语音版》遇到不同变量直接的运算问题。 小人看C语言描述 :运算时 都是短字节向长字节转换。如char型变量 & int型变量,进行运算时,是编译器强制将char 转换成int型。 但宋雪松老师讲的如下:连续将key4值通过T0中断,一位一位用“或运算“写入char 型变量keybuf中。这与其他地方对不同变量的运算描述不符,请大神们赐教。小弟拜谢。 void InterruptTimer0() interrupt 1 { static unsigned char keybuf = 0xFF; //按键扫描缓冲区,保存一段时间内的扫描值 TH0 = 0xF8; TL0 = 0xCD; keybuf = (keybuf << 1) | KEY4; //只取KEY4为例,缓冲区左移一位,并将当前扫描值移入最低位 if (keybuf == 0x00) { //当连续8次扫描值都为0,即16ms内都只检测到按下状态时,可认为按键已按下 KeySta = 0; //按键状态值为按下 } else if (keybuf == 0xFF) { //当连续8次扫描值都为1,即16ms内都只检测到弹起状态时,可认为按键已弹起 KeySta = 1; //按键状态值为弹起 } |
A = B + C;
当A为8位时,B+C之和的低8位赋给A;
当A为16位时,B+C之和的低16位赋给A;
评分
查看全部评分