C51教程 第二個(gè)51程序: 跑馬燈 流水燈(含代碼)
keil+proteus
第二個(gè)51程序 : 跑馬燈 流水燈
這是一個(gè)AT89c51單片機(jī)教程,我們每次都會(huì)提供博文教程以及附帶資料下載。
單片機(jī)就是一個(gè)小型CPU,在電子領(lǐng)域應(yīng)用廣泛,電視、冰箱、洗衣機(jī)、空調(diào)等產(chǎn)品中都能見(jiàn)到他們的身影。它是一個(gè)可編程的mcu,根據(jù)代碼的不同可實(shí)現(xiàn)非常多功能
今天要走入第二個(gè)程序,跑馬燈,按步驟,先硬件,后軟件的順序,先繪制原理圖
建立好之后開(kāi)始編寫(xiě)代碼
#include <regx51.h> void delayms(unsigned int t) { unsigned int i,j; for(i=0; i<t; i++) for(j=0; j<120; j++);
} void main(void)//主函數(shù) { int n; unsigned char a[8] = { //取表數(shù)組 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; while(1)
{ for(n=0; n<8; n++)//循環(huán)取表 流水燈 {
P1 = a[n];
delayms(500);
}
}
}
寫(xiě)入keil工程,編譯生成hex文件
keil工程代碼以及proteus仿真原理圖資料包:掃碼進(jìn)群領(lǐng)資料
代碼解讀
1、
#include<regx51.h>
包含頭文件<regx51.h>,為什么要包含頭文件?因?yàn)橐帉?xiě)的是51程序,最終代碼是要在51單片機(jī)里運(yùn)行,所以要包含一個(gè)51頭文件,這個(gè)文件包含了51所有寄存器的一些定義,怎么查看它呢,編譯的時(shí)候會(huì)出現(xiàn)在你的工程文件中,在keil4的左邊工程文件就可以查看了
2、
void delayms(unsigned int t)//延時(shí)函數(shù)
{ int a,b; for(a=0; a<t; a++) for(b=0; b<120; b++);
}
延時(shí)函數(shù)就是讓CPU反復(fù)執(zhí)行一條空指令來(lái)消耗時(shí)間,這段時(shí)間CPU仍然在工作,各寄存器的值保持不變。
3、
void main(void)
這是主函數(shù),程序從這里開(kāi)始執(zhí)行
另外,51單片機(jī)不用循環(huán)語(yǔ)句while,也會(huì)循環(huán)執(zhí)行main函數(shù)中的內(nèi)容
4、
int n; unsigned char a[8] = { //取表數(shù)組 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int n; //這里定義一個(gè)n用來(lái)for循環(huán)的計(jì)數(shù)
unsigned char a[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
這個(gè)數(shù)組是干嘛的?我把它轉(zhuǎn)為二進(jìn)制你就差不多明白了,它們分別是
0000 0001
0000 0010
0000 0100
0000 1000
0001 0000
0010 0000
0100 0000
1000 0000
你會(huì)發(fā)現(xiàn)有一個(gè)1在向左移動(dòng),我們把這個(gè)1想做是亮著的燈,0是滅的燈,按照這個(gè)規(guī)律流動(dòng),就成了流水燈
5、
while(1)
{ for(n=0; n<8; n++)//循環(huán)取表 流水燈 {
P1 = a[n];
delayms(500);
}
}
while(1)是一個(gè)死循環(huán),會(huì)循環(huán)執(zhí)行里面的內(nèi)容
for(n=0; n<8; n++)//循環(huán)取表 流水燈
{
P1 = a[n];
delayms(500);
}
這個(gè)才是跑馬燈的真正代碼,利用for循環(huán)n自增,就可以一次輸出數(shù)組里面的內(nèi)容。
P1:在頭文件里定義,為單片機(jī)IO口寄存器,8bit,每一位由低到高分別存儲(chǔ)P1_0-P1_7的高低電平0或1。
依次對(duì)P1口輸出a[0] a[1] 、a[2]、 a[3]、 a[4]…實(shí)現(xiàn)跑馬燈效果
(有問(wèn)題歡迎留言,不到之處希望各位大神指點(diǎn))
(也可以私信我問(wèn)題,看到否可以為為大家耐心解答,很高興跟大家交流技術(shù)問(wèn)題。范圍:電路設(shè)計(jì) 電路仿真 PCB設(shè)計(jì) 51單片機(jī) msp430 arduino stm32 luinx)
嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長(zhǎng),不少人因?yàn)閷W(xué)習(xí)路線不對(duì)或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯(cuò)失高薪offer。不過(guò)別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點(diǎn)擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點(diǎn)贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!
點(diǎn)擊這里找小助理0元領(lǐng)?。?a class="pgc-link" data-content="mp" data-source="outerLink" rel="noopener noreferrer noopener noreferrer" target="_blank" style="box-sizing:border-box;background-color:transparent;cursor:pointer;text-decoration-line:none;color:#406599;margin:0px;padding:0px;border:0px;">掃碼進(jìn)群領(lǐng)資料
- 贊