C51教程 第二個51程序: 跑馬燈 流水燈(含代碼)

keil+proteus

第二個51程序 : 跑馬燈 流水燈

這是一個AT89c51單片機教程,我們每次都會提供博文教程以及附帶資料下載。
單片機就是一個小型CPU,在電子領域應用廣泛,電視、冰箱、洗衣機、空調等產品中都能見到他們的身影。它是一個可編程的mcu,根據代碼的不同可實現非常多功能

今天要走入第二個程序,跑馬燈,按步驟,先硬件,后軟件的順序,先繪制原理圖

建立好之后開始編寫代碼

#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)//主函數 { int n; unsigned char a[8] =  { //取表數組 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; while(1)
	{ for(n=0; n<8; n++)//循環取表 流水燈 {
			P1 = a[n];
			delayms(500);
		}
	}
} 


寫入keil工程,編譯生成hex文件

keil工程代碼以及proteus仿真原理圖資料包:掃碼進群領資料


代碼解讀

1、

#include<regx51.h>
包含頭文件<regx51.h>,為什么要包含頭文件?因為要編寫的是51程序,最終代碼是要在51單片機里運行,所以要包含一個51頭文件,這個文件包含了51所有寄存器的一些定義,怎么查看它呢,編譯的時候會出現在你的工程文件中,在keil4的左邊工程文件就可以查看了

2、

void delayms(unsigned int t)//延時函數

{ int a,b; for(a=0; a<t; a++) for(b=0; b<120; b++);
  }


延時函數就是讓CPU反復執行一條空指令來消耗時間,這段時間CPU仍然在工作,各寄存器的值保持不變。

3、

void main(void)
這是主函數,程序從這里開始執行
另外,51單片機不用循環語句while,也會循環執行main函數中的內容

4、

int n; unsigned char a[8] =  { //取表數組 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

int n; //這里定義一個n用來for循環的計數
unsigned char a[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
這個數組是干嘛的?我把它轉為二進制你就差不多明白了,它們分別是
0000 0001
0000 0010
0000 0100
0000 1000
0001 0000
0010 0000
0100 0000
1000 0000
你會發現有一個1在向左移動,我們把這個1想做是亮著的燈,0是滅的燈,按照這個規律流動,就成了流水燈

5、

while(1)
{ for(n=0; n<8; n++)//循環取表 流水燈 {
		P1 = a[n];
		delayms(500);
	}
}

while(1)是一個死循環,會循環執行里面的內容

for(n=0; n<8; n++)//循環取表 流水燈
{
P1 = a[n];
delayms(500);
}
這個才是跑馬燈的真正代碼,利用for循環n自增,就可以一次輸出數組里面的內容。
P1:在頭文件里定義,為單片機IO口寄存器,8bit,每一位由低到高分別存儲P1_0-P1_7的高低電平0或1。
依次對P1口輸出a[0] a[1] 、a[2]、 a[3]、 a[4]…實現跑馬燈效果

(有問題歡迎留言,不到之處希望各位大神指點)
(也可以私信我問題,看到否可以為為大家耐心解答,很高興跟大家交流技術問題。范圍:電路設計 電路仿真 PCB設計 51單片機 msp430 arduino stm32 luinx)

嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊下方鏈接,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦!

點擊這里找小助理0元領取:掃碼進群領資料

the end

評論(0)