新聞中心

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

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

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

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

本文引用地址:http://butianyuan.cn/article/201611/315830.htm

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

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

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

while(1)

{

temp=0x01;

P1=temp;

delay(100); //延時(shí)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í)第一個(gè)可以用第二個(gè)代替,不過對(duì)于共陰極的太過簡單,直接寫出來就行了,可是對(duì)于共陽極的話,就得思考思考了,先左移,然后和右移的數(shù)進(jìn)行相或,這是相當(dāng)經(jīng)典的(8次)。呵呵,可能還有更經(jīng)典的,以后有時(shí)間補(bǔ)充上,呵呵。



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

評(píng)論


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

關(guān)閉