找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4549|回復: 4
打印 上一主題 下一主題
收起左側(cè)

單片機補齊和左移一位讓多一個燈點亮是什么原理?

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:164707 發(fā)表于 2017-3-27 17:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個里面的補齊和左移一位讓多一個燈點亮是什么原理,求大神講解,謝謝了

  1. #include<reg52.h>  //52單片機頭文件
  2. #include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫
  3. #define uint unsigned int    //宏定義
  4. #define uchar unsigned char  //宏定義
  5. void delay(uint z)  //延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);大約延時200ms.
  6. {                                        //delay(500);大約延時500ms.
  7.         uint x,y;
  8.         for(x=z;x>0;x--)
  9.                 for(y=110;y>0;y--);        
  10. }
  11. void main()                    //主函數(shù)
  12. {
  13.         uchar a,i,j;
  14.         while(1)        //大循環(huán)
  15.         {
  16.                         a=0xfe;     //賦初值
  17.                         for(j=0;j<8;j++)
  18.                         {
  19.                                 for(i=0;i<8-j;i++)   //左移
  20.                                 {
  21.                                         P1=a;       //點亮小燈
  22.                                         delay(200); //延時200毫秒
  23.                                         a=_crol_(a,1); //將a變量循環(huán)左移一位
  24.                                 }
  25.                                 a=_crol_(a,j);   //補齊,方便下面的左移一位
  26.                                 P1=0xff;                 //全部關閉
  27.                                 a=a<<1;                        //左移一位讓多一個燈點亮
  28.                         }
  29.         }
  30. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:111634 發(fā)表于 2017-3-27 20:07 | 只看該作者
建議你keil編譯后,打開P1口,運行(過程單步)一下,觀測P1口空白跳轉(zhuǎn)情況,可得到解答。但上述程序?qū)懙貌⒉痪珶挕?/td>

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:183944 發(fā)表于 2017-3-27 20:29 | 只看該作者
a初值是0xfe ,二進制就是11111110,電路接線后應該是低電位點亮led,也就是最后一位0點亮led,然后每次都會左移一位,依次變?yōu)?1111101、11111011等等,所以被點亮的燈也是依次左移

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:164707 發(fā)表于 2017-3-28 08:40 | 只看該作者
zl2168 發(fā)表于 2017-3-27 20:07
建議你keil編譯后,打開P1口,運行(過程單步)一下,觀測P1口空白跳轉(zhuǎn)情況,可得到解答。但上述程序?qū)懙貌?...

a=_crol_(a,j);   //補齊,方便下面的左移一位
P1=0xff;              //全部關閉
a=a<<1;            //左移一位讓多一個燈點亮
大神,這三句我單步運行看P1口直接就變成了0xff了,然后接直接進到for語句了,能給我詳細講解下嗎,謝謝

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

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