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