新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > c51循環(huán)移位的淺談

c51循環(huán)移位的淺談

作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
如果學(xué)習(xí)單片機,最基本的考題就是流水燈了,呵呵,可是有時候一個很厲害的工程師,還真是不好弄出來,當(dāng)然,我不是工程師,可是學(xué)習(xí)51單片機也有很長時間了,回想起當(dāng)初學(xué)習(xí)51的時候,一直都是沒有自己的核心的東西,今天就談?wù)?strong>c51循環(huán)移位的見解

記得如果你打開intrins.h(51自帶的一個頭文件),你會發(fā)現(xiàn)其中有關(guān)于定義_crol_()(字符循環(huán)左移函數(shù))(一般我們用的多的是這個,呵呵),還有一個是_cror_()(字符循環(huán)右移函數(shù))

本文引用地址:http://2s4d.com/article/201611/315830.htm

可是,如果你去面試的時候,這個時候,你難道還用它自帶的循環(huán)函數(shù)么?當(dāng)然不能了。真是的(有時候我們自己小組出的筆試題就是流水燈,可是我卻緊鎖眉頭,感覺很是窩囊。咳,今天就把源程序?qū)懗鰜?。)這時候就要用到你的c語言知識了,呵呵。

假如說是共陰極數(shù)碼管的話:

程序可以這樣(只寫主要算法):

while(1)

{

temp=0x01;

P1=temp;

delay(100); //延時100ms

for(i=1;i<8;i++)

{

temp=temp<<1;

P1=temp;

delay(100);

}

}

可是假如是共陽極流水燈的話,就得寫成這樣,更好些:

while(1)

{

temp=0xfe;

P1=temp;

delay(100);

for(i=1;i<8;i++)

{

P1=(temp<>(8-i);

delay(100);

}

}

看到?jīng)]有,其中核心的一條語句就是 temp=temp<<1;P1=temp;和P1=(temp<>(8-i);,其實第一個可以用第二個代替,不過對于共陰極的太過簡單,直接寫出來就行了,可是對于共陽極的話,就得思考思考了,先左移,然后和右移的數(shù)進(jìn)行相或,這是相當(dāng)經(jīng)典的(8次)。呵呵,可能還有更經(jīng)典的,以后有時間補充上,呵呵。



關(guān)鍵詞: c51循環(huán)移

評論


技術(shù)專區(qū)

關(guān)閉