久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 各位老師,這個單片機左右程序為什么沒有逐位左移,求指點! [打印本頁]

作者: Xanthus    時間: 2017-11-15 21:02
標題: 各位老師,這個單片機左右程序為什么沒有逐位左移,求指點!
各位老師,這個22行的led=(led<<i)運行的效果只有p0.0、p0.1、p0.3、p0.6被陸續點亮。而把哪行改成led=(0x01<<i)則可以實現p0到p7左移。能不能幫忙指點一下

單片機源程序:
  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. }
復制代碼


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

左移.png

作者: 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),即每次只移動一位

作者: Xanthus    時間: 2017-11-18 06:50
HC6800-ES-V2.0 發表于 2017-11-16 10:20
你的程序,就是這樣的嘛,沒有問題,只是它不是你想的那樣罷了。
我們來看看程序的運行就知道了:
先說這 ...

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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产视频h | eeuss国产一区二区三区四区 | 欧美 日韩 国产 成人 在线 | 91人人在线 | 日韩在线免费播放 | 国产精品夜夜夜一区二区三区尤 | 欧美一区不卡 | 国产精品久久久久久久久久 | 欧美日韩一 | 国产在线视频一区 | 亚州影院 | 日本一区二区在线视频 | 五月婷婷激情 | 91精品国产91久久久久久三级 | 国产精品一区在线观看 | 欧美一区二区三区在线 | 国产女人与拘做视频免费 | 成人av一区 | 男女视频免费 | 在线观看深夜视频 | 国产午夜视频 | 国产国语精品 | 日本一区二区不卡 | 精品一区二区三区在线观看国产 | 国产乱码精品一品二品 | www.天堂av.com | 天堂一区二区三区 | 日韩精品免费视频 | 亚洲国产精品第一区二区 | 男女视频在线观看 | 国产精品亚洲成在人线 | 中文字幕一区二区三区四区五区 | 日日天天 | 日韩成人精品一区二区三区 | 亚洲视频欧美视频 | 久久久久久久久精 | 午夜视频一区二区三区 | 亚洲精品成人av | 亚洲第一av| 国产男女猛烈无遮掩视频免费网站 | 日韩国产欧美一区 |