大神們,本人C語音小白。學(xué)習(xí)金沙工作時宋雪松老師《手把教你學(xué) 51 單片機 -C語音版》遇到不同變量直接的運算問題。
小人看C語言描述 :運算時 都是短字節(jié)向長字節(jié)轉(zhuǎn)換。如char型變量 & int型變量,進行運算時,是編譯器強制將char 轉(zhuǎn)換成int型。
但宋雪松老師講的如下:連續(xù)將key4值通過T0中斷,一位一位用“或運算“寫入char 型變量keybuf中。這與其他地方對不同變量的運算描述不符,請大神們賜教。小弟拜謝。
void InterruptTimer0() interrupt 1 { static unsigned char keybuf = 0xFF; //按鍵掃描緩沖區(qū),保存一段時間內(nèi)的掃描值 TH0 = 0xF8; TL0 = 0xCD; keybuf = (keybuf << 1) | KEY4; //只取KEY4為例,緩沖區(qū)左移一位,并將當(dāng)前掃描值移入最低位 if (keybuf == 0x00) { //當(dāng)連續(xù)8次掃描值都為0,即16ms內(nèi)都只檢測到按下狀態(tài)時,可認(rèn)為按鍵已按下 KeySta = 0; //按鍵狀態(tài)值為按下 } else if (keybuf == 0xFF) { //當(dāng)連續(xù)8次掃描值都為1,即16ms內(nèi)都只檢測到彈起狀態(tài)時,可認(rèn)為按鍵已彈起 KeySta = 1; //按鍵狀態(tài)值為彈起 }
|