国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機(jī)(二)成功點(diǎn)亮LED

這篇具有很好參考價(jià)值的文章主要介紹了51單片機(jī)(二)成功點(diǎn)亮LED。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過(guò)程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。
?? 專欄適用人群 :適用于想要從零基礎(chǔ)開(kāi)始學(xué)習(xí)入門單片機(jī),且有一定C語(yǔ)言基礎(chǔ)的的童鞋。
??專欄目標(biāo):實(shí)現(xiàn)從零基礎(chǔ)入門51單片機(jī)和STM32單片機(jī),力求在玩好單片機(jī)的同時(shí),能夠了解一些計(jì)算機(jī)的基本概念,了解電路及其元器件的基本理論等。

?? 專欄主要內(nèi)容: 主要學(xué)習(xí)51單片機(jī)的功能、各個(gè)模塊、單片機(jī)的外設(shè)、驅(qū)動(dòng)等,最終玩好單片機(jī)和單片機(jī)的外設(shè),全程手敲代碼,實(shí)現(xiàn)我們所要實(shí)現(xiàn)的功能。
?? 專欄說(shuō)明 :如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方,歡迎大家隨時(shí)在文章下面評(píng)論,我會(huì)第一時(shí)間改正。讓我們一起學(xué)習(xí),一起進(jìn)步。
??專欄主頁(yè):http://t.csdn.cn/HCD8v

本學(xué)習(xí)過(guò)程參考:https://space.bilibili.com/383400717

單片機(jī)安裝軟件、各種資料以及源碼的路徑:
https://pan.baidu.com/s/1vDTN2o8ffvczzNQGfyjHng
提取碼:gdzf

本節(jié)目標(biāo)

本節(jié)會(huì)學(xué)習(xí)如何利用51單片機(jī)去控制開(kāi)發(fā)板上的LED。LED模塊在開(kāi)發(fā)板上的位置如下圖所示:圖中紅框框出來(lái)的就是LED模塊;

51單片機(jī)(二)成功點(diǎn)亮LED
本節(jié)將寫三個(gè)程序代碼,分別實(shí)現(xiàn)的功能是:

第一個(gè)代碼點(diǎn)亮一個(gè)LED:

51單片機(jī)(二)成功點(diǎn)亮LED

第二個(gè)代碼實(shí)現(xiàn)的功能是讓第一個(gè)燈以1s為周期閃爍:

51單片機(jī)(二)成功點(diǎn)亮LED

第三個(gè)代碼實(shí)現(xiàn)的功能是D1-D88個(gè)燈循環(huán)閃爍的流水燈:

51單片機(jī)(二)成功點(diǎn)亮LED文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424274.html

一、準(zhǔn)備工作

1.1 LED原理介紹(很重要?。。。。?/h3>

51單片機(jī)(二)成功點(diǎn)亮LED

LED燈在開(kāi)發(fā)板上的連接方式:

請(qǐng)見(jiàn)51單片機(jī)入門教程資料\開(kāi)發(fā)板資料包\HC6800-ES V2.0\開(kāi)發(fā)板原理圖\HC6800-ES+V2.0+新版.pdf

51單片機(jī)(二)成功點(diǎn)亮LED
按照左邊紅色的引腳圖,結(jié)合pdf文件中的MCU引腳圖總覽可以看到,LED是大致接在MCU的右下角位置的,如下圖所示:
51單片機(jī)(二)成功點(diǎn)亮LED

LED具體結(jié)構(gòu)如下:
51單片機(jī)(二)成功點(diǎn)亮LED
單片機(jī)的P2口(P20-P27)都對(duì)應(yīng)著TTL電平,即高電平5v低電平0v,例如當(dāng)P20口輸出低電平時(shí),則D1燈點(diǎn)亮,P20口輸出高電平時(shí),D1燈不亮;所以控制單片機(jī)接口的高低電平輸出,即可實(shí)現(xiàn)對(duì)D1等LED燈的控制;那么如何實(shí)現(xiàn)對(duì)P20口高低電平的控制呢?
51單片機(jī)(二)成功點(diǎn)亮LED

以P2口為例,MCU中的結(jié)構(gòu)如上圖所示,CPU和寄存器相連,寄存器和硬件i/o口相連;寄存器寄存器8個(gè)為一組,分別對(duì)應(yīng)著硬件i/o口的P20-P27,最下面的低地址寄存器對(duì)應(yīng)著P20口,依次類推,最上面的高地址寄存器對(duì)應(yīng)著P27口;每個(gè)寄存器中存放1和0兩個(gè)數(shù)字,如果寄存器中放的是數(shù)字1,那么對(duì)應(yīng)的i/o口就會(huì)輸出高電平,反之,如果寄存器中放的是數(shù)字0,那么對(duì)應(yīng)的i/o口就會(huì)輸出低電平;所以i/o口輸出高電平還是低電平,就由CPU向寄存器中寫入的數(shù)字決定;例如,如果寄存器中存放的數(shù)字是1111 1110(從左往右是高地址->低地址,即對(duì)應(yīng)著上圖中的寄存器從上到下) ,即說(shuō)明P27口到P21口都是1即高電平,P20口對(duì)應(yīng)的是低電平,則只有P20口對(duì)應(yīng)的LED燈會(huì)亮。

CPU通過(guò)配置寄存器中的1和0,實(shí)現(xiàn)對(duì)硬件電路i/o口的高低電平配置

1.2 建立keil工程并添加源文件

打開(kāi)keil5軟件,新建一個(gè)工程:
51單片機(jī)(二)成功點(diǎn)亮LED
選擇路徑
51單片機(jī)(二)成功點(diǎn)亮LED
然后彈出窗口讓我們選擇單片機(jī)的型號(hào),找到我們單片機(jī)的型號(hào),比如本文用的是STC89C52,但是keil軟件里對(duì)中國(guó)生產(chǎn)的單片機(jī)不太友好,找不到該型號(hào),因此可以選擇Atmel里的AT89C5代替:
51單片機(jī)(二)成功點(diǎn)亮LED
51單片機(jī)(二)成功點(diǎn)亮LED
是否自動(dòng)添加啟動(dòng)文件,選擇否即可:
51單片機(jī)(二)成功點(diǎn)亮LED
此時(shí)我們的工程就建好了,其中Source Group 1就是我們編寫代碼的文件夾:
51單片機(jī)(二)成功點(diǎn)亮LED

在Source Group 1上面右鍵,添加代碼文件(我們選擇C語(yǔ)言文件),并起名為main:

51單片機(jī)(二)成功點(diǎn)亮LED
51單片機(jī)(二)成功點(diǎn)亮LED
然后就可以對(duì)main.c進(jìn)行編寫,編譯,構(gòu)建等操作了:

51單片機(jī)(二)成功點(diǎn)亮LED
51單片機(jī)(二)成功點(diǎn)亮LED
51單片機(jī)(二)成功點(diǎn)亮LED

一般我們寫好代碼之后都會(huì)點(diǎn)擊build進(jìn)行構(gòu)建,如下例子,我們寫個(gè)main函數(shù),進(jìn)行構(gòu)建:
51單片機(jī)(二)成功點(diǎn)亮LED
會(huì)發(fā)現(xiàn)構(gòu)建結(jié)果為0錯(cuò)誤0警告。

1.3 選擇生成hex文件

要想將程序下載到單片機(jī)中,必須生成HEX文件,配置過(guò)程如下步驟1 2 3 4所示:
51單片機(jī)(二)成功點(diǎn)亮LED

二、點(diǎn)亮一個(gè)LED

有了1.1 LED介紹節(jié)的基礎(chǔ),我們可以知道操作P2口對(duì)應(yīng)的寄存器即可實(shí)現(xiàn)對(duì)P2口高低電平的控制,進(jìn)而控制P2口對(duì)應(yīng)的LED燈的亮和滅,在main.c中輸入以下代碼:
51單片機(jī)(二)成功點(diǎn)亮LED
其中P2定義在REGX52.H頭文件中,代表P2口,0xFE代表16進(jìn)制,換算成2進(jìn)制就是1111 1110;然后將這段代碼build,會(huì)發(fā)現(xiàn)0錯(cuò)誤0警告:

#include <REGX52.H>

void main()
{
	P2=0xFE;	//1111 1110
	while(1)
	{
		
	}
}

51單片機(jī)(二)成功點(diǎn)亮LED

然后將此段代碼下載到單片機(jī)中,打開(kāi)STC-ISP軟件,單片機(jī)型號(hào)選擇STC89C52系列下面的STC89C52,如下圖
51單片機(jī)(二)成功點(diǎn)亮LED
串口號(hào)選擇如下:
51單片機(jī)(二)成功點(diǎn)亮LED
然后“打開(kāi)程序文件”,選擇剛剛我們建好的工程下面build生成的的Project.hex文件,打開(kāi)->下載/編程:
51單片機(jī)(二)成功點(diǎn)亮LED
51單片機(jī)(二)成功點(diǎn)亮LED

然后將開(kāi)發(fā)板上的開(kāi)關(guān)按兩次,即可發(fā)現(xiàn)第一個(gè)LED燈亮了。

51單片機(jī)(二)成功點(diǎn)亮LED

三、LED閃爍

源碼路徑:
51單片機(jī)入門教程資料\課件及程序源碼\程序源碼\KeilProject\2-2 LED閃爍

按照上面1.2和1.3新建另一個(gè)工程,可以起名為2-2LED燈閃爍,并新增源文件。源文件中輸入以下代碼:

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void main()
{
	while(1)
	{
		P2=0xFE;	//1111 1110
		Delay500ms();
		P2=0xFF;	//1111 1111
		Delay500ms();
	}
}

下面解釋一下代碼的含義:
首先P2=0xFE; //1111 1110,通過(guò)上面的學(xué)習(xí),可以得知該代碼可以控制第一個(gè)LED亮。
Delay500ms()函數(shù)的功能是延時(shí)500ms,至于這個(gè)函數(shù)是如何生成的,下面會(huì)講解。
P2=0xFF可以控制第一個(gè)LED亮;
所以代碼最終的效果是,第一個(gè)LED燈先亮,500ms后滅,500ms后再亮,一直循環(huán)。

Delay500ms()函數(shù)是如何實(shí)現(xiàn)的呢?過(guò)程如下:
在STC-ISP工具中,找到“軟件延時(shí)計(jì)算器”,按照下圖分別設(shè)置系統(tǒng)頻率、定時(shí)長(zhǎng)度和8051指令集,然后點(diǎn)復(fù)制代碼,在Keil5中粘貼即可。
51單片機(jī)(二)成功點(diǎn)亮LED
需要注意的是,Delay500ms()中包含_nop_()函數(shù),該函數(shù)是包含在INTRINS.H頭文件中的,所以在main.c文件中要包含該頭文件。

代碼寫好后,點(diǎn)擊rebuild,然后參考第一節(jié)的過(guò)程,將寫好的程序下載到單片機(jī)上,重新開(kāi)關(guān)兩次開(kāi)發(fā)板的開(kāi)關(guān),即可看到LED燈閃爍的效果。

51單片機(jī)(二)成功點(diǎn)亮LED

四、LED流水燈

源碼路徑:51單片機(jī)入門教程資料\課件及程序源碼\程序源碼\KeilProject\2-3 LED流水燈
51單片機(jī)入門教程資料\課件及程序源碼\程序源碼\KeilProject\2-4 LED流水燈Plus

和第二節(jié)類似,重新建立工程,將main.c文件換成以下代碼,提供兩種方法:
方法1:

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P2=0xFE;//1111 1110
		Delay500ms();
		P2=0xFD;//1111 1101
		Delay500ms();
		P2=0xFB;//1111 1011
		Delay500ms();
		P2=0xF7;//1111 0111
		Delay500ms();
		P2=0xEF;//1110 1111
		Delay500ms();
		P2=0xDF;//1101 1111
		Delay500ms();
		P2=0xBF;//1011 1111
		Delay500ms();
		P2=0x7F;//0111 1111
		Delay500ms();
	}
}

方法2:

#include <REGX52.H>

void Delay1ms(unsigned int xms);		//@12.000MHz

void main()
{
	while(1)
	{
		P2=0xFE;//1111 1110
		Delay1ms(1000);
		P2=0xFD;//1111 1101
		Delay1ms(1000);
		P2=0xFB;//1111 1011
		Delay1ms(100);
		P2=0xF7;//1111 0111
		Delay1ms(100);
		P2=0xEF;//1110 1111
		Delay1ms(100);
		P2=0xDF;//1101 1111
		Delay1ms(100);
		P2=0xBF;//1011 1111
		Delay1ms(100);
		P2=0x7F;//0111 1111
		Delay1ms(100);
	}
}

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

兩種代碼都和第二節(jié)種的代碼類似,就不一行一行的講解了。如果有不理解的地方歡迎留言討論。同樣的過(guò)程,下載到單片機(jī)中即可看到流水燈的效果:

51單片機(jī)(二)成功點(diǎn)亮LED

到了這里,關(guān)于51單片機(jī)(二)成功點(diǎn)亮LED的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包