大神們,本人C語音小白。學習金沙工作時宋雪松老師《手把教你學 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; //按鍵狀態值為彈起 }
|