熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2017-11-15 21:02
正文摘要:各位老師,這個(gè)22行的led=(led<<i)運(yùn)行的效果只有p0.0、p0.1、p0.3、p0.6被陸續(xù)點(diǎn)亮。而把哪行改成led=(0x01<<i)則可以實(shí)現(xiàn)p0到p7左移。能不能幫忙指點(diǎn)一下 單片機(jī)源程序: #include<reg51.h> #def ... |
i = 及就移位幾位 你希望移位 1 而不是 2,3,4.。。。 |
HC6800-ES-V2.0 發(fā)表于 2017-11-16 10:20 謝謝^ω^ |
你的程序,就是這樣的嘛,沒有問題,只是它不是你想的那樣罷了。 我們來看看程序的運(yùn)行就知道了: 先說這個(gè)與你想法一致的:led=(0x01<<i) 0x01=00000001 i=0時(shí),led=00000001 i=1時(shí),led=00000010 i=2時(shí),led=00000100...... 不用再分析下去了,當(dāng)然是一個(gè)一個(gè)向左移動(dòng)的。 再來看看不能按你想法運(yùn)行的那個(gè):led=0x01;led=(led<<i); 開始時(shí):led=00000001 i=0時(shí),沒移位,led=00000001 i=1時(shí),led=00000010 i=2時(shí),以當(dāng)前的led值移位2位,led=00001000 i=3時(shí),再以當(dāng)前l(fā)ed值移位3位,led=01000000...... 不用再分析了吧。 綜上所述,你想逐位移動(dòng),要嘛,用第一種語句;要嘛,第二種情況只能led=(led<<1),即每次只移動(dòng)一位 |
Powered by 單片機(jī)教程網(wǎng)