欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3219|回復: 3
收起左側

各位老師,這個單片機左右程序為什么沒有逐位左移,求指點!

[復制鏈接]
ID:248394 發表于 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
回復

使用道具 舉報

ID:164602 發表于 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),即每次只移動一位
回復

使用道具 舉報

ID:248394 發表于 2017-11-18 06:50 | 顯示全部樓層
HC6800-ES-V2.0 發表于 2017-11-16 10:20
你的程序,就是這樣的嘛,沒有問題,只是它不是你想的那樣罷了。
我們來看看程序的運行就知道了:
先說這 ...

謝謝^ω^
回復

使用道具 舉報

ID:250626 發表于 2017-11-18 08:36 | 顯示全部樓層
i = 及就移位幾位  你希望移位 1 而不是 2,3,4.。。。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表