首先要寫入單片機(jī)的頭函數(shù),定義單片機(jī)P1口的8個(gè)管腳,讓他們分別代表流水燈的8個(gè)led。寫一個(gè)大約一小時(shí)的延時(shí)函數(shù),為了清楚的看到流水燈的、效果。
成都創(chuàng)新互聯(lián)公司始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10多年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)整合營銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:白烏魚等企業(yè),備受客戶表揚(yáng)。
crol()是循環(huán)左移,在匯編相當(dāng)于多個(gè) RL A,的組合。
C51系列單片機(jī)中_crol_指令是循環(huán)左移函數(shù),_cror_是循環(huán)右移函數(shù),這是51中特有的指令,別的類型單片機(jī)就不能使用了。易于程序的移植和通用性考慮個(gè)人比較推薦用 左移, 右移這兩個(gè)C中的移位符號。
你的led燈是共陽的,從你給的條件可以判斷。p1=0xfe,即最低位為‘0’,故點(diǎn)亮的是p0引腳所對應(yīng)的led燈,也就是你所謂的c0。所以你的程序沒有問題啊。
1、循環(huán)左移n: (a(N-n))|(an)循環(huán)右移n: (a(N-n))|(an)C語言的位運(yùn)算功能是其區(qū)別于其他大多數(shù)高級程序設(shè)計(jì)語言的特色之一,用它可以方便實(shí)現(xiàn)一些特殊功能,靈活掌握是用C程序編寫系統(tǒng)程序的基礎(chǔ)。
2、加入一個(gè)頭文件INTRINS.H使用里面的循環(huán)左移、循環(huán)右移函數(shù)就可以了。這兩個(gè)函數(shù)分別是_crol_()和_cror_()如A=10100000即0xA0。
3、你的led燈是共陽的,從你給的條件可以判斷。p1=0xfe,即最低位為‘0’,故點(diǎn)亮的是p0引腳所對應(yīng)的led燈,也就是你所謂的c0。所以你的程序沒有問題啊。
intrins.h一般出現(xiàn)在C51單片機(jī)編程中,一般程序中需要使用到空指令_nop_();字符循環(huán)移位指令_crol_等時(shí)使用。
這個(gè)函數(shù)是延時(shí)一個(gè)機(jī)器周期的意思,它包含在頭文件intrins.h中,只要程序應(yīng)用到_nop_(),就需要有頭文件intrins.h的聲明。
在單片機(jī)c語言中直接調(diào)用庫函數(shù)即可,具體如下:includeintrins.h // 聲明了void _nop_(void);_nop_(); // 產(chǎn)生一條NOP指令。
includereg5h是52單片機(jī)的頭文件;#includeintrins.h也是頭文件,且這個(gè)頭文件主要是包含了有關(guān)51單片機(jī)的幾條匯編語句的C語言調(diào)用接口,是直接編譯成對應(yīng)的匯編語句的。
再發(fā)一個(gè)10個(gè)燈的,不過函數(shù)是IROL / _crol_不好實(shí)現(xiàn),我用_irol_實(shí)現(xiàn)的。
_crol_不好實(shí)現(xiàn),我用_irol_實(shí)現(xiàn)的。延時(shí)部分自己修改。
可以通過左移函數(shù)_crol_()和右移函數(shù)_cror_()來實(shí)現(xiàn)LED等的來回流動(dòng)。
用精確定時(shí)的方法,設(shè)置流水燈運(yùn)行時(shí)的時(shí)間間隔,延時(shí)時(shí)間為500MS。#include reg5h首先寫出單片機(jī)的頭函數(shù)。#include intrins.h輸入位移函數(shù)。unsigned int count=0,led;定義函數(shù)。
_crol_是字符循環(huán)左移,就是只左移低8位,高位舍掉,且左移出的第7位會(huì)移到第0位,是循環(huán)的。而只是純粹地左移。
crol是character to rotate left的縮寫,也就是字符循環(huán)左移的意思,教你怎么找KEIL自帶的庫函數(shù)吧,里面有所有庫函數(shù)的調(diào)用說明和例子。
第一個(gè)c是circle的第一個(gè)字母,循環(huán)的意思。第二個(gè)字母是roll的字母縮寫,滾動(dòng)、移動(dòng)的意思。第三個(gè)是of的縮寫。第四個(gè)l是left,向左的意思,第四個(gè)是r,就是right,向右的意思。
C51系列單片機(jī)中_crol_指令是循環(huán)左移函數(shù),_cror_是循環(huán)右移函數(shù),這是51中特有的指令,別的類型單片機(jī)就不能使用了。易于程序的移植和通用性考慮個(gè)人比較推薦用 左移, 右移這兩個(gè)C中的移位符號。
例如,如果有一個(gè)二進(jìn)制數(shù)字 outdata = 10100110,執(zhí)行 crol(outdata,1) 操作后,得到的結(jié)果是 01001101。具體算法如下:將數(shù)字轉(zhuǎn)換為二進(jìn)制表示。將二進(jìn)制位數(shù)限制在 8 位內(nèi)。將數(shù)字左移指定的位數(shù)。
1、故點(diǎn)亮的是p0引腳所對應(yīng)的led燈,也就是你所謂的c0。所以你的程序沒有問題啊。
2、在左邊還有個(gè)sec 寄存器,可以看到執(zhí)行到當(dāng)期指令時(shí)所花的時(shí)間。不過首先你要去project option里面把晶振頻率設(shè)置成和你單片機(jī)一樣的。選擇變量i,右鍵,點(diǎn)擊add to watch 1。這里是看變量i的變化的。
3、用個(gè)移位處理就行了 set(void) { 流水燈.c * 描述 : 該程序?qū)崿F(xiàn)LED的流水燈顯示。
4、所以移動(dòng)到最后,aa就等于0了。而_crol_是循環(huán)左移,aa的最高位左移后會(huì)寫入aa的最低位,所以燈看起來是流動(dòng)的。
5、_crol_不好實(shí)現(xiàn),我用_irol_實(shí)現(xiàn)的。延時(shí)部分自己修改。
6、想用這個(gè)函數(shù),只要先在程序的開頭加入一條引用聲明就可以了。includeINTRINS.H 因?yàn)開crol_這個(gè)函數(shù)是包含在INTRINS.H文件之中的函數(shù)。