導航:首頁 > 操作系統 > 單片機流水燈實驗報告

單片機流水燈實驗報告

發布時間:2022-01-19 17:55:44

『壹』 單片機原理及應用流水燈實驗報告

單片機的原理以及應用流水燈實驗報告,其實單片機就是普通的最簡單的那種照相機,所以說它的原理也就是小孔成像。

『貳』 單片機c語言流水燈的實驗報告

這個怎麼寫??X個發光二極體連續依次閃爍,往復不斷。能夠成功正確地完成編寫的程序。體現了單片機工作正常,語句使用得當,試驗完美成功。

『叄』 單片機流水燈實驗原理

上一節我們介紹了什麼是匯流排的方法,以及如何通過十六進制來控制IO口。並把我們的之前單點操作的流水燈進行了改進,成為了一個新的更加簡潔的程序。這回,就再用匯流排方法,來實現流水燈的更加多樣化的操作。

這次,我們要實現正向流水結束後再反過來流水,如此循環。然後再間隔閃爍。然後再累積流水,最後結束。

正向流水結束,再反過來。這個如何實現呢,我們需要使用到一些運算方法。

第一個是移位指令<<。

由於數字對比不強,看的不是很清晰,所以把數字給換成紅色了。

<<這個標志符的意思是,向左移動一位,就像下邊這樣:

1111 1111》1111 111_

移動完成後,會發現,最低位空出來了,此時程序會自動去填補一個0。於是就成了:

1111 1111》1111 111_》1111 1110

第一次移位1111 1110,第二次在第一次基礎上移位1111 1100,第三次在第二次基礎上移位1111 1000,如此循環,就可以一直把所有位都變成0。

我們在看下一句"|",這個符號是或的意思,我們知道,邏輯中的或,是說只要有其一為一,結果就是一。所以,我們把1100|0001,結果就是頭兩個一和最後一個一留下來,第三位因為都是0,所以就是0.結果就是1101了。當再次移位後,數據就變成1010了,我們再次跟0001取或,最後一位就再次置1,結果就是1011,從結果上看,1110》1101》1011……就是0在不斷的左移。

通過這個方法,可以讓每一位都會單獨置零。然後再給以一定時間的延時,就會看到流水燈了。

如果我們不賦初值0xfe會出現什麼情況?

就會出現,移位產生一個0,在或運算時就會被重新置1,如此循環,就進入不到第二個LED,也就不會出現流水燈了。可以自己嘗試下。

向右流水,效果是一樣的,需要注意的是初值更改為左側為0,就是0x7f,0111 1111,然後移位符號>>,還有取或的語句需要用0x80,1000 0000.

基本上是在左移位的基礎上稍作修改即可。

接下來是閃爍的。

閃爍,我們用的是間隔LED的方法,就是隔一個亮一個,埠輸出是1010 1010。翻譯成十六進制就是0xaa。這次用到的是一個取反的運算,就是把每一位的0變成1,1變成0,然後延時一段時間,再次取反,循環幾個周期,就看起來像是不斷閃爍。取反的操作相對好理解一些,就是這一位,現在是1,那麼取反後就是0,就是0和1的變換。

最後是一個累積點亮LED。

這個程序就是把第一個我們向左移位的函數,進行了更改,取消了賦初值,不用取或了,這樣就可以對比著理解,各個語句的作用,如果不使用,會產生什麼結果。如果我們的第一個函數不用取或這一步,那最終輸出結果就和這個現象一樣了。

所以,我們在寫程序時,需要認真,仔細分析自己需要的結果,然後對照程序進行簡單的演算。保證每一段都是可以輸出想要的結果,不然累積到最終,幾百行的代碼,看起來就會頭疼的,尤其是在沒有標注釋的情況下,有時就會忘記自己為什麼要寫這一句。

好的,這篇先說到這里,有問題或建議可以留言或私信給我。

想了解更多精彩內容,快來關注小亮談電氣

更多多內容,歡迎關注百家號:小亮談電氣。微信公眾號:電氣學苑。

『肆』 流水燈實訓報告

轉載於 http://www.scetop.com/jpkc/pld/ArticleShow.asp?ArticleID=565&BigClassName=%CA%B5%D1%B5%BD%CC%D1%A7
希望對你有幫助

實訓項目(一) 流水燈 1. 實驗目的通過此實驗讓用戶進一步了解、熟悉和掌握CPLD/FPGA開發軟體的使用方法及Ver-ilog HDL的編程方法;學習簡單時序電路的設計和硬體測試.2. 實驗內容本實驗的內容是建立可用與控制LED流水燈的簡單硬體電路,要求在SmartSOPC實驗箱上實現LED1-LED8發光二極體流水燈顯示.3. 實驗原理(1) 在引腳上周期性地輸出流水數據,如原來輸出的數據是11111100則表示點亮LED1、LED2.流水一次後,輸出數據應該為11111000,而此時則應點亮LED1~LED3三個LED發光二極體,這樣就可以實現LED流水燈.為了觀察方便,流水速率最好在2Hz左右.在QuickSOPC核心板上有一個48MHz的標准鍾源,該時鍾脈沖CLOCK與晶元的28腳相連.為了產生2Hz的時鍾脈沖,在此調用了一個分頻模塊,通過修改分頻系數來變改輸出頻率.當分頻系數為24×10時,輸出即為2Hz的頻率信號.(2) int_div分頻模塊說明: int_div模塊是一個占空比為50%的任意整數分頻器.輸入時鍾為clock,輸出時鍾為clk_out.其中F_DIV為分頻系數,分頻系數范圍為1~2N(n=F_DIV_WIDTH).若要改變分頻系數,則改變參數F_DIV和F_DIV_WIDTH到相應范圍即可.在本例中輸入時鍾頻率為48MHz,要得到2Hz的信號,分頻系數應為48×10/2=24×10.對於分頻系數為24×10的數需要一個25位寬的計數器.在以後的實驗中還會多次用到這個模塊,用戶可以分析它的基本原理.4. 實驗步驟(1) 啟動QUARTUSⅡ建立一個空白工程,然後命名為.(2) 新建VerilogHDL源程序文件ledwater.v,輸入程序代碼並保存,然後進行綜合編譯.若在編譯過程中發現錯誤,則找出並更正錯誤,直到編譯成功為止.(3) 從設計文件創建模塊,由ledwater.v生成名為ledwater.bsf的模塊符號文件.(4) 將光碟中EDA_component目錄下的int_div.bsf和int_div.v拷貝到工程目錄.(5) 新建圖形設計文件命名為led_wter.bdf在空白處雙擊滑鼠左鍵,在sym-bol對話框左上腳的的Iibraries中,分別將projet下的ledwater和int_div模塊放在圖形文件ed_wter.bdf中,加入輸入、輸出引腳,雙擊各引腳符號,進行引腳命名.將與ledwater模塊led[7..0]連接的引腳命名為led[7..0],與int_div模塊clock連接的引腳命名為clock. int_div模塊的clk_out與ledwater模塊的clk相連接.雙擊int_div的參數框,並修改參數,將F_DIV的值改為24000000, F_DIV_WIDTH的值改為25,單擊「確定」按扭保存修改的文件的參數如果led_water.bdf中部能看到參數設置框,可在空白處右擊滑鼠,選擇Show Parameter Assignments命令來顯示參數設置框。(6) 選擇目標器件並對相應的引腳進行鎖定,正在這里所選擇的器件為Altera公司Cyclone系列的EP 1C6Q240C8晶元,引腳鎖定方法如表3.1所列。將未使用的引腳設置為三態輸入(一定要設置,否則可能會損壞晶元)。 表3.1 引腳鎖定方法 信號引腳 信號引腳1C61C12EDA1C61C12EDALed[0]505050led[5]474747led[1]535353led[6]484848led[2]545454led[7]494949led[3]555555clock282828led[4]176176176 (7) 將led_water.bdf設置為頂層實體。對該工程文件進行全程編譯處理,若在編譯過程中發現錯誤,則找出並更正錯誤,直至編譯成功為止。(8) 最後將跳線短接帽跳接到smartSOPC實驗箱上JP6的LED0~LED7,使LED1~LED8 分別與FPGAD的引腳50、53~55、176和47~49相連。將AlteraByteBlasterⅡ下載電纜的兩端分別接到PC機的列印機並口和QuickSOPC核芯板上的JTAG下載口上,打開電源,執行下載命令,把程序下載到FPGA器件中,此時,即可在smartSOPC實驗箱上看到流水燈。(9 更改分頻模塊(int_div)的分頻系數,並重新編譯下載,觀察流水燈的變化。 5. 實驗參考程序 程序清單3.2ledwater.v Mole ledwater(led,clk); //模塊名ledwaterOutput[7:0]led; //定義LED輸出口Input clk; //定義時鍾輸入口Reg[8:0] led_r; //定義輸出寄存器Assign led=led_r[7:0]; //寄存器輸出always@(posedge clk) //在時鍾上升沿觸發進程beginled_r<=led_r<<1; //是,則輸出左移一位if(led_r==9`d0) //循環完畢嗎?led_r<=9`b11111111; //是,則重新賦初值endendmole 6. 日積月累(1) 思考:如何實現左流水燈或其他花樣流水呢?用戶自己動手試試。(2) REG數據類型:由兩大類數據類型,線網類型和寄存器類型。REG是最常見的寄存器類型,形式如下:REG[msb:lsb]reg1,reg2,…regN;其中,msb和lsb定義了范圍,並且均勻為常數值表達式。范圍定義是可以選的。如果沒有定義范圍,默認值為1位寄存器。 reg數據類型的默認初始值是不定值X,它可以賦正值,也可以賦負值。當一個reg類型數據是一個表達式中的操作數時,他的值被當作是無符號值,即正值(如意個4)為寄存器被賦值-1,則在表達式中進行運算時,其值被認為是+15)。 reg型只表示被定義的信號將用在always塊內,理解這一點很重要。並不是說reg 型信號一定是寄存器或觸發器的輸出。雖然reg型信號常常是寄存器或觸發器的輸出,但並不一定總是這樣,只有在時序邏輯中他對應的才是寄存器,而在組合邏輯中他則表達一個節點。(3)按照上述管工程進行編譯,會出現「warning: found pins functioning as undefined clocks and/or memory enables Info: Assuming node 」clock」 is an undefined clock」的警告,大概意思是指發現clock節點沒有定義成時鍾信號。消除這個警告的方法如下: ①選擇assignments→timing settings命令,在彈出的對話框中的clockseteings選項區中選中settingsfor indivial clock signals項。 ②對clocks進行設置,在彈出的對話框中單擊按鈕添加節點,按圖中所示進行設置。圖中requiredfmax 為系統需求的最大時鍾頻率,在這里填50HZ即可。 ③設置好之後連續單擊OK按鈕保存設置,最後再進行編譯,原先的warning就會消除。以上的操作是將「clock」加入時鍾域。如果「clock」不是一個時鍾信號,可將設置屬性改為「not a clock 」,也可以消除warning。

『伍』 單片機流水燈怎麼寫實驗報告

單片機流水燈的話,建議你先在Proteus這個單片機軟體上先進行實驗一下,然後根據你的實驗結果來寫這份報告。

『陸』 單片機流水燈試驗

#include<AT89X51.H>//預處理文件裡面定義了特殊寄存器的名稱如P1口定義為P1

voidmain(void)

{

//定義數據

constunsignedchardesign[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,

0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,

0xE7,0xDB,0xBD,0x7E,0xFF};

unsignedinta;//定義循環用的變數

unsignedcharb;//在C51編程中因內存有限盡可能注意變數類型的使用

//

do{

for(b=0;b<32;b++)

{

for(a=0;a<30000;a++);//延時一段時間

P1=design[b];//讀已定義的花樣數據並寫花樣數據到P1口

}

}while(1);

}

C語言寫的流水燈,而且用查表程序。

剛試了一下通過,

電路圖如附圖,

想要你的分還真不容易呀!呵呵

『柒』 51單片機流水燈實驗

for(i=1;i=10000;i++);這條語句我就很差異,根據C定義,第一個分號是初值,第二個是循環條件,最後分號為循環執行語句。顯然 for(i=1;<10000;i++);這樣才對。

再說 j=7; P0=~(1<<j++);j=7是2進制00000111,加1就是00001000,那麼右移一位則00010000,然後又取反,則11101111,但是你 for(i=1;i=10000;i++);之後又寫了j=0;加1則00000001取右移一位00000000,此時因為1被移出,取反後11111111,這時P0=11111111;

之後你寫了 for(i=1;i=10000;i++)
{
if(j==8)
j=0;
}
由於你寫了i=10000;所以語句不會執行循環,即使執行,由於之前j++只加了1,不會到8,而在整個while中又寫了j=0;所以壓根不會執行。

更改此程序中for(i=1;<10000;i++);之後模擬現象為P0.7閃爍,恰好印證了上述分析,由於整個程序不長,而且混亂,只好扔了從寫。

於是乎在你這個病體的程序上做下處理之後程序變成了如下:
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit LED=P0^0;
sbit ENLED=P1^4;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
main()
{
uint8 j;
uint16 i;
ENLED=0;
ADDR0=0;ADDR1=1;ADDR2=1;ADDR3=1;
while(1)
{

if(j==0)j=1;
else j=j<<1;

P0=j;
for(i=1;i<10000;i++);

}

}
這是單向閃爍的,如果想左右依次來回閃的話,可以參照我這個做下調整。問題說的很透,望加分。

『捌』 51單片機流水燈實驗(我用的是手把手教你學單片機的教程)

呵呵,這個延時有點長哦,有10S,你耐心再看看,有沒有變化,如果再沒變化,你可以軟體模擬一下那個i變數。看他是不是能加到10000,。還有,學51單片機的話建議你去學 郭天祥十天學會51單片機 那個很不錯。希望採納

『玖』 單片機原理流水燈實驗

單片機流水的實質是單片機各引腳在規定的時間逐個上電,使LED燈能逐個亮起來但過了該引腳通電的時間後便滅燈的過程,實驗中使用了單片機的P2埠, 對8個LED燈進行控制,要實現逐個亮燈即將P2的各埠逐一置零,中間使用時間間隔隔開各燈的亮滅。使用r1或rra實現位的轉換。

閱讀全文

與單片機流水燈實驗報告相關的資料

熱點內容
工作三年的大專程序員 瀏覽:726
java畢業設計文獻 瀏覽:138
籌碼集中度指標源碼 瀏覽:477
listsortjava 瀏覽:180
plc閃光電路編程實例 瀏覽:297
socket編程試題 瀏覽:201
華為的伺服器怎麼設置從光碟機啟動 瀏覽:867
程序員真的累嗎 瀏覽:323
學信網app為什麼刷臉不了 瀏覽:871
天蠍vs程序員 瀏覽:991
單片機下載口叫什麼 瀏覽:186
程序員的道 瀏覽:924
雲伺服器不實名違法嗎 瀏覽:556
怎樣查看文件夾圖片是否重復 瀏覽:993
文件怎麼導成pdf文件 瀏覽:806
打開sql表的命令 瀏覽:101
安卓手機如何面部支付 瀏覽:37
天元數學app為什麼登錄不上去 瀏覽:823
明日之後為什麼有些伺服器是四個字 瀏覽:104
安卓系統l1是什麼意思 瀏覽:26