找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3494|回復(fù): 14
收起左側(cè)

求大神分析下代碼是如何實(shí)現(xiàn)左右流水燈的,小弟新手想不通。謝謝

  [復(fù)制鏈接]
ID:225054 發(fā)表于 2017-8-6 14:09 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar i;
uchar temp;
uchar a,b;
void delay(void)
{
       ucharm,n,s;
       for(m=20;m>0;m--)
              for(n=20;n>0;n--)
                     for(s=248;s>0;s--);
}
void main(void)
{
       while(1)
       {
              temp=0xfe;
              P1=temp;
              delay();
              for(i=1;i<8;i++)
              {
                     a=temp<<i;
                     b=temp>>(8-i);
                     P1=a|b;
                     delay();
              }
              for(i=1;i<8;i++)
              {
                     a=temp>>i;


b=temp<<(8-i);
                     P1=a|b;
                     delay();
              }
       }
}
回復(fù)

使用道具 舉報(bào)

ID:220770 發(fā)表于 2017-8-6 18:14 | 顯示全部樓層
P1口驅(qū)動(dòng)8個(gè)LED.
回復(fù)

使用道具 舉報(bào)

ID:220770 發(fā)表于 2017-8-6 18:26 | 顯示全部樓層
簡(jiǎn)單的移位處理, 用軟件仿真看一下P1口的輸出值就很清楚了
回復(fù)

使用道具 舉報(bào)

ID:225079 發(fā)表于 2017-8-6 21:11 | 顯示全部樓層
引用intrins,里面有移位的函數(shù)直接用,也可以在你的這種方法左右移動(dòng)每次移動(dòng)移位,之后在自加一,也可行
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-8-6 23:09 | 顯示全部樓層
左右流水燈即左右各4個(gè)流水燈活左右各n 個(gè)流水燈,依次亮燈或變化。
回復(fù)

使用道具 舉報(bào)

ID:225403 發(fā)表于 2017-8-7 10:48 | 顯示全部樓層
移位指令控制端口的高電平
回復(fù)

使用道具 舉報(bào)

ID:225422 發(fā)表于 2017-8-7 12:25 | 顯示全部樓層
原理啊,就是輪流點(diǎn)亮燈,就是這么簡(jiǎn)單而已,先第一個(gè)亮,然后第二個(gè)亮,一次輪流
回復(fù)

使用道具 舉報(bào)

ID:224682 發(fā)表于 2017-8-7 14:05 | 顯示全部樓層
用P1口驅(qū)動(dòng)8個(gè)LED,第一個(gè)for循環(huán)是將所有的燈點(diǎn)亮,第一個(gè)for循環(huán)是依次將其中一個(gè)燈滅掉。
回復(fù)

使用道具 舉報(bào)

ID:225460 發(fā)表于 2017-8-7 15:10 | 顯示全部樓層
從程序來(lái)看這應(yīng)該是一個(gè)共陽(yáng)極的流水燈,首先給P1口賦值0xFE,轉(zhuǎn)換成二進(jìn)制1111  1110,P1.0亮,然后給個(gè)延時(shí)再一個(gè)邏輯左移,將P1.1清零,在邏輯右移7位將P1.0置1,然后依次循環(huán)
回復(fù)

使用道具 舉報(bào)

ID:225626 發(fā)表于 2017-8-7 22:58 | 顯示全部樓層
首先0xfe,就是11111110,這個(gè)是P1.O口控制的燈亮,后邊的for語(yǔ)句就是將這個(gè)0依次向左邊移位,比如第一個(gè)循環(huán)就是11111101,這個(gè)你可以自己算算。第一個(gè)循環(huán)結(jié)束之后就是01111111,然后第二個(gè)循環(huán)就是移回去,這個(gè)方法比較基礎(chǔ),也不好理解,可以用intrins函數(shù)庫(kù)的位移函數(shù)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:225651 發(fā)表于 2017-8-8 08:36 | 顯示全部樓層
是通過(guò)移位來(lái)實(shí)現(xiàn)的
回復(fù)

使用道具 舉報(bào)

ID:225017 發(fā)表于 2017-8-8 20:52 | 顯示全部樓層
i=1時(shí);a 1111 1100  b  0000 0011
回復(fù)

使用道具 舉報(bào)

ID:225017 發(fā)表于 2017-8-8 20:53 | 顯示全部樓層
剩下的依次,就可以了
回復(fù)

使用道具 舉報(bào)

ID:225971 發(fā)表于 2017-8-9 09:56 | 顯示全部樓層
IO口給個(gè)數(shù)據(jù)然后位移,就是給高電平亮,然后一直往左或者右移
回復(fù)

使用道具 舉報(bào)

ID:226008 發(fā)表于 2017-8-9 10:55 | 顯示全部樓層
運(yùn)用左移右移控制,循環(huán)起來(lái)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表