標(biāo)題: 單片機(jī)補(bǔ)齊和左移一位讓多一個(gè)燈點(diǎn)亮是什么原理? [打印本頁]

作者: NI88888888888    時(shí)間: 2017-3-27 17:49
標(biāo)題: 單片機(jī)補(bǔ)齊和左移一位讓多一個(gè)燈點(diǎn)亮是什么原理?
這個(gè)里面的補(bǔ)齊和左移一位讓多一個(gè)燈點(diǎn)亮是什么原理,求大神講解,謝謝了

  1. #include<reg52.h>  //52單片機(jī)頭文件
  2. #include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫
  3. #define uint unsigned int    //宏定義
  4. #define uchar unsigned char  //宏定義
  5. void delay(uint z)  //延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約延時(shí)200ms.
  6. {                                        //delay(500);大約延時(shí)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;       //點(diǎn)亮小燈
  22.                                         delay(200); //延時(shí)200毫秒
  23.                                         a=_crol_(a,1); //將a變量循環(huán)左移一位
  24.                                 }
  25.                                 a=_crol_(a,j);   //補(bǔ)齊,方便下面的左移一位
  26.                                 P1=0xff;                 //全部關(guān)閉
  27.                                 a=a<<1;                        //左移一位讓多一個(gè)燈點(diǎn)亮
  28.                         }
  29.         }
  30. }
復(fù)制代碼


作者: zl2168    時(shí)間: 2017-3-27 20:07
建議你keil編譯后,打開P1口,運(yùn)行(過程單步)一下,觀測(cè)P1口空白跳轉(zhuǎn)情況,可得到解答。但上述程序?qū)懙貌⒉痪珶挕?hr noshade size="2" width="100%" color="#808080"> 作者: lukenanjing    時(shí)間: 2017-3-27 20:29
a初值是0xfe ,二進(jìn)制就是11111110,電路接線后應(yīng)該是低電位點(diǎn)亮led,也就是最后一位0點(diǎn)亮led,然后每次都會(huì)左移一位,依次變?yōu)?1111101、11111011等等,所以被點(diǎn)亮的燈也是依次左移
作者: NI88888888888    時(shí)間: 2017-3-28 08:40
zl2168 發(fā)表于 2017-3-27 20:07
建議你keil編譯后,打開P1口,運(yùn)行(過程單步)一下,觀測(cè)P1口空白跳轉(zhuǎn)情況,可得到解答。但上述程序?qū)懙貌?...

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




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