版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 亮度是工業(yè)中非常關(guān)鍵的一項(xiàng)物理量,在農(nóng)業(yè),現(xiàn)代科學(xué)研究和各種高新技術(shù)的開發(fā)和研究中也是一個非常普遍和常用的測量參數(shù)。亮度自動控制的原理主要是:將隨亮度變化而變化的物理參數(shù),通過光傳感器轉(zhuǎn)變成電的或其他信號,傳給處理電路,最后轉(zhuǎn)換成亮度數(shù)值顯示出來。目前最具發(fā)展前景的燈光調(diào)節(jié)是加入自動控制原理,通過自動控制系統(tǒng),按照給定參數(shù)對對象
2、的反饋信息進(jìn)行調(diào)節(jié),從而滿足工農(nóng)業(yè)生產(chǎn)的需求。本文介紹了以處理芯片STC1205A08S2為核心器件的亮度控制系統(tǒng)。STC1205A08S2 是宏晶以公司研制的51內(nèi)核為主的系列單片機(jī),這個芯片設(shè)計(jì)的時候就吸取其它51系列單片很容易被解密的教訓(xùn),改進(jìn)了加密機(jī)制。</p><p> 關(guān)鍵詞: 亮度控制;STC1205A08S2;自動控制系統(tǒng)。</p><p><b> 目錄&
3、lt;/b></p><p><b> 引言1</b></p><p> 1 課程設(shè)計(jì)概述1</p><p> 1.1 課程設(shè)計(jì)題目1</p><p> 1.2 課程設(shè)計(jì)要求1</p><p> 1.3 主要儀器設(shè)備1</p><p> 1.4
4、 PWM控制說明2</p><p><b> 2 硬件設(shè)計(jì)2</b></p><p> 2.1 單片機(jī)部分2</p><p> 2.2 亮度反饋部分4</p><p> 2.3 按鍵電路部分4</p><p> 2.4 串口下載部分5</p><p>
5、; 2.5 LED執(zhí)行部件6</p><p><b> 3 軟件設(shè)計(jì)6</b></p><p> 3.1 按鍵的軟件設(shè)計(jì)6</p><p> 3.2 一般串行下載介紹7</p><p> 3.3 LCD1062顯示介紹8</p><p> 3.4 PWM控制具體過程9&l
6、t;/p><p> 3.5 流程圖設(shè)計(jì)10</p><p> 4 系統(tǒng)調(diào)試10</p><p> 4.1 LED執(zhí)行部分調(diào)試10</p><p> 4.2串口下載部分調(diào)試11</p><p> 4.3 LED顯示部分調(diào)試11</p><p> 4.4 按鍵部分調(diào)試11<
7、;/p><p> 4.5系統(tǒng)調(diào)試11</p><p> 5 課設(shè)總結(jié)11</p><p><b> 參考文獻(xiàn)12</b></p><p><b> 附 錄13</b></p><p><b> 引言</b></p><
8、;p> 調(diào)光燈亮度作為一項(xiàng)光工參數(shù),在工業(yè)現(xiàn)場和過程控制中具有至關(guān)重要的作用。因而,各種以光敏作為傳感器的光敏電阻和光敏二極管普遍使用。亮度是工業(yè)中非常關(guān)鍵的一項(xiàng)物理量,在農(nóng)業(yè),現(xiàn)代科學(xué)研究和各種高新技術(shù)的開發(fā)和研究中也是一個非常普遍和常用的測量參數(shù)。亮度自動控制的原理主要是:將隨亮度變化而變化的物理參數(shù),通過光傳感器轉(zhuǎn)變成電的或其他信號,傳給處理電路,最后轉(zhuǎn)換成亮度數(shù)值顯示出來。目前最具發(fā)展前景的燈光調(diào)節(jié)是加入自動控制原理,通
9、過自動控制系統(tǒng),按照給定參數(shù)對對象的反饋信息進(jìn)行調(diào)節(jié),從而滿足工農(nóng)業(yè)生產(chǎn)的需求。</p><p><b> 1 課程設(shè)計(jì)概述</b></p><p> 1.1 課程設(shè)計(jì)題目</p><p> 設(shè)計(jì)LED線性驅(qū)動電路和光敏管進(jìn)行亮度測量電路,再用單片機(jī)設(shè)計(jì)控制器輸出PWM,調(diào)節(jié)LED驅(qū)動功率,實(shí)現(xiàn)亮度的自動控制,通過鍵盤進(jìn)行亮度設(shè)置,實(shí)際
10、亮度可以實(shí)時顯示。</p><p> 1.2 課程設(shè)計(jì)要求</p><p> 要求:1、實(shí)現(xiàn)亮度可調(diào);</p><p> 2、控制精度±1%(±50m);</p><p> 3、實(shí)現(xiàn)亮度閉環(huán)反饋控制。</p><p> *附加要求:通過RS232或RS485接口可以與PC機(jī)通信,在PC機(jī)上
11、能夠進(jìn)行參數(shù)顯示和設(shè)置。</p><p> 圖1-2溫度控制系統(tǒng)的基本組成</p><p> 1.3 主要儀器設(shè)備</p><p> 1.4 PWM控制說明</p><p> PWM控制簡介:脈沖寬度調(diào)制(PWM)是一種模擬控制方式,其根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管柵極或基極的偏置,來實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出晶體管或晶體管導(dǎo)通時間的改變,
12、這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種非常有效的技術(shù)。PWM控制技術(shù)以其控制簡單,靈活和動態(tài)響應(yīng)好的優(yōu)點(diǎn)而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,也是人們研究的熱點(diǎn)。由于當(dāng)今科學(xué)技術(shù)的發(fā)展已經(jīng)沒有了學(xué)科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振軟開關(guān)技術(shù)將會成為PWM控制技術(shù)發(fā)展的主要方向之一。</p><p> PWM基本原理:隨著電子技術(shù)的發(fā)展
13、,出現(xiàn)了多種PWM技術(shù),其中包括:相電壓控制PWM、脈寬PWM法、隨機(jī)PWM、SPWM法、線電壓控制PWM等,而在鎳氫電池智能充電器中采用的脈寬PWM法,它是把每一脈沖寬度均相等的脈沖列作為PWM波形,通過改變脈沖列的周期可以調(diào)頻,改變脈沖的寬度或占空比可以調(diào)壓,采用適當(dāng)控制方法即可使電壓與頻率協(xié)調(diào)變化。可以通過調(diào)整PWM的周期、PWM的占空比而達(dá)到控制充電電流的目的。</p><p><b> 2
14、 硬件設(shè)計(jì)</b></p><p> 2.1 單片機(jī)部分 </p><p> 本設(shè)計(jì)選擇的單片機(jī)芯片是STC1205A08S2,其原理圖如2-1所示。該芯片的P2.0-3用作鍵盤數(shù)字量輸入,為了防止干擾使鍵盤處于低電平,加入了上拉電阻時按鍵未按下時始終處于高電平狀態(tài);</p><p><b> 芯片引腳功能:</b><
15、/p><p> P1.0作為光敏電阻反饋數(shù)據(jù)輸入端口;</p><p> P0口顯示數(shù)據(jù)輸出到LCD1602顯示;</p><p> P1.4作為PWM輸出端口</p><p> 圖 2-1 STC控制系統(tǒng)原理圖</p><p> AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM—Flash Pro
16、grammable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微
17、控制器,AT89C2051是它的一種精簡版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。</p><p> AT89C51主要接口介紹:</p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。</p>
18、<p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接收。 </p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1
19、”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時接收高八位地址信號和控制信號。</p><p> P3口:P3
20、口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流這是由于上拉的緣故。</p><p> 2.2 亮度反饋部分</p><p> 如圖2-2所示,圖中RF為光敏電阻,它可更加接收到的LED燈光的亮度改變自身阻值。LED燈變亮,其阻值越小;反之,LED燈越亮,其阻
21、值也越大。</p><p> 圖2-2 亮度反饋原理圖</p><p> 2.3 按鍵電路部分</p><p><b> 鍵盤電路分類:</b></p><p> 1、獨(dú)立式鍵盤 獨(dú)立式鍵盤是指直接用I/O口線構(gòu)成的單個按鍵電路。每根I/O口線上按鍵的工作狀態(tài)不會影響其他I/O口線的工作狀態(tài)。微處理器通過
22、向此I/O口發(fā)出讀指令來得到當(dāng)前按鍵的狀態(tài)。鍵未按下時,此信號為1(高電平),鍵按下時,此信號為O(低電平)。因此,通過檢測輸入線的電平狀態(tài)可以很容易判斷哪個按鍵被按下了,一般獨(dú)立式按鍵的接口,獨(dú)立式鍵盤電路原理圖:</p><p><b> 2、矩形式鍵盤</b></p><p> 獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但缺點(diǎn)是占用I/O口資源太多,在按鍵數(shù)量較
23、多時,I/O口浪費(fèi)大,矩陣式按鍵結(jié)構(gòu)能夠緩解這種矛盾。矩陣式鍵盤由行線、列線及位于行列線交叉點(diǎn)上的按鍵等部分組成。當(dāng)應(yīng)用系統(tǒng)需要的按鍵數(shù)量比較多時可采用矩陣式鍵盤。一般情況下,按鍵數(shù)等于矩陣行數(shù)和列數(shù)的乘積。矩形結(jié)構(gòu)如圖:</p><p><b> 鍵盤電路選擇:</b></p><p> 根據(jù)實(shí)際需要,本次設(shè)計(jì)采用獨(dú)立式鍵盤,如圖2-3所示,通過按鍵可以增大、減
24、小LED燈的給定值。給定值的不同,其亮度也不同。通過按鍵可把LED燈調(diào)節(jié)到合適的亮度。</p><p> 圖2-3 按鍵原理圖</p><p> 2.4 串口下載部分</p><p> 通過下圖2-4串口下載電路,可以將程序從PC機(jī)直接下載到板子上的STC中,比較方便。</p><p> 圖2-4 串口下載電路原理圖</p>
25、;<p><b> 宏晶科技參考資料:</b></p><p> 說明:STC89 系列單片機(jī)大部分具有在系統(tǒng)可編程(ISP)特性,ISP 的好處是:省去購買通用編程器,單片機(jī)在用戶系統(tǒng)上即可下載/ 燒錄用戶程序,而無須將單片機(jī)從已生產(chǎn)好的產(chǎn)品上拆下,再用通用編程器將程序代碼燒錄進(jìn)單片機(jī)內(nèi)部。有些程序尚未定型的產(chǎn)品可以一邊生產(chǎn),一邊完善,加快了產(chǎn)品進(jìn)入市場的速度,減小了新產(chǎn)
26、品由于軟件缺陷帶來的風(fēng)險(xiǎn)。由于可以將程序直接下載進(jìn)單片機(jī)看運(yùn)行結(jié)果故也可以不用仿真器。大部分STC89 系列單片機(jī)在銷售給用戶之前已在單片機(jī)內(nèi)部固化有ISP 系統(tǒng)引導(dǎo)程序,配合PC 端的控制程序即可將用戶的程序代碼下載進(jìn)單片機(jī)內(nèi)部,故無須編程器(速度比通用編程器快)。不要用通用編程器編程,否則有可能將單片機(jī)內(nèi)部已固化的ISP 系統(tǒng)引導(dǎo)程序擦除,造成無法使用STC 提供的ISP 軟件下載用戶的程序代碼。</p><p&
27、gt; 2.5 LED執(zhí)行部件</p><p> 如下圖2-3所示,P1.4輸出PWM輸出控制信號。根據(jù)輸出電壓占空比不同,燈的亮度也不一樣。占空比越大,說明輸出電壓越大,燈就越亮;反之,占空比越小,即說明輸出電壓越小,燈就越暗。</p><p> 圖 2-5 LED執(zhí)行部件原理圖</p><p><b> 3 軟件設(shè)計(jì)</b>&l
28、t;/p><p> 3.1 按鍵的軟件設(shè)計(jì)</p><p><b> 鍵盤的監(jiān)測方式:</b></p><p> 1、查詢方式:查詢方式是指CPU不斷的判斷I/O口(按鍵接口)的狀態(tài),就像掃描一樣,掃描哪個按鍵式是處于被按下狀態(tài),掃描到了就可以確定是哪個按鍵了。在查詢方式下不管有沒有按鍵,CPU都需要不斷地進(jìn)行查詢操作,以判斷是否有鍵按下,這
29、不利于提高CPU的效率。在一些任務(wù)繁重或者低功耗應(yīng)用場合,尤其不適合使用。如果采用中斷方式,只有在每次有鍵按下,CPU才去響應(yīng)鍵盤,這樣能夠大大減輕CPU的任務(wù)量。</p><p> 2、中斷方式:中斷方式相比查詢方式要好很多,當(dāng)然它多占用了單片機(jī)的一個資源,當(dāng)檢測到有按鍵按下時,就進(jìn)入到中斷里面判斷是哪個按鍵,換句話可以理解為在中斷中掃描按鍵值。用中斷方式恰恰就解決了查詢方式中的問題。</p>
30、<p><b> 鍵盤抖動原因:</b></p><p> 由于按鍵多為機(jī)械彈性開關(guān),它是利用了機(jī)械觸點(diǎn)的合、斷作用。所以按鍵開關(guān)在閉合和斷開的瞬間均有一連串的抖動,抖動時間的長短由按鍵的機(jī)械特性決定,一般為5~10ms,這是一個很重要的參數(shù)。抖動過程引起電平信號的波動,有可能令CPU誤解為多次按鍵操作,從而引起誤處理。通常避免該問題是通過消抖來實(shí)現(xiàn)的,而消抖的方式也有兩種,軟
31、件方式和硬件方式。</p><p><b> 按鍵消抖方法:</b></p><p> 1、硬件消抖方法:可以用電路來實(shí)現(xiàn),如加RS觸發(fā)器,使其產(chǎn)生單次手動脈沖;此外,也可以利用積分電路來吸收抖動帶來的干擾脈沖,只要選擇好適當(dāng)?shù)膮?shù)也能達(dá)到較好的效果。</p><p> 2、軟件消抖方法:多采用軟件延時的方法:在第一次檢測到有鍵按下時,執(zhí)
32、行一段延時10ms的子程序后,再確認(rèn)電平是否仍保持閉合狀態(tài)電平,如果保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。釋放一個鍵時,方法相同。這種消除抖動影響的軟件措施是切實(shí)可行的。</p><p> 3.2 一般串行下載介紹</p><p> ISP:在系統(tǒng)編程,一般目標(biāo)芯片內(nèi)包含了專用的接口電路,上位機(jī)發(fā)送編程命令碼及編程控制信息后由芯片硬件自動完成編程。比如通過JTAG口升級就是其中的一種,
33、現(xiàn)在推出的許多新的芯片比如ARM都采用此模式。ATMEL公司的AT89S5x系列的單片機(jī)的下載模式雖然不屬于JTAG模式,但很類似,應(yīng)該屬于ISP類。</p><p> IAP:一般叫做在應(yīng)用編程。MCS-51系列單片機(jī)中采用比較多的sst、stc兩家公司的單片機(jī)就屬于這種模式,與上面的模式是有區(qū)別的。</p><p><b> 二者比較:</b></p&g
34、t;<p> ISP編程屬于純硬件操作,只要FLASH的物理特性未損壞,就可以實(shí)現(xiàn)串口升級,但升級模式是固定的。</p><p> IAP模式屬于屬于軟件操作,如果8K區(qū)并無物理損壞但軟件有問題,就只能使用編程器來編程,無法實(shí)現(xiàn)串口升級。但正是由于這種可更改性,可以擴(kuò)展多種升級方式,更靈活。其實(shí)物理損壞的可能性不大,所以我個人認(rèn)為還是IAP更好些。</p><p> 3
35、.3 LCD1062顯示介紹</p><p> 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖所示:</p><p> 1602LCD的指令說明及時序:</p><p> LCD1064驅(qū)動軟件代碼在后面附錄部分</p><p> 3.4
36、PWM控制具體過程</p><p> 脈沖寬度調(diào)制(PWM)是一種對模擬信號電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來對一個具體模擬信號的電平進(jìn)行編碼。PWM信號仍然是數(shù)字的,因?yàn)樵诮o定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時候即是直流供電被加到負(fù)載上的時候,斷的時候
37、即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。</p><p> 許多微控制器內(nèi)部都包含有PWM控制器。占空比是接通時間與周期之比;調(diào)制頻率為周期的倒數(shù)。執(zhí)行PWM操作之前,這種微處理器要求在軟件中完成以下工作: </p><p> 1、設(shè)置提供調(diào)制方波的片上定時器/計(jì)數(shù)器的周期 </p><p> 2、 在PWM控制寄存器中設(shè)置接通
38、時間 </p><p> 3、設(shè)置PWM輸出的方向,這個輸出是一個通用I/O管腳 </p><p><b> 4、啟動定時器 </b></p><p> 5、使能PWM控制器</p><p> 目前幾乎所有市售的單片機(jī)都有PWM模塊功能,若沒有,也可以利用定時器及GPIO口來實(shí)現(xiàn)。更為一般的PWM模塊控制流程為:
39、 </p><p> 1、使能相關(guān)的模塊(PWM模塊以及對應(yīng)管教的GPIO模塊)。 </p><p> 2、配置PWM模塊的功能,具體有: </p><p> ?、僭O(shè)置PWM定時器周期,該參數(shù)決定PWM波形的頻率。 </p><p> ?、谠O(shè)置PWM定時器比較值,該參數(shù)決定PWM波形的占空比。 </p><p>
40、?、墼O(shè)置死區(qū)(deadband),為避免橋臂的直通需要設(shè)置死區(qū),一般較高檔的單片機(jī)都有該功能。 </p><p> ?、茉O(shè)置故障處理情況,一般為故障是封鎖輸出,防止過流損壞功率管,故障一般有比較器或ADC或GPIO檢測。 </p><p> ?、菰O(shè)定同步功能,該功能在多橋臂,即多PWM模塊協(xié)調(diào)工作時尤為重要。 </p><p> 3、設(shè)置相應(yīng)的中斷,編寫ISR,一
41、般用于電壓電流采樣,計(jì)算下一個周期的占空比,更改占空比,這部分也會有PI控制的功能。 </p><p> 4、使能PWM波形發(fā)生。</p><p><b> 3.5 流程圖設(shè)計(jì)</b></p><p> 控制現(xiàn)場主程序流程圖設(shè)計(jì)如下:</p><p><b> 4 系統(tǒng)調(diào)試</b><
42、/p><p> 4.1 LED執(zhí)行部分調(diào)試</p><p> 裝好元件,接通電源,觀察LED是否發(fā)光。若發(fā)光,說明LED部分連接正確;若不發(fā)光,則說明此部分線路連接有問題,應(yīng)該用萬用便檢查STC第五腳,其電壓應(yīng)在0-5V;還要檢查三極管三個腳是否連接正確。</p><p> 4.2串口下載部分調(diào)試</p><p> 把編好的程序通過次串口
43、下載到STC,若可以下載,則說明此部分連線正確;若不能下載,則檢查RS232各腳電壓是否正常。</p><p> 4.3 LED顯示部分調(diào)試</p><p> 將一個正確的顯示程序下載到單片機(jī),觀察LCD是否按要求顯示。若按要求顯示,說明此部分可以正常工作;若不能顯示,則先檢查顯示器的好壞,其次檢查其各腳的連接是否正確。</p><p> 4.4 按鍵部分調(diào)試
44、</p><p> 按下按鍵,觀察LED燈亮度是否有變化,若按要求變化,說明此部分正常工作;若不按要求變化,則應(yīng)先檢查有關(guān)按鍵部分程序是否書寫正確,其次檢查按鍵與STC的線路連接情況是否正確。</p><p><b> 4.5系統(tǒng)調(diào)試</b></p><p> 各個部分的調(diào)試完成以后,還需要對整個系統(tǒng)進(jìn)行調(diào)試。如發(fā)現(xiàn)問題及時糾正,直至能正
45、常如期運(yùn)行。</p><p><b> 5 課設(shè)總結(jié)</b></p><p> 本次課程設(shè)計(jì)是我們專業(yè)課程知識綜合應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會,從事職業(yè)工作前一個必不少的過程。在這個過程中本人更為深層次的了解了PI控制和PWM控制。根據(jù)課設(shè)需要在圖書館和網(wǎng)上積極尋找相關(guān)資料,不懂的地方詢問老師和同學(xué),極大的補(bǔ)充了自己所學(xué)的不足。仿真成功后需要做板子和寫程序,課
46、設(shè)工作量較大,要極大有耐心和恒心,當(dāng)然也是鍛煉我們耐心和恒心的機(jī)會。板子做好后,后面要注意的事情還很多。比如下載程序時板子沒有反應(yīng),這時應(yīng)檢查板子上的焊點(diǎn)是否存在虛焊和漏焊,然后檢查線路是否短路。調(diào)試程序時,為了方便快捷的調(diào)試程序需要將程序要分模塊來調(diào)試,根據(jù)程序流程圖把每個模塊都調(diào)試好,最后各個模塊一起調(diào)試一遍。通過此次課程設(shè)計(jì),使我深深體會到,干任何事都必須耐心,細(xì)致,以后在以后的工作中任何一個小錯誤都有可能引發(fā)一個大的事故,我不禁
47、時刻提示自己,一定要養(yǎng)成一種高度負(fù)責(zé),認(rèn)真對待的良好習(xí)慣。同時發(fā)現(xiàn)自己所掌握的知識量還不多,很多地方都需要學(xué)習(xí),即便是掌握的知識,將其變成實(shí)物也很困難,而走向社會更多的是將理論變?yōu)閷?shí)物,總之,即將走向社會的我們需要學(xué)習(xí)的地方還很多。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1991<
48、;/p><p> [2] 高海生,楊文煥.單片機(jī)應(yīng)用技術(shù)大全[M].西南交通大學(xué)出版社,1999-06.</p><p> [3] 徐愛鈞,彭秀華.單片機(jī)高級C51應(yīng)用程序設(shè)計(jì)[M].中國計(jì)量出版社,2001.</p><p> [4] 馬盅梅.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2003.</p><p><b
49、> 附 錄</b></p><p><b> 主要電路PCB:</b></p><p><b> 電路原理圖</b></p><p><b> 電路原理</b></p><p> 現(xiàn)場ADuC512程序</p><p>
50、/*****************************************************************************/</p><p> #include "reg51.h"</p><p> #include "intrins.h"</p><p> #include "
51、;LCD1602.H"</p><p> #define FOSC 24058052L</p><p> #define BAUD 9600</p><p> sbitbutton1=P2^2; //按鍵-減小亮度</p><p> sbitbutton2=P2^1; //按鍵-增大亮度
52、</p><p> sbitbutton3=P2^0 ; //按鍵-確認(rèn) </p><p> typedef unsigned char BYTE;</p><p> typedef unsigned int WORD;</p><p> WORD exp=300;</p><p&g
53、t; BYTE REV=0;</p><p> /***************************************AD************************************/</p><p> /*Declare SFR associated with the ADC */</p><p> BYTE ch = 0;
54、 //ADC channel NO.</p><p> sfr ADC_CONTR = 0xBC; //ADC control register</p><p> sfr ADC_RES = 0xBD;
55、 //ADC hight 8-bit result register</p><p> sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register</p><p> sfr P1ASF = 0x9D;
56、 //P1 secondary function control register</p><p> /*Define ADC operation const for ADC_CONTR*/</p><p> #define ADC_POWER 0x80 //ADC power control bit&
57、lt;/p><p> #define ADC_FLAG 0x10 //ADC complete flag</p><p> #define ADC_START 0x08 //ADC start control bit</p><p> #define
58、 ADC_SPEEDLL 0x00 //540 clocks</p><p> #define ADC_SPEEDL 0x20 //360 clocks</p><p> #define ADC_SPEEDH 0x40 //180 clocks</
59、p><p> #define ADC_SPEEDHH 0x60 //90 clocks</p><p> /*------------------------------------------------------Get ADC result-----------------------------------------*/</p>
60、<p> WORD GetADCResult(BYTE ch)</p><p> { WORD ADC_R;</p><p> ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;</p><p> _nop_();
61、 //Must wait before inquiry</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> whil
62、e (!(ADC_CONTR & ADC_FLAG)); //Wait complete flag</p><p> ADC_CONTR &= ~ADC_FLAG; //Close ADC</p><p> ADC_R=ADC_RES*4+ADC_LOW2; //Return ADC result</p>&l
63、t;p> return ADC_R;}</p><p> /*********************************平均值**************************************/</p><p> WORD GetADCResult_P()</p><p> { WORD ADC_RP=GetADCResult(0);
64、</p><p><b> BYTE i;</b></p><p> for(i=0;i<10;i++)</p><p> ADC_RP=(ADC_RP+GetADCResult(0))/2;</p><p> ADC_RP=ADC_RP*0.48828;</p><p> ret
65、urn ADC_RP;}</p><p> /*-----------------------------------------------------Initial ADC sfr-------------------------------------------*/</p><p> void InitADC()</p><p> { //P1ASF
66、 = 0xff; </p><p> ADC_RES = 0; </p><p> ADC_CONTR = ADC_POWER | ADC_SPEEDLL;</p><p> Delay(2);}</p><p> /*-----------
67、----------------------------------------showADC()------------------------------------------------*/</p><p> void showADC(WORD j,BYTE x)</p><p> { BYTE i,a[3],k=7;</p><p> for(i
68、=0;i<3;i++)</p><p> { a[i]=j%10;</p><p><b> j/=10;}</b></p><p> for(i=0;i<3;i++)</p><p> { if(i==2)</p><p> { gotoxy(x,k-i);</
69、p><p> write_LCD_data('.');</p><p><b> k--;}</b></p><p> gotoxy(x,k-i);</p><p> display_LCD_number(a[i]);</p><p><b> }</b>
70、;</p><p><b> }</b></p><p> /*-----------------------------------------------------PI調(diào)節(jié)---------------------------------------------------*/</p><p> void PI(BYTE i,BYT
71、E ki)//i->模糊值</p><p> { WORD r;</p><p> r=GetADCResult_P();</p><p> if(r<exp-i)</p><p> { //CCAP0H=CCAP0H-(exp-r)/ki;</p><p> CCAP0H=CCAP
72、0H-ki;</p><p> if(CCAP0H<0x2c)</p><p> CCAP0H=0x2c; }</p><p> if(r>exp+i)</p><p> { //CCAP0H=CCAP0H+(r-exp)/ki;</p><p> CCAP0H=CCAP0H+ki;</p
73、><p> if(CCAP0H>0xf4)</p><p> CCAP0H=0xf4; }</p><p><b> }</b></p><p> /*----------------------------------------------------Initial UART----------------
74、------------------------------*/</p><p> void InitUart()</p><p> { SCON = 0x5a;</p><p> PCON=0x80; //8 bit data ,no parity bit</p><p>
75、TMOD = 0x20; //T1 as 8-bit auto reload</p><p> TH1 = TL1 = -13; //Set Uart baudrate</p><p> TR1 = 1; //T1 star
76、t running</p><p><b> } </b></p><p> /*--------------------Send one byte data to PC Input: dat (UART data) Output:- ------------------*/</p><p> void SendData(BY
77、TE dat)</p><p> { while (!TI); //Wait for the previous data is sen</p><p> TI = 0; //Clear TI flag</p><p> SBUF = dat;
78、 //Send current data</p><p><b> }</b></p><p> /*-----------------Send a string to UART Input: s (address of string) Output:None----------------*/</p
79、><p> void SendString(char *s)</p><p> { while (*s) </p><p> { SendData(*s++);}</p><p><b> }</b></p><p> /*---------------
80、-----------------------------------------main()--------------------------------------------------*/ </p><p> void main()</p><p> { BYTE stp=5,ii,tab[3];</p><p> InitUart();
81、 </p><p> InitADC(); </p><p> init_LCD();</p><p> gotoxy(1,0);</p><p> display_LCD_string(" exp: stp: ");</p><p> gotoxy(2,0);</p&g
82、t;<p> display_LCD_string("act: ");</p><p> /***PWM控制***/</p><p> CCON = 0; </p><p> CL = 0;
83、 //復(fù)位PCA的計(jì)數(shù)器 </p><p><b> CH = 0;</b></p><p> CMOD = 0x02; </p><p> CCAP0H = 0xf4; </p><p> CCAP0L = 0x00;
84、 //50</p><p> CCAPM0 = 0x42; </p><p><b> CR = 1; </b></p><p> showADC(exp,1);</p><p> gotoxy(1,14);</p><p> display_LCD_num
85、ber(stp);</p><p><b> while (1)</b></p><p> { if(!button1)</p><p> { delay_50us(40000);</p><p><b> xp -=stp;</b></p><p> Sen
86、dData(0xbb);</p><p> //SendData(0xbb); }</p><p> if(!button2)</p><p> { delay_50us(40000);</p><p> exp +=stp;</p><p> SendData(ADC_RES);</p>&
87、lt;p> SendData(ADC_LOW2); }</p><p> while(!button3)</p><p> { if(!button2)</p><p> { delay_50us(40000); </p><p><b> stp+=1;</b></p><p&g
88、t; gotoxy(1,14);</p><p> display_LCD_number(stp);</p><p><b> }</b></p><p> if(!button1)</p><p> { delay_50us(40000);</p><p><b> st
89、p -=1;</b></p><p> gotoxy(1,14);</p><p> display_LCD_number(stp); }</p><p> delay_50us(80000); }</p><p><b> if(RI)</b></p><p><b&g
90、t; { RI=0;</b></p><p><b> REV=SBUF;</b></p><p> for (ii=0;ii<3;ii++)</p><p> { tab[ii]=REV%10;;</p><p> REV/=10; }</p><p> fo
91、r (ii=0;ii<3;ii++)</p><p> { gotoxy(2,14-ii);</p><p> display_LCD_number(tab[ii]); }</p><p><b> }</b></p><p> showADC(exp,1);</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動控制系統(tǒng)課程設(shè)計(jì)
- 自動控制課程設(shè)計(jì)-- 自動控制系統(tǒng)的校正
- 04023自動控制系統(tǒng)課程設(shè)計(jì)安排
- 電力拖動自動控制系統(tǒng)課程設(shè)計(jì)
- 04023自動控制系統(tǒng)課程設(shè)計(jì)安排
- 電力拖動自動控制系統(tǒng)課程設(shè)計(jì)
- 04023自動控制系統(tǒng)課程設(shè)計(jì)安排
- 電力拖動自動控制系統(tǒng)課程設(shè)計(jì)(3)
- 智能儀器儀表課程設(shè)計(jì)___led調(diào)光燈亮度控制系統(tǒng)___51單片機(jī)__帶程序
- 運(yùn)動控制課程設(shè)計(jì)--電力拖動自動控制系統(tǒng)
- 自動控制課程設(shè)計(jì)--自動控制系統(tǒng)建模、分析及校正
- 課程設(shè)計(jì)--變頻液位自動控制系統(tǒng)
- 自動控制課程設(shè)計(jì)--基于matlab軟件的自動控制系統(tǒng)仿真
- 四層電梯自動控制系統(tǒng)課程設(shè)計(jì)報(bào)告
- 自動控制原理課程設(shè)計(jì)--基于matlab軟件的自動控制系統(tǒng)仿真
- 電氣控制課程設(shè)計(jì)--- 攪動泵自動控制系統(tǒng)
- 四層電梯自動控制系統(tǒng) 課程設(shè)計(jì)報(bào)告
- 基于dsp的自動控制系統(tǒng)課程設(shè)計(jì)報(bào)告
- 自動控制系統(tǒng)課程設(shè)計(jì)--全自動洗衣機(jī)控制系統(tǒng)的設(shè)計(jì)
- 自動控制課程設(shè)計(jì)--自動控制系統(tǒng)穩(wěn)定性分析方法簡介
評論
0/150
提交評論