![]() |
發布時間: 2017-11-15 21:02
正文摘要:各位老師,這個22行的led=(led<<i)運行的效果只有p0.0、p0.1、p0.3、p0.6被陸續點亮。而把哪行改成led=(0x01<<i)則可以實現p0到p7左移。能不能幫忙指點一下 單片機源程序: #include<reg51.h> #def ... |
i = 及就移位幾位 你希望移位 1 而不是 2,3,4.。。。 |
HC6800-ES-V2.0 發表于 2017-11-16 10:20 謝謝^ω^ |
你的程序,就是這樣的嘛,沒有問題,只是它不是你想的那樣罷了。 我們來看看程序的運行就知道了: 先說這個與你想法一致的:led=(0x01<<i) 0x01=00000001 i=0時,led=00000001 i=1時,led=00000010 i=2時,led=00000100...... 不用再分析下去了,當然是一個一個向左移動的。 再來看看不能按你想法運行的那個:led=0x01;led=(led<<i); 開始時:led=00000001 i=0時,沒移位,led=00000001 i=1時,led=00000010 i=2時,以當前的led值移位2位,led=00001000 i=3時,再以當前led值移位3位,led=01000000...... 不用再分析了吧。 綜上所述,你想逐位移動,要嘛,用第一種語句;要嘛,第二種情況只能led=(led<<1),即每次只移動一位 |