free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問(wèn)答首頁(yè) 最新問(wèn)題 熱門問(wèn)題 等待回答標(biāo)簽廣場(chǎng)
我要提問(wèn)

單片機(jī)

單片機(jī) 點(diǎn)亮一盞LED燈 while(1)的運(yùn)用

更多學(xué)習(xí)資料視頻 請(qǐng)百度谷歌 "猴子教你學(xué)單片機(jī)"

項(xiàng)目需求(點(diǎn)亮一盞LED)

項(xiàng)目需求(對(duì)應(yīng)學(xué)校課程實(shí)驗(yàn)中的實(shí)驗(yàn)?zāi)康?,描述?xiàng)目所需要完成的功能,這些功能所需要達(dá)到的指標(biāo)):點(diǎn)亮一盞LED燈,LED燈的亮度適中。

這里點(diǎn)亮LED燈是所需要完成的功能,LED燈亮度適中是這一功能所需要達(dá)到的具體指標(biāo)。   1.1.2 背景知識(shí)(LED)

發(fā)光二極管(LED,Light Emitting Diode), 是一種能夠?qū)㈦娔苻D(zhuǎn)化為可見光的固態(tài)的半導(dǎo)體器件,它可以直接把電轉(zhuǎn)化為光。在日常生活中應(yīng)用廣泛,如LED照明、數(shù)碼顯示管、建筑景觀、廣告燈、大型顯示屏等。

下圖為常見的發(fā)光二極管實(shí)物圖。左圖為直插形式封裝,右圖為貼片形式。

圖1-1:發(fā)光二極管實(shí)物圖

如何點(diǎn)亮發(fā)光二極管呢?很簡(jiǎn)單!我們知道,二極管是單向?qū)ǖ?,即在發(fā)光二極管的兩端加上正向電壓,就會(huì)亮起來(lái)。

常用的普通發(fā)光二極管通過(guò)0~20mA的電流即可正常工作,一般取10mA。在單片機(jī)系統(tǒng)中,一般應(yīng)該串接限流電阻。對(duì)于初學(xué)者來(lái)講,對(duì)于元件參數(shù)的選擇可能比較頭疼。電阻的阻值可按下式估算:R=(VCC-VLED)/ILED, 51系列單片機(jī)一般用+5V電源供電,LED壓降取0.7V,電流可取10mA,電阻就應(yīng)該選擇430Ω左右。當(dāng)然,電子市場(chǎng)上不一定能買到這么準(zhǔn)確的阻值,可以參考電阻的標(biāo)稱值來(lái)近似選擇,一般可取470Ω。當(dāng)然,阻值選大一點(diǎn)或小點(diǎn)也可,不過(guò)是發(fā)光二極管亮一點(diǎn)或暗一點(diǎn)罷了。

1.1.1 方案設(shè)計(jì)

有了客戶需求之后,我們開始方案設(shè)計(jì)給出兩個(gè)方案 :方案一是撥碼開關(guān)控制,然后接LED 。

方案二利用單片機(jī)IO口控制LED。

這時(shí)候要選擇一個(gè)適合項(xiàng)目的方案。首先,方案必須滿足客戶的需求,考慮成本,采購(gòu) ,器件的供貨周期,是否適合目前的焊接工藝(直插或表貼封裝的選取)。

如選方案一,如果客戶需求更改,要求LED會(huì)自動(dòng)閃爍,需要重新選擇分立器件(電阻電容)即硬件電路需要更改。

方案二,只需要更改單片機(jī)程序即可,硬件不需要更改,只需要軟件更改。

硬件更改代價(jià)大,周期長(zhǎng),成本高(重新生產(chǎn)),軟件更改,周期短(只是軟件更改的時(shí)間),成本低(只需要軟件升級(jí)即可)

因此選用方案二。下面開始詳細(xì)設(shè)計(jì)。

1.1.2 詳細(xì)設(shè)計(jì)

1.1.2.1 硬件設(shè)計(jì)

首先是硬件設(shè)計(jì),因?yàn)橛布枰a(chǎn)周期,PCB制板需要時(shí)間,PCB焊接需要時(shí)間。軟件設(shè)計(jì)可以在硬件生產(chǎn)的時(shí)間內(nèi)開發(fā),這樣就合理安排了開發(fā)進(jìn)度。

硬件設(shè)計(jì)首先是根據(jù)確定的方案進(jìn)行元器件選型,之前確定的單片機(jī)控制LED燈的方案,需要選擇用什么型號(hào)的單片機(jī),和什么型號(hào)的LED燈。單片機(jī)選擇目前市面上應(yīng)用最廣泛的8051單片機(jī),具體型號(hào)為STC公司的89C52型單片機(jī)。LED燈有直插和表貼兩種。為節(jié)省PCB面積,我們選擇表貼的LED燈。主要元器件選擇好以后,開始原理圖設(shè)計(jì)

設(shè)計(jì)好的原理圖如圖所示

硬件設(shè)計(jì)主要分兩部分,一部分電路為單片機(jī)要正常運(yùn)行所必須的電路,包括電源電路,晶振電路,RESET電路。

另一部分為IO口控制電路完成控制功能(即控制LED燈亮滅)

單片機(jī)工作首先需要5V的電源,這個(gè)可以由外接電源提供,電路板上只需提供一個(gè)插頭即可。

然后需要晶振提供恒定的時(shí)鐘,如下圖所示

單片機(jī)的能正常工作必須有一個(gè)時(shí)鐘信號(hào),單片機(jī)所有的操作都是基于這個(gè)時(shí)鐘的,就像現(xiàn)實(shí)生活中,我們每個(gè)人會(huì)以統(tǒng)一的北京時(shí)間為基準(zhǔn),來(lái)安排我們的工作生活,如果每個(gè)人的表所顯示的時(shí)間不是統(tǒng)一的,你的表是3點(diǎn)的時(shí)候我的表是1點(diǎn),那么我們的工作生活就會(huì)亂套。 單片機(jī)內(nèi)部的各個(gè)部分,如存儲(chǔ)器,計(jì)數(shù)器,ALU都會(huì)以這個(gè)輸入的時(shí)鐘信號(hào)為基準(zhǔn)來(lái)進(jìn)行工作,如果沒(méi)有這個(gè)時(shí)鐘信號(hào),各個(gè)部分就會(huì)錯(cuò)亂。

振蕩周期

即單片機(jī)輸入的時(shí)鐘信號(hào)的周期

機(jī)器周期:一個(gè)機(jī)器周期是指CPU訪問(wèn)存儲(chǔ)器一次所需要的時(shí)間,例如取指令、讀存儲(chǔ)器、寫存儲(chǔ)器等等。

8051單片機(jī)的一個(gè)機(jī)器周期為12個(gè)振蕩周期

指令周期:即單片機(jī)執(zhí)行一條指令所消耗的時(shí)間,它以機(jī)器周期為單位。通常8051單片機(jī)執(zhí)行一條指令,如加,減等會(huì)需要1個(gè)或2個(gè)機(jī)器周期,少數(shù)指令,如乘除指令會(huì)消耗4個(gè)機(jī)器周期

最后需要一個(gè)復(fù)位電路,供初始化和單片機(jī)死機(jī)時(shí)能夠恢復(fù)運(yùn)行狀態(tài)。8051單片機(jī)的復(fù)位(RESET)引腳在高電平持續(xù)24個(gè)振蕩周期后即進(jìn)行復(fù)位操作,即RESET引腳接邏輯高電平約0.002ms以上即進(jìn)行復(fù)位。但一般為了系統(tǒng)的可靠性,我們?cè)谝獔?zhí)行復(fù)位操作時(shí),給單片機(jī)RESET引腳邏輯高電平的時(shí)間為

100ms左右,即在RESET引腳輸入一個(gè)這樣的波形為達(dá)到這樣的設(shè)計(jì)效果設(shè)計(jì)啊電路,這是一個(gè)典型的阻容復(fù)位電路,其中上電復(fù)位的電路部分如下圖所示:

圖中的電路在系統(tǒng)沒(méi)有上電時(shí),VCC為0V,電容C6完全放電。當(dāng)系統(tǒng)上電時(shí),電容C6開始充電,電容兩端電壓為0,因此A點(diǎn)電壓為VCC,為邏輯高電平,然后,隨著電容C6的充電,電容兩端的電壓逐漸上升,直至為VCC,此時(shí)A點(diǎn)的電壓為0V,即邏輯低電平。

在實(shí)際系統(tǒng)中,微控制器輸入電壓閾值大約為1.1~1.3V,低于這個(gè)閾值的電壓被認(rèn)為是邏輯0,超過(guò)這個(gè)閾值被認(rèn)為是邏輯1。也就是說(shuō),A點(diǎn)電壓在上電時(shí)的VCC到下降至1.2V的這個(gè)時(shí)間t,就是單片機(jī)復(fù)位引腳邏輯高電平持續(xù)的時(shí)間。

而邏輯高電平持續(xù)的時(shí)間t取決于電阻R5的阻值和電容C6的容值。具體按如下公式計(jì)算

=2V,VCC=5V,當(dāng)R=10k,C=10uF時(shí),t約為100ms

即邏輯高電平持續(xù)時(shí)間為100ms,滿足先前我們對(duì)復(fù)位操作所提出的要求。

在次電路基礎(chǔ)之上,我們附加一個(gè)硬件復(fù)位按鈕,如下圖所示

按鈕按下時(shí),將A點(diǎn)電壓拉到VCC,并對(duì)電容C6放電,在按鈕釋放時(shí)將執(zhí)行上面所說(shuō)的復(fù)位流程。

點(diǎn)亮發(fā)光二極管的電路如圖所示

圖中可以看出,當(dāng)單片機(jī)IO口輸出低電平時(shí),二極管導(dǎo)通,電流由單片機(jī)片外“灌”入單片機(jī)片內(nèi),這種方式稱為“灌電流”方式。有人會(huì)問(wèn),能不能把發(fā)光二極管反過(guò)來(lái)接呢?答案是可以的,反過(guò)來(lái)二極管負(fù)端接地,當(dāng)單片機(jī)IO口輸出高電平時(shí),二極管導(dǎo)通。不過(guò)最好不這樣接。因?yàn)?1單片機(jī)的I/O口線輸出低電平時(shí)的灌電流能力較強(qiáng),可達(dá)20mA,而輸出高電平時(shí)的拉電流能力要弱些,圖中接法可以充分利用口線的灌電流能力。

硬件原理比較簡(jiǎn)單,前面已經(jīng)講得很清楚了,原理圖設(shè)計(jì)完后,就開始PCB設(shè)計(jì),由于我們已經(jīng)提供了單片機(jī)開發(fā)板,故先將PCB設(shè)計(jì)跳過(guò),在最后一章作詳細(xì)介紹。下面開始軟件設(shè)計(jì)

1.1.1.1 軟件設(shè)計(jì)

單片機(jī)軟件編程和編譯現(xiàn)在普遍使用KeilC軟件,該軟件最新版是KEIL4,下面以Keil4為例,怎樣建立一個(gè)名為tutorial的工程。

//Tips:建議大家使用Keil軟件時(shí),盡量使用英文文件名,避免軟件對(duì)中文支持得不好導(dǎo)致的各種各樣不確定的問(wèn)題。

建立一個(gè)新工程,單擊Project 菜單New uVision Project,如下圖所示

新建tutorial文件夾,命名工程文件名也為tutorial,保存

選擇工程文件保存路徑,該工程的所有相關(guān)文件如.c .hex.h等文件都保存在該路徑下,我們一般一個(gè)工程對(duì)應(yīng)一個(gè)文件夾,便于管理。現(xiàn)在要新建一個(gè)名為tutorial的工程,因此存放路徑的文件夾也命名為tutorial

點(diǎn)擊保存后,會(huì)彈出如下對(duì)話框,讓你選擇單片機(jī)型號(hào),STC單片機(jī)為國(guó)產(chǎn)單片機(jī),未加入KEILC型號(hào)庫(kù)中,可以選擇配置與其相同的SST SST89C54單片機(jī),ATMEL單片機(jī)直接選擇相應(yīng)型號(hào)即可

彈出加入引導(dǎo)文件,點(diǎn)確定

此時(shí),新的名為 tutorial的Project就已經(jīng)建立,Source Group 1 下沒(méi)有.C文件。需要將寫好的C代碼保存為.C文件加入這個(gè)工程

在,寫單片機(jī)C語(yǔ)言程序之前我們還要做一些基本的配置,配置單片機(jī)晶振頻率,右鍵單擊Target 1 在彈出的菜單中選擇Options for Target‘Target 1

在新彈出的對(duì)話框中Xtal(MHz)選項(xiàng)后填單片機(jī)所使用的晶振的頻率,開發(fā)板核心板選用11.0592MHz。

在Output選項(xiàng)卡中,勾選Create Hex File 選項(xiàng),是編譯軟件輸出Hex文件供程序燒錄

設(shè)置完成后點(diǎn)擊OK,

下面新建.C文件并加入Project。所有的程序代碼都存成.C

格式。點(diǎn)擊File –》New

會(huì)新生成一個(gè)Text文件,在此文件中輸入C程序代碼

File->Save As

文件名tutorial.c 點(diǎn)擊保存

此時(shí)文本文件保存為.C格式

將.C文件加入Projct 右鍵單擊Source Group 1 ,在彈出菜單中選擇Add Files to Group’ Source Group1’

在彈出的對(duì)話框中選擇先前保存的tutorial.c文件 點(diǎn)擊Add

發(fā)現(xiàn)tutorial.c文件加入到Source Group 1下

接下來(lái)在tutorial.c文件中輸入C代碼 正式開始編程

TIPS工程技巧 輸入法需要切換到英文輸入法,標(biāo)點(diǎn)符號(hào)切換到半角狀態(tài)

C代碼:

#include //52系列單片機(jī)頭文件 工程經(jīng)驗(yàn) :程序注釋是非常必要的

sbit led1 = P1^1; //聲明單片機(jī)的P1.1 IO口 為bit 名稱為led1

void main() //主函數(shù)聲明

{

led1 = 0; //單片機(jī)的P1.1IO口電平為低,

//即點(diǎn)亮了與此IO口相連的LED

}

編程輸入完后 保存文件 然后編譯 注意保存?zhèn)浞?c文件

工程經(jīng)驗(yàn):注意編譯前的文件保存, 調(diào)試某個(gè)模塊成功后 記得保存文件 這是一個(gè)很好的工程習(xí)慣

TIPS編譯常見錯(cuò)誤

;號(hào)忘記打 是初學(xué)者的常見錯(cuò)誤

1 Error 即1個(gè)編譯錯(cuò)誤,具體是什么錯(cuò)誤,可以看

Syntax error near ‘}’ 即在 ‘}’附近有語(yǔ)法錯(cuò)誤,其中c(8)的意思是錯(cuò)誤在程序的第8行 可自行到第8行程序檢查程序語(yǔ)法錯(cuò)誤,也可以雙擊 Syntax error near ‘}’ 光標(biāo)即自動(dòng)跳到報(bào)錯(cuò)的‘}’ 附近 你可以檢查‘}’ 附近的語(yǔ)法錯(cuò)誤, 這里我們的語(yǔ)法錯(cuò)誤就是漏掉了;加上 再次編譯 編譯成功

到此為止,軟件的設(shè)計(jì)工作完成,下面就要開始進(jìn)行調(diào)試測(cè)試,驗(yàn)證我們的硬件和軟件設(shè)計(jì)是否能完成設(shè)計(jì)所期望的功能。

1.1.1 調(diào)試測(cè)試

要對(duì)產(chǎn)品進(jìn)行調(diào)試和測(cè)試,需要產(chǎn)品硬件生產(chǎn)完后,將單片機(jī)程序燒寫進(jìn)單片機(jī),然后觀察運(yùn)行的結(jié)果。這里我們已經(jīng)有配套的HC-1型單片機(jī)開發(fā)板,所以硬件生產(chǎn)部分已經(jīng)完成,可以在單片機(jī)開發(fā)板上進(jìn)行調(diào)試和測(cè)試。在實(shí)際的工作中,我們要等待硬件PCB生產(chǎn)裝配完成后,才可以進(jìn)行軟件的調(diào)試和整體測(cè)試。

接下來(lái)生成hex文件 燒寫進(jìn)單片機(jī)

在此加入ISP軟件燒HEX文件方法

首先,雙擊ISP軟件,進(jìn)入軟件界面,選擇單片機(jī)型號(hào),使用什么型號(hào)的單片機(jī)就選擇型號(hào),開發(fā)板選用STC89C52RC單片機(jī),因此我們做相應(yīng)選擇。

選擇串口號(hào),此時(shí)USB線連接PC和核心板開發(fā)板,在PC機(jī)的任務(wù)管理器中查看串口號(hào)為COM?,并在COM選擇中選擇對(duì)應(yīng)的串口號(hào),選擇COM4

打開需要燒錄的程序文件,點(diǎn)擊 打開程序文件 按鈕,選擇你需要燒錄的hex文件,hex文件由Keil軟件編譯生成,默認(rèn)保存在工程文件夾內(nèi)

Hex文件導(dǎo)入之后,如圖所示

此時(shí)關(guān)閉單片機(jī)開發(fā)板開關(guān),使單片機(jī)斷電,然后點(diǎn)擊 Download/下載 按鈕 然后開啟單片機(jī)開發(fā)板,使單片機(jī)上電。這是可以看到程序燒錄進(jìn)單片機(jī)的提示信息

Add pic here

程序燒錄進(jìn)單片機(jī)之后,接通單片機(jī)電源,觀察運(yùn)行情況,開發(fā)板第一盞led在不停的閃爍,而不是一直亮 為什么?

我們回過(guò)頭來(lái)看看編譯軟件keil C,編譯軟件所做的事情就是把C語(yǔ)言程序編譯成對(duì)應(yīng)的匯編程序以至于機(jī)器碼 然后燒到程序

我們來(lái)看看keil 講我們這個(gè)程序編譯成的匯編語(yǔ)句

點(diǎn)擊紅圈圈住的按鈕

進(jìn)入界面

看紅圈圈住的Disassembly窗口

程序最后一行 22 RET 22為機(jī)器碼 對(duì)應(yīng)匯編語(yǔ)句為RET

代表 reset復(fù)位,即keil C 在編譯匯編語(yǔ)句后自動(dòng)在程序最后加了一句 復(fù)位語(yǔ)句,每當(dāng)程序執(zhí)行完后 單片機(jī)復(fù)位 復(fù)位所進(jìn)行的操作是單片機(jī)所有寄存器的值賦初值,p1^1口的初值是1,復(fù)位后程序重新開始從第一句執(zhí)行,又開始執(zhí)行main函數(shù) p1^1口又被置0 如此循環(huán) 就造成了led燈在閃爍而不是常亮

解決方法,while(1);加入程序結(jié)尾

重新下載程序到開發(fā)板,led常亮

Keil C為什么自作主張的加一條我們并沒(méi)有寫的語(yǔ)句呢?是為了避免程序跑飛,不加while(1)語(yǔ)句 而又不加復(fù)位語(yǔ)句 有可能PC指針繼續(xù)往下運(yùn)行,

大家可以看匯編語(yǔ)句后面的語(yǔ)句都是

C:0×0013 00 NOP

C:0×0014 00 NOP

C:0×0015 00 NOP

C:0×0016 00 NOP

C:0×0017 00 NOP

一直到

C:0xFFFF 00 NOP

NOP就是空的意思 即程序存儲(chǔ)器里面沒(méi)有指令,但是PC指針仍然會(huì)往下執(zhí)行一直到0xFFFF,如果程序存儲(chǔ)器后半段中有遺留的數(shù)據(jù),程序就會(huì)跑飛,如果這樣的話 問(wèn)題很難定位與查找

加While(1)后C:0×0011 80FE SJMP C:0011 80FE是機(jī)器碼 對(duì)應(yīng)的匯編語(yǔ)句是SJMP C:0011 即程序指針不停在這個(gè)地址循環(huán)

更改后的代碼如下所示

#include //52系列單片機(jī)頭文件 工程經(jīng)驗(yàn) :程序注釋是非常必要的

sbit led1 = P1^1; //聲明單片機(jī)的P1.1 IO口 為bit 名稱為led1

void main() //主函數(shù)聲明

{

led1 = 0; //單片機(jī)的P1.1IO口電平為低,

//即點(diǎn)亮了與此IO口相連的LED

While(1);

}

到此為止,產(chǎn)品調(diào)試成功。

進(jìn)入測(cè)試,我們把開發(fā)板上電,工作一段時(shí)間,LED恒定常亮

1.1.1 文檔整理

調(diào)試成功之后,將原理圖(.sch文件),PCB,軟件代碼(.c文件)進(jìn)行整理保存。便于生產(chǎn)部門進(jìn)行批量生產(chǎn)。

這樣整個(gè)產(chǎn)品開發(fā)的過(guò)程完畢。

如果作為一個(gè)教學(xué)實(shí)驗(yàn),現(xiàn)在就是一個(gè)完整的實(shí)驗(yàn)。那么作為產(chǎn)品開發(fā)來(lái)講,客戶也許會(huì)提出對(duì)產(chǎn)品的修改意見,要求進(jìn)行產(chǎn)品升級(jí)。

比如客戶要求同時(shí)控制8盞燈的亮滅,要求第2,4,6,8盞燈以1s的間隔閃爍。這樣我們就又來(lái)了一個(gè)新的項(xiàng)目。

提問(wèn)者:dposadksapdsakd 地點(diǎn):- 瀏覽次數(shù):5721 提問(wèn)時(shí)間:10-24 16:41
我有更好的答案
提 交
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)單片機(jī)
具有音調(diào)控制的單片機(jī)立體聲前置放大器
用于單片機(jī)與電子裝置中的開關(guān)電源
單片機(jī)軟硬件復(fù)位的條件都有啥
電動(dòng)機(jī)的單片機(jī)控制
單片機(jī)應(yīng)用系統(tǒng)開發(fā)實(shí)例導(dǎo)航