標(biāo)題: 各位老師,這個(gè)單片機(jī)左右程序?yàn)槭裁礇](méi)有逐位左移,求指點(diǎn)! [打印本頁(yè)]

作者: Xanthus    時(shí)間: 2017-11-15 21:02
標(biāo)題: 各位老師,這個(gè)單片機(jī)左右程序?yàn)槭裁礇](méi)有逐位左移,求指點(diǎn)!
各位老師,這個(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ī)源程序:
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define led P0
  5. sbit bee=P1^5;
  6. void delay(uint n)
  7. {
  8.     while(n--)
  9.     {
  10.         
  11.     }
  12. }

  13. void main()
  14. {
  15.     while(1)
  16.     {
  17.         uint i;
  18.         led=0x01;
  19.         for(i=0;i<8;i++)
  20.         {
  21.             led=(led<<i);
  22.             delay(2);
  23.         }
  24.     }
  25.    
  26. }
復(fù)制代碼


左移.png (17.23 KB, 下載次數(shù): 78)

左移.png

作者: HC6800-ES-V2.0    時(shí)間: 2017-11-16 10:20
你的程序,就是這樣的嘛,沒(méi)有問(wèn)題,只是它不是你想的那樣罷了。
我們來(lái)看看程序的運(yùn)行就知道了:
先說(shuō)這個(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)的。


再來(lái)看看不能按你想法運(yùn)行的那個(gè):led=0x01;led=(led<<i);
開(kāi)始時(shí):led=00000001
i=0時(shí),沒(méi)移位,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),要嘛,用第一種語(yǔ)句;要嘛,第二種情況只能led=(led<<1),即每次只移動(dòng)一位

作者: Xanthus    時(shí)間: 2017-11-18 06:50
HC6800-ES-V2.0 發(fā)表于 2017-11-16 10:20
你的程序,就是這樣的嘛,沒(méi)有問(wèn)題,只是它不是你想的那樣罷了。
我們來(lái)看看程序的運(yùn)行就知道了:
先說(shuō)這 ...

謝謝^ω^
作者: conquerlee    時(shí)間: 2017-11-18 08:36
i = 及就移位幾位  你希望移位 1 而不是 2,3,4.。。。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1