日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言跑马灯实验报告,单片机跑马灯实验

發(fā)布時間:2024/2/28 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言跑马灯实验报告,单片机跑马灯实验 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、實驗目的

1、 熟悉HNIST-2型單片機系統(tǒng)相關(guān)硬件電路,程序下載方法;

2、 掌握采用匯編語言與C語言開發(fā)單片機系統(tǒng)的程序結(jié)構(gòu);

3、 掌握51系列單片機通用I/O口的使用。

二、實驗前準備

1、 完成作業(yè)3;

2、 根據(jù)實驗內(nèi)容編寫好相關(guān)程序,并進行Proteus仿真。

三、實驗內(nèi)容

實驗內(nèi)容為3項,其中第1、2項必做。

1、基本的流水燈。

根據(jù)圖1電路,編寫一段程序,使8個發(fā)光二極管D1、D2、D3、D4、D5、D6、D7、D8順序(正序)點亮:先點亮D1,再點亮D2、D3……D8、D1……,循環(huán)點亮。每點亮一個LED,采用軟件延時一段時間。

2、簡單鍵控的流水燈。

不按鍵,按正序點亮流水燈;按下K1不松手,按倒序點亮流水燈,即先點亮D8,再順序點亮D7、D6……D1、D8……。松手后,又按正序點亮流水燈。

3、鍵控的流水燈。

上電,不點亮LED,按一下K1鍵,按正序點亮流水燈。按一下K2鍵,按倒序點亮流水燈,按一下K3鍵,全部關(guān)閉LED。

四、實驗原理圖

如圖3.1所示。

電路原理圖如圖3.1,AT89S52的P0.0~P0.7作為輸出連接8個發(fā)光二極管,輸出低電平0時對應發(fā)光二極管發(fā)光;由于發(fā)光二極管的導通電壓為1.7V,所以HNIST-2型實驗裝置在電源與二極管之間加一個阻值為1K限流電阻保護二極管。

AT89S52的P2.0、P2.1作為輸入連接2個按鍵K1、K2,若檢測到P2.0=0,則說明K1鍵按下。

圖3.1.png

五. 方案設(shè)計

概要設(shè)計:

A. 硬件設(shè)計

用stc89c52rc單片機在HNIST-2開發(fā)板上實驗,單片機P0.0到P0.7連接8個小燈泡,P2口P2.0到P2.3連接4個開關(guān)。

仿真電路圖.png

B. 軟件設(shè)計思想

1、基本的流水燈

軟件延時采用例題程序delay( j ),可調(diào)整延時時間。流水燈采用while(1)死循環(huán)保持,用循環(huán)左移函數(shù)crol(P0,1)控制流水燈流動。

2、簡單鍵控的流水燈。

根據(jù)P2.0口的狀態(tài)來判斷是否按下K1開關(guān),用if和while()來保持流水燈循環(huán)工作,if判斷是否開關(guān)按下,然后點亮 D0或D7一個小燈泡,用while和循環(huán)左(右)移保持流水燈持續(xù)工作。

3、鍵控的流水燈

按一下鍵后馬上松手,所以需要設(shè)置一個變量a保留按鍵鍵值,寫一個單獨檢測開關(guān)狀態(tài)的函數(shù),在每一次延時后檢測開關(guān)的狀態(tài)并將狀態(tài)保留在a中,然后根據(jù)a的值來實現(xiàn)不同的功能,功能實現(xiàn)和題2相似。

六、源代碼

1、基本的流水燈

#include "reg52.h"

#include

#define uchar unsigned char

#define uint unsigned int

void delay(uint i){ //延時函數(shù)

uchar t;

while(i--){

for(t=0;t<120;t++) ;

}

}

void main()

{

P0=0xfe; //亮一個小燈泡

while(1)

{

delay(500);

P0=_crol_(P0,1); //循環(huán)左移

}

}

2、簡單鍵控的流水燈。

#include "reg52.h"

#include

#define uchar unsigned char

#define uint unsigned int

sbit key=P2^0;

void delay(uint i){ //延時函數(shù)

uchar t;

while(i--){

for(t=0;t<120;t++) ;

}

}

void main()

{

while(1){

if(key==0){ //按住k1

P0=0xfe;

while(key==0){

delay(500);

P0=_crol_(P0,1);

}

}

if(key==1){ //k1沒有按下

P0=0x7f;

while(key==1){

delay(500);

P0=_cror_(P0,1);

}

}

}

}

3、鍵控的流水燈

#include "reg52.h"

#include

#define uchar unsigned char

#define uint unsigned int

sbit key1=P2^0; //k1按鍵

sbit key2=P2^1;//k2按鍵

sbit key3=P2^2;//k3按鍵

uint a=0;//記錄按鍵鍵值

void delay(uint i){ //延時

uchar t;

while(i--){

for(t=0;t<120;t++) ;

}

}

void key(){ //判斷哪一個按鍵被按并用a記錄

if(key1==0) a=1;

if(key2==0) a=2;

if(key3==0) a=3;

}

void main()

{

P0=0xff;

while(1){

key();

if(a==1){

P0=0xfe;

while(a==1){

key();

delay(500);

P0=_crol_(P0,1);

}

}

if(a==2){

P0=0x7f;

while(a==2){

key();

delay(500);

P0=_cror_(P0,1);

}

}

if(a==3){

P0=0xff;

}

}

}

七、實驗思考題

1、采用I/O口作為輸出口時要考慮哪些因素?為什么實驗裝置中LED要串聯(lián)一個電阻?

答:作為輸出口,要通過程序控制I/O口引腳的電平。LED是二極管,串聯(lián)電阻做限流,防止二極管被擊穿。

2、采用I/O口作為輸入口時要注意什么?鍵控的流水燈時為什么要在延時程序中檢測是否按鍵?

答:作為輸入口,要先將相應端口的電平置1才能準確讀取相應的狀態(tài)。鍵控的流水燈在延時程序中檢測是否按鍵是為了防止在延時過程中有鍵按下而導致未能檢測到,

3、為什么延時程序要做一個函數(shù)?

答:延時函數(shù)使用頻繁,做成一個函數(shù)方便調(diào)用。

八、實驗總結(jié)心得體會收獲

通過這一次的實驗,確實接觸到了許多新知識,首先就是單片機的工作原理和燒錄過程以及仿真軟件的使用,這是在這個實驗中能夠熟練掌握的,這個跑馬燈的實驗就是一個基礎(chǔ)的單片機實驗,實驗的過程中要解決流水燈的問題,以及按鍵和流水燈之間的配合,是將硬件和軟件結(jié)合的一次實驗,為了讓按鍵按下后流水燈依舊能持續(xù)循環(huán)的工作,我進行了多次調(diào)試,進一步理解了開關(guān)檢測和流水燈的循環(huán)移動,還有就是在項目三中,如何按一次鍵就實現(xiàn)一個功能的問題,讓我知道了將鍵值保存的方法,實驗很成功,收益匪淺。

總結(jié)

以上是生活随笔為你收集整理的c语言跑马灯实验报告,单片机跑马灯实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。