版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 說 明 書</p><p> 題 目: 基于單片機的直流電壓檢測系統(tǒng)設(shè)計</p><p> 課 程: 單片機原理及應(yīng)用B課程設(shè)計</p><p> 院 (部): 信息與電氣工程學(xué)院</p><p> 專 業(yè): </p>
2、<p> 班 級: </p><p> 學(xué)生姓名: </p><p> 學(xué) 號: </p><p> 指導(dǎo)教師: </p><p> 完成日期: 2013年6月</p><p><b> 摘 要I</b&
3、gt;</p><p><b> 1 設(shè)計目的1</b></p><p><b> 2 設(shè)計要求2</b></p><p><b> 3 設(shè)計內(nèi)容3</b></p><p> 3.1 單片機電壓測量系統(tǒng)的總體設(shè)計3</p><p> 3
4、.1.1 硬件選擇4</p><p> 3.1.2 軟件選擇4</p><p> 3.2 硬件電路的設(shè)計4</p><p> 3.2.1 輸入電路模塊設(shè)計4</p><p> 3.2.2 LM7805穩(wěn)壓電源電路介紹5</p><p> 3.2.3 顯示模塊電路設(shè)計6</p><
5、;p> 3.2.4 A/D轉(zhuǎn)換設(shè)計7</p><p> 3.2.5 單片機模塊的簡介9</p><p> 3.3系統(tǒng)軟件的設(shè)計12</p><p> 3.3.1主程序的設(shè)計13</p><p> 3.3.2 各子程序的設(shè)計14</p><p><b> 總結(jié)與致謝17</b
6、></p><p><b> 參考文獻18</b></p><p> 附錄一 系統(tǒng)整體電路圖19</p><p> 附錄二 A/D轉(zhuǎn)換電路的程序20</p><p> 附錄三 1602LCD顯示模塊的程序22</p><p><b> 摘 要</b&g
7、t;</p><p> 隨著電子科學(xué)技術(shù)的發(fā)展,電子測量成為廣大電子工作者必須掌握的手段。對測量的精度和功能的要求也越來越高,而電壓的測量甚為突出,因為電壓的測量最為普遍。本設(shè)計在查閱了大量前人設(shè)計的數(shù)字電壓表的基礎(chǔ)上,利用單片機技術(shù)結(jié)合A/D轉(zhuǎn)換芯片ADC0832構(gòu)建了一個直流數(shù)字電壓表。本文首先簡要介紹了單片機系統(tǒng)的優(yōu)勢,然后詳細(xì)介紹了直流數(shù)字電壓表的設(shè)計流程,以及硬件系統(tǒng)和軟件系統(tǒng)的設(shè)計。</p&g
8、t;<p> 本文介紹了基于89S51單片機的電壓測量系統(tǒng)設(shè)計,介紹1602LCD液晶的功能和ADC0832的轉(zhuǎn)換原理。該電路設(shè)計簡單,方便。該設(shè)計可以測量0~5V的電壓值,并在1602LCD液晶上顯示出來。</p><p> 本系統(tǒng)主要包括三大模塊:主程序模塊、顯示模塊、A/D轉(zhuǎn)換模塊,繪制點哭原理圖與工作流程圖,并進行調(diào)試,最終設(shè)計完成了該系統(tǒng)的硬件電路,在軟件編程上,采用了c語言進行編程,
9、開發(fā)了顯示模塊程序,A/D轉(zhuǎn)換程序。</p><p> 關(guān)鍵詞:89S51單片機;1602LCD液晶;ADC0832</p><p><b> 1 設(shè)計目的</b></p><p> 電壓是屬于電子測量中的一個重要組成部分。了解,測出各種電壓的值,有助于讓我們更加安全、方便的使用電壓。因為研究電壓的測量值具有重要價值。</p>
10、<p> 傳統(tǒng)的指針式電壓表功能單一、精度低,已經(jīng)滿足不了現(xiàn)在時代的需求,而采用單片機的數(shù)字電壓表,精度高、抗干擾能力強,可擴張性強、集成方便,還可與PC實行實時通信,目前,由各種單片機和A/D轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表,已被廣泛用于電子及電工測量、工業(yè)自動化儀表、自動測試系統(tǒng)等智能化測量領(lǐng)域。</p><p> 基于單片機的電壓檢測系統(tǒng)設(shè)計,控制系統(tǒng)采用89S51單片機,A/D轉(zhuǎn)換器采用ADC08
11、32為主要硬件,實現(xiàn)數(shù)字電壓表的硬件電路與軟件設(shè)計。數(shù)字電壓表可以測量0~5V的輸入電壓值,并在1602LCD液晶模塊上顯示。</p><p><b> 2 設(shè)計要求</b></p><p> 1.根據(jù)已知參數(shù)對輸入信號特征進行分析、需求分析,選擇確定單片機型號、各種外圍芯片型號,完成系統(tǒng)硬件設(shè)計。</p><p> 2.基本教學(xué)要求:每
12、人一臺計算機,計算機安裝Keil、Protel等軟件。</p><p> 3. (利用單片機設(shè)計并制作簡易的直流數(shù)字電壓表,能夠測出0~5V的直流電壓,電路組成框圖如圖所示。 </p><p> ?。?)測量精度0.02V。 </p><p> ?。?)利用數(shù)碼管或者液晶顯示器顯示電壓值。</p><p> (3)測量范圍0~5V。<
13、;/p><p><b> 3 設(shè)計內(nèi)容</b></p><p> 3.1 單片機電壓測量系統(tǒng)的總體設(shè)計</p><p> 本設(shè)計從各個角度分析了由單片機組成的數(shù)字電壓表的設(shè)計過程及各部分電路的組成及其原理??驁D如下:</p><p> 本設(shè)計主要分為兩部分:硬件電路及軟件程序。而硬件電路又大體可分為單片機小系統(tǒng)電路、
14、A/D轉(zhuǎn)換電路、液晶顯示電路,各部分電路的設(shè)計及原理將會在硬件電路設(shè)計部分詳細(xì)介紹;程序的設(shè)計使用C語言編程。</p><p> 電壓是檢測中最基本的測量值,主要過程是模擬信號經(jīng)過輸入電路調(diào)理,在經(jīng)過放大電路,變換成合適范圍的信號幅度,接著該信號,經(jīng)過A/D轉(zhuǎn)換電路轉(zhuǎn)化成數(shù)字信號,數(shù)字信號既可以直接經(jīng)過單片機的處理、保存,再由液晶顯示器顯示出來。</p><p> 總體設(shè)計的內(nèi)容:被測
15、電壓經(jīng)過運算放大電路,可以被AD接收的電壓范圍,然后該信號經(jīng)過ADC0832芯片A/D轉(zhuǎn)換電路轉(zhuǎn)化成數(shù)字信號,再經(jīng)過89S51單片機的處理、保存,由1602LCD液晶模塊顯示出來。</p><p> 該電壓表可達到如下程度:</p><p> (1) 電壓表量程范圍0V~5V;</p><p> (2) 能用液晶顯示電壓值;</p><p&
16、gt; (3) 測量精度可達到0.02mV。</p><p> 3.1.1 硬件選擇</p><p> 選擇89S51作為單片機芯片,選用1602LCD液晶屏來實現(xiàn)電壓顯示,由于ADC0832的基準(zhǔn)電壓由它內(nèi)部本身提供,所以為了方便,我就利用ADC0832作為數(shù)模轉(zhuǎn)換芯片,利用P0至P4的各個串口來進行不同設(shè)備間的連接,計算機進行匯編,H51/L仿真器,單片機多功能實驗箱。</
17、p><p> 3.1.2 軟件選擇</p><p> 本設(shè)計是硬件電路和軟件編程相結(jié)合的設(shè)計方案,選擇合適的編程語言是一個重要的環(huán)節(jié)。在單片機的應(yīng)用系統(tǒng)程序設(shè)計時,常用的是匯編語言和C語言。匯編語言的特點是占用內(nèi)存單元少,執(zhí)行效率高。執(zhí)行速度快。但它依賴于計算機硬件,程序可讀性和可移植性比較差。而C語言雖然執(zhí)行效率沒有匯編語言高,但語言簡潔,使用方便,靈活,運算豐富,表達化類型多樣化,數(shù)據(jù)
18、結(jié)構(gòu)類型豐富,具有結(jié)構(gòu)化的控制語句,程序設(shè)計自由度大,有很好的可重用性,可移植性等特點。</p><p> 由于現(xiàn)在單片機的發(fā)展已經(jīng)達到了很高的水平,內(nèi)部的各種資源相當(dāng)?shù)呢S富,CPU的處理速度非常的快。用C語言來控制單片機無疑是一個理想的選擇。所以在本設(shè)計中采用C語言編寫軟件程序。</p><p> 3.2 硬件電路的設(shè)計</p><p> 3.2.1 輸入電
19、路模塊設(shè)計</p><p> 電壓測量原理如圖所示,電壓輸入到LM358的正相端。最高輸入電壓可到5V ,使輸入電壓處于AD量程范圍。LM358 構(gòu)成一個電壓跟隨器,起到隔離前后通道的作用,其較低的輸出電阻還可以提高帶負(fù)載能力,輸出端 接入ADC。</p><p> 由于該設(shè)計精度要達到0.01mV左右,所以我們加入了LM358的放大器,來放大較小的被測電壓,輸入到AD轉(zhuǎn)換器中,再經(jīng)過
20、單片機處理從液晶上顯示出來。</p><p> 如圖所示,是由LM358放大器組成的,LM358 內(nèi)部包括有兩個獨立的、高增益、內(nèi)部頻率補償?shù)碾p運算放大器,適合于電源電壓范圍很寬的單電源使用,也適用于雙電源工作模式,在推薦的工作條件下,電源電流與電源電壓無關(guān)。它的使用范圍包括傳感放大器、直流增益模塊和其他所有可用單電源供電的使用運算放大器的場合。</p><p> 電容C5是阻容濾波,
21、為了使得信號更穩(wěn)定。</p><p> 3.2.2 LM7805穩(wěn)壓電源電路介紹</p><p> 用lm78/lm79系列三端穩(wěn)壓IC來組成穩(wěn)壓電源所需的外圍元件很少,電路內(nèi)部有過流、過熱和調(diào)整管的保護電路,使用方便、可靠,而且價格低廉。該系列集成穩(wěn)壓IC型號中的lm78或lm79后面的數(shù)字代表此三端集成穩(wěn)壓電路的輸出電壓。因為三端固定集成穩(wěn)壓電路的使用方便,電子制作中經(jīng)常采用。&l
22、t;/p><p> 這是一個輸出正5V直流電壓的穩(wěn)壓電源電路。IC采集成穩(wěn)壓器lm7805,C4為輸出端濾波電容,D1為輸入反向保護。</p><p> 3.2.3 顯示模塊電路設(shè)計</p><p> 顯示模塊的選擇關(guān)系到整個系統(tǒng)設(shè)計的功能多少,我們只需要顯示最后電壓的數(shù)字值和電壓的單位,根據(jù)各種顯示器件的特點:數(shù)碼管只能顯示數(shù)字,不能顯示單位字符,不符合本設(shè)計的
23、要求。而點陣顯示器件驅(qū)動顯示軟件程序編寫麻煩,占用的引腳相對也較多。也不是理想的顯示器件。所以在本設(shè)計中,我們考慮用液晶顯示器件,雖然12864液晶比1602液晶的功能強,不過在價格方面卻貴了好多。而1602液晶也足夠滿足本設(shè)計的需要。因此,在本設(shè)計實驗我們選擇1602液晶顯示器件。</p><p> 1602LCD分為帶背光和不帶背光兩種,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,1602液晶模塊內(nèi)
24、部的字符發(fā)生存儲器有存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號等,每一個字符都有一個固定的代碼,比如大寫的阿拉伯?dāng)?shù)字“8”的代碼是00111000B(38H),顯示時模塊把地址38H中的點陣字符圖形顯示出來,我們就能看到數(shù)字“8”。LCD1602與單片機接口如圖所示。</p><p> GND為電源地,VCC接5V電源正極,V0為液晶顯示器對比度調(diào)整端,接正電源時對比
25、度最弱,接地電源時對比度最高(對比度過高時則會產(chǎn)生“鬼影”,使用時則可以通過一個10K的電位器調(diào)整對比度)。</p><p> 通過RW的高電平時讀取輸入電壓的數(shù)字信號,再經(jīng)過RW的低電平進行寫操作,在LCD上顯示出來。</p><p> RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。E(或EN)端為使能(enable)端。D0~D7與單片機的P0端口相接。&l
26、t;/p><p> 3.2.4 A/D轉(zhuǎn)換設(shè)計</p><p> 3.2.4.1 A/D電路的介紹和選擇</p><p> 在該設(shè)計中,模數(shù)(A/D)轉(zhuǎn)換模塊是一個非常重要的模塊,它關(guān)系到最后數(shù)字電壓表電壓值的精確度。所以,A/D芯片的選擇是設(shè)計過程中一個很重要的環(huán)節(jié)。</p><p> 模數(shù)轉(zhuǎn)換器即A/D轉(zhuǎn)換器,或簡稱ADC,通常是指一
27、個將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號的電子元件。通常的模數(shù)轉(zhuǎn)換器是將一個輸入模擬電壓信號轉(zhuǎn)換為一個輸出的數(shù)字信號。模數(shù)轉(zhuǎn)換器最重要的參數(shù)是轉(zhuǎn)換的精度,通常用輸出的數(shù)字信號的位數(shù)的多少表示。轉(zhuǎn)換器能夠準(zhǔn)確輸出的數(shù)字信號的位數(shù)越多,表示轉(zhuǎn)換器能夠分辨輸入信號的能力越強,轉(zhuǎn)換器的性能也就越好。A/D轉(zhuǎn)換一般要經(jīng)過采樣,保持,量化及編碼4個過程。在實際電路中,有些過程是合并進行的,如采樣和保持,量化和編碼在轉(zhuǎn)換過程中是同時實現(xiàn)的。</p>
28、<p> ADC0832是8腳雙列直插式雙通道A/D轉(zhuǎn)換器,能分別對兩路模擬信號實現(xiàn)?!獢?shù)轉(zhuǎn)換,可以用在單端輸入方式和差分方式下工作。ADC0832采用串行通信方式,通過DI 數(shù)據(jù)輸入端進行通道選擇、數(shù)據(jù)采集及數(shù)據(jù)傳送。8位的分辨率(最高分辨可達256級),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。具有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強。
29、獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。ADC0832是8位精度,在本設(shè)計中,為了減少數(shù)字電壓表的誤差率,在同類比的AD轉(zhuǎn)換器中,ADC0832性價比較高,于是我就選擇了ADC0832作為這次設(shè)計的AD轉(zhuǎn)換器。</p><p> 3.2.4.2 ADC0832與單片機的接口電路</p><p> CH0、CH1,是ADC0832的兩個通道,在ADC0832的工作時,被
30、測的電壓進行通道選擇進入CH0或者CH1通道,ADC0832采用串行通信方式,通過DI 數(shù)據(jù)輸入端進行通道選擇、數(shù)據(jù)采集及數(shù)據(jù)傳送。CS,CLK,DI,DO四個是與單片機P3接口相連,只有在使能端CS為低電平時,ADC0832才開始工作,此時處理器向AD傳送時鐘信號,而根據(jù)DI和DO來選擇需要通道的信號,傳入單片機處理和保存。</p><p> 在第一個時鐘脈沖的下降之前DI端必須是高電平,表示開始信號。在第二
31、、三個脈沖下將之前DI端應(yīng)輸入兩個數(shù)據(jù)用于選擇通道功能。 </p><p> 當(dāng)此兩個數(shù)據(jù)為“1”、“0”時,只對CH0 進行單通道轉(zhuǎn)換。當(dāng)兩個數(shù)據(jù)為“1”、“1”時,只對CH1進行單通道轉(zhuǎn)換。當(dāng)兩個數(shù)據(jù)為“0”、“0”時,將CH0作為正輸入端IN+,CH1作為負(fù)輸入端IN-進行輸入。當(dāng)兩位數(shù)據(jù)為“0”、“1”時,將CH0作為負(fù)輸入端IN-,CH1 作為正輸入端IN+進行輸入。到第三個脈沖的下
32、降之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數(shù)據(jù)輸出DO進行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個脈沖下降沿開始由DO端輸出轉(zhuǎn)換數(shù)據(jù)最高位Data7,隨后每一個脈沖的下降沿DO端輸出下一個數(shù)據(jù)。直到第11個脈沖時發(fā)出最低位數(shù)據(jù)Data0,一個字節(jié)的數(shù)據(jù)輸出就完成了。也正是從此位開始輸出下一個相反字節(jié)的數(shù)據(jù),即從第11個字節(jié)的下降沿輸出Data0。隨后輸出8位數(shù)據(jù),到第19 個脈沖時數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D轉(zhuǎn)換的結(jié)束。最后將
33、CS置高電平停用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進行處理就可以了。</p><p> 作為單通道模擬信號輸入時ADC0832的輸入電壓是0—5V且8位分辨率時的電壓精度為19.53mV,即(5/256)V。如果作為由IN+與IN-輸入的輸入時,可是將電壓值設(shè)定在某一個較大范圍之內(nèi),從而提高轉(zhuǎn)換的寬度。但值得注意的是,在進行IN+與IN-的輸入時,如果IN-的電壓大于IN+的電壓則轉(zhuǎn)換后的數(shù)據(jù)結(jié)果始終為00H。</
34、p><p> 3.2.5 單片機模塊的簡介</p><p> 單片機是指一個集成在一塊芯片上的完整計算機系統(tǒng),具有一個完整計算機所需要的大部分部件:CPU,內(nèi)存,總線系統(tǒng)等。而目前常用的單片機的8位有51系列單片機,AVR單片機,PIC單片機。</p><p> 應(yīng)用最廣的8位單片機還是intel的51系列單片機。51系列單片機的特點是:硬件結(jié)構(gòu)合理,指令系統(tǒng)規(guī)范
35、,加之生產(chǎn)歷史悠久,世界有許多芯片公司都買了51的芯片核心專利技術(shù),并在其基礎(chǔ)上擴充其性能,使得芯片的運行速度變得更快,性價比更高。</p><p> 我們在本次設(shè)計中選擇了89S51芯片,正因為具有功能強、體積小、成本低、功耗小等特點,所以它可單獨地完成現(xiàn)代工業(yè)控制所要求的智能化控制功能,能在軟件的控制下準(zhǔn)確、迅速、高效地完成程序設(shè)計者事先規(guī)定的任務(wù)。</p><p> 89S51是
36、一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51 指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89S51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p> 3.2.5.1 單片機小系統(tǒng)</p>&
37、lt;p> 單片機最小系統(tǒng)包括晶振電路,電源。在此模塊中,單片機的晶振是12MHZ。P1端口與AD轉(zhuǎn)換器連接,RS、RW、EN和P0端口與1602LCD連接。</p><p> 被測電壓被AD轉(zhuǎn)換后從P1端口輸入,由單片機進行數(shù)據(jù)的采集然后保存在RAM中。再經(jīng)過單片機系統(tǒng)的軟件程序編寫,適合1602LCD的輸入,則通過P1端口輸出,在1602LCD上顯示出來被測的電壓。</p><p
38、> 3.2.5.2 89S51單片機的基本組成</p><p> ?。?)一個8位的微處理器(CPU)。</p><p> ?。?)片內(nèi)256字節(jié)數(shù)據(jù)存儲器RAM/SFR,用以存放可以讀/寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù)等。</p><p> (3)片內(nèi)4KB程序存儲器Flash ROM,用以存放程序、一些原始數(shù)據(jù)和表格。</p&
39、gt;<p> ?。?)4個8位并行I/O端口P0-P3,每個端口既可以用作輸入,也可以用作輸出。</p><p> ?。?)兩個16位的定時器/計數(shù)器,每個定時器/計數(shù)器都可以設(shè)置成計數(shù)方式。</p><p> ?。?)具有5個中斷源、兩個中斷優(yōu)先級的中斷控制系統(tǒng)。</p><p> (7)一個全雙工UART的串行I/O口,用于實現(xiàn)單片機之間或單片
40、機與PC機之間的串行通信。</p><p> (8)片內(nèi)振蕩器和時鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。</p><p> (9)具有節(jié)電工作方式,即休閑方式和掉電方式。</p><p> 以上各個部分通過片內(nèi)八位數(shù)據(jù)總線相連接。</p><p> 3.2.5.3 89S51引腳及其功能</p><p>
41、 (1)XTAL1(19腳):振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。</p><p> (2)XTAL2(18腳):振蕩器反相放大器的輸出端。</p><p> (3)RST(9腳):復(fù)位輸入,當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。</p><p> ?。?)P0口(39~32腳):P0口是一個漏極開路的8位準(zhǔn)雙向I/O端口。作
42、為漏極開路的輸出端口,每位能驅(qū)動8個LS型TTL負(fù)載。當(dāng)P0口作為輸入口使用時,應(yīng)先向口鎖存器寫入全1,此時P0口的全部引腳浮空,可作為高阻抗輸入。</p><p> ?。?)P3口(10~17腳):P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O多功能口。P3口輸出緩沖器可驅(qū)動4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口,此時,被外部拉低的P3口將用上拉電阻輸出電流。當(dāng)CPU不
43、對P3口進行SFR尋址訪問時,即用作第二功能輸出/輸入線時,由內(nèi)部硬件使鎖存器Q置1。</p><p> 整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處低電平10ms來完成。在芯片擦除操作中,代碼陳列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。此外,89S51設(shè)有穩(wěn)態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器
44、,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復(fù)位為止。 </p><p> 3.3系統(tǒng)軟件的設(shè)計</p><p> 本設(shè)計是硬件電路和軟件編程相結(jié)合的設(shè)計方案,選擇合適的編程語言是一個重要的環(huán)節(jié)。在單片機的應(yīng)用系統(tǒng)程序設(shè)計時,常用的是匯編語言和C語言。匯編語言的特點是占用內(nèi)存單元少,執(zhí)行效率高。執(zhí)行速度快。但它依賴于計算機
45、硬件,程序可讀性和可移植性比較差。而C語言雖然執(zhí)行效率沒有匯編語言高,但語言簡潔,使用方便,靈活,運算豐富,表達化類型多樣化,數(shù)據(jù)結(jié)構(gòu)類型豐富,具有結(jié)構(gòu)化的控制語句,程序設(shè)計自由度大,有很好的可重用性,可移植性等特點。</p><p> 由于現(xiàn)在單片機的發(fā)展已經(jīng)達到了很高的水平,內(nèi)部的各種資源相當(dāng)?shù)呢S富,CPU的處理速度非常的快。用C語言來控制單片機無疑是一個理想的選擇。所以在本設(shè)計中采用C語言編寫軟件程序。&
46、lt;/p><p> 3.3.1主程序的設(shè)計</p><p> 初始化中,主要針對89S51、ADC0832的管腳和1602LCD液晶的位選進行初始化的設(shè)置。</p><p> 利用公式VOT=(unsigned int)((unsigned long)val*5000/255);得出數(shù)據(jù)顯示在液晶顯示器上的第一行;利用VAL= GetVal0832(1);得出的
47、數(shù)據(jù)顯示在液晶顯示器上的第二行。</p><p><b> 主程序:</b></p><p> void main()</p><p><b> {</b></p><p> uchar val;</p><p><b> init();</b>
48、;</p><p><b> while(1)</b></p><p><b> {</b></p><p> val = GetVal0832(1);</p><p> Vot = (unsigned int)((unsigned long)val*5000/255);</p>
49、<p><b> //顯示電壓</b></p><p> WriteChar(0,0,'V');</p><p> WriteChar(1,0,'O');</p><p> WriteChar(2,0,'T');</p><p> WriteCha
50、r(3,0,':');</p><p> WriteChar(4,0,(Vot%10000)/1000+0x30);</p><p> WriteChar(5,0,'.');</p><p> WriteChar(6,0,(Vot%1000)/100+0x30);</p><p> WriteChar(
51、7,0,(Vot%100)/10+0x30);</p><p> WriteChar(8,0,(Vot%10)+0x30);</p><p> WriteChar(0,1,'V');</p><p> WriteChar(1,1,'A');</p><p> WriteChar(2,1,'L
52、39;);</p><p> WriteChar(3,1,':');</p><p> WriteChar(4,1,val/1000+0x30);</p><p> WriteChar(5,1,(val%1000)/100+0x30);</p><p> WriteChar(6,1,(val%100)/10+0x30)
53、;</p><p> WriteChar(7,1,(val%10)+0x30);</p><p> delay(10);</p><p><b> }</b></p><p><b> }</b></p><p> 3.3.2 各子程序的設(shè)計</p>
54、<p> 3.3.2.1 A/D程序的流程圖</p><p> 為了高速有效的實現(xiàn)通信,我們采用匯編語言編寫接口程序。由于ADC0832的數(shù)據(jù)轉(zhuǎn)換時間僅為32μS,所以A/D轉(zhuǎn)換的數(shù)據(jù)采樣頻率可以很快,從而也保證的某些場合對A/D轉(zhuǎn)換數(shù)據(jù)實時性的要求。數(shù)據(jù)讀取程序以子程序調(diào)用的形式出現(xiàn),方便了程序的移植。</p><p> 程序占用資源有累加器A,工作寄存器R7,通用寄存器
55、B和特殊寄存器CY。通道功能寄存器和轉(zhuǎn)換值共用寄存器B。在使用轉(zhuǎn)換子程序之前必須確定通道功能寄存器B的值,其賦值語句為“MOV B,#data”(00H~03H)。運行轉(zhuǎn)換子程序后的轉(zhuǎn)換數(shù)據(jù)值被放入B中。子程序退出后即可以對B中數(shù)據(jù)處理。</p><p> 3.3.2.2顯示程序的流程圖</p><p> LCD進行初始化,從通電開始延時,先經(jīng)過判忙后再進行功能設(shè)置,過一段時間后可以設(shè)
56、置顯示狀態(tài)再經(jīng)過延時清屏后才可以設(shè)置輸入方式,具體實現(xiàn)過程如下圖所示:</p><p> LCD顯示程序的設(shè)計一般先要確定LCD的初始化、光標(biāo)定位、確定顯示字符后,顯示程序流程圖如下:</p><p><b> 總結(jié)與致謝</b></p><p> 目前電子測量設(shè)備在性能、測試功能、工藝結(jié)構(gòu)等各方面都取得了巨大的發(fā)展,其研制和生產(chǎn)正向著系
57、統(tǒng)化、數(shù)字化、高性能、多功能、快速、小型等方面發(fā)展。更不用說電壓的測量。擁有先進的科學(xué)實驗手段,這是科學(xué)技術(shù)現(xiàn)代化的一個重要標(biāo)志,而一個國家電子測量水平的高低,往往是反映這個國家科技水平的重要方面。所以,我們必須努力提高我們的電子測量技術(shù),爭取早日達到國際先進水平[4]。</p><p> 傳統(tǒng)的指針式電壓表功能單一、精度低,已經(jīng)滿足不了現(xiàn)在時代的需求,而本次設(shè)計設(shè)計的系統(tǒng)具有精度高、速度快、讀數(shù)方便、抗干擾能
58、力強、可擴展性強、集成方便,還可與PC進行實時通信等優(yōu)點,但同時存在一些不足,比如采樣緩慢,難以操作等缺點。</p><p> 單片機的應(yīng)用如今已經(jīng)是在工業(yè),電子等方面展示出了它的優(yōu)越性,利用單片機在設(shè)計電路逐漸成了趨勢,它與外圍電路再加上軟件程序就可以構(gòu)建任意的產(chǎn)品,使得本設(shè)計成為現(xiàn)實。隨著單片機的日益發(fā)展,它必將在未來顯示出更大的活力,為電子設(shè)計更多精彩。對于數(shù)字電壓表而言,功能將會越來越強大,以后一定要加
59、強單片機知識的學(xué)習(xí)。</p><p> 通過本次課程設(shè)計,使我對單片機及數(shù)模電等知識的掌握和理解有了進一步加深,鞏固了我在《單片機原理及應(yīng)用B》課程中所學(xué)的基本理論知識和實驗技能,使我對《單片機原理及應(yīng)用B》課程有了更深入的了解,同時對《數(shù)字電子技術(shù)》、《模擬電子技術(shù)》等課程加深了理解,進一步激發(fā)了我對所學(xué)專業(yè)學(xué)習(xí)的興趣;提高了我的認(rèn)識和理解以及實踐能力。</p><p> 在設(shè)計的過
60、程和設(shè)計說明書的撰寫過程中,高老師給予了我熱心的幫助和大力的支持,給我提了諸多的寶貴意見,拓寬了我的思路。在此我向老師致以崇高的敬意和衷心的感謝!</p><p> 在我的學(xué)習(xí)過程中,張老師,胡老師等其它老師也給了我耐心的指導(dǎo)和幫助。我在此對各位老師表示誠摯的感謝!</p><p><b> 參考文獻</b></p><p> [1] 王
61、珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社.2006.</p><p> [2] 蔣煥文,孫續(xù)編著.電子測量.第二版[M].北京:中國計量出版社,1988. [3] 楊吉祥,詹宏英編著.電子測量技術(shù)基礎(chǔ)[M].南京:東南大學(xué)出版社,1999. [4] 陳杰美,古天祥編.電子儀器[M].北京:國防工業(yè)出版社,1986. [5] 張乃
62、國編,電子測量技術(shù)[M].北京:人民郵電出版社,1985. [6] 劉君華編著.現(xiàn)代檢測技術(shù)與測試系統(tǒng)設(shè)計[M].西安:西安交通大學(xué)出版,1999</p><p> [7] 李廣第. 單片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1999. </p><p> [8]徐惠民、安德寧. 單片微型計算機原理接口與應(yīng)用.[M]. 北京:北京郵電大學(xué)出版社,1996<
63、;/p><p> [9]何立民.中一片機高級教程[M].北京:北京航空航天大學(xué)出版社.2000.</p><p> [10]徐江海.中一片機實用教程[M]北京:機械工業(yè)出版社,2006.</p><p> [11]康華光,陳大欽.電子技術(shù)基礎(chǔ)(模擬部分) [M]北京:i}}等教育出版社,1999.</p><p> [12]孟慶浩,翟振鐸
64、,孫冰A/ D轉(zhuǎn)換器MC 14433實際應(yīng)用中若干問題的探討[J].天津理工學(xué)院學(xué)報,1996.</p><p> 附錄一 系統(tǒng)整體電路圖</p><p> 附錄二 A/D轉(zhuǎn)換電路的程序</p><p> #include<reg51.h></p><p> #include <intrins.h><
65、/p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p><b> //定義液晶接口</b></p><p> sbit rs=P2^0;</p><p> sbit lcden=P2^2;&
66、lt;/p><p> sbit rw = P2^1;</p><p> //ADC0832連接端口</p><p> sbit ADC0832_CLK = P1^3;</p><p> sbit ADC0832_DO= P1^5;</p><p> sbit ADC0832_DI= P1^4;</p&
67、gt;<p> sbit ADC0832_CS = P1^2;</p><p> uint Vot = 0;</p><p> // 讀ADC0832指定通道AD轉(zhuǎn)換數(shù)值</p><p> uchar GetVal0832(uchar channel)</p><p><b> {</b><
68、/p><p> uchar i,dat=0; // 讀到的數(shù)據(jù),MSB FIRST DATA</p><p> bit SGL_DIF,ODD_SIGN; // 通道選擇信號</p><p> switch(channel)</p><p> { case 1:SGL_DIF=1;ODD_SIGN=0;bre
69、ak; // 選單通道</p><p> case 2:SGL_DIF=1;ODD_SIGN=1;break; // 選單通道</p><p> case 3:SGL_DIF=0;ODD_SIGN=0;break; // CH0為+,CH1為-</p><p> case 4:SGL_DIF=0;ODD_SIGN=1;break; // CH0為-,CH1為+
70、</p><p> default:break; // 通道選擇錯誤</p><p><b> }</b></p><p> ADC0832_CS=1; // 片選無效</p><p> // 一個無效時鐘周期</p><p> ADC0832_CLK=1
71、;</p><p><b> _nop_();</b></p><p> ADC0832_CLK=0;</p><p><b> _nop_();</b></p><p> ADC0832_CS=0; // 片選有效,開始AD轉(zhuǎn)換</p><p> // 傳S
72、TART BIT 信號</p><p> ADC0832_CLK=0;</p><p><b> _nop_();</b></p><p> ADC0832_DI=1; // START BIT</p><p> ADC0832_CLK=1; //上升沿鎖住START BIT信號</p>
73、<p> _nop_(); </p><p> // 傳通道選擇信號</p><p> ADC0832_CLK=0;</p><p><b> _nop_();</b></p><p> ADC0832_DI=SGL_DIF;</p><p> ADC0832_CLK=1;
74、 // 上升沿鎖住SGL/DIF信號</p><p><b> _nop_();</b></p><p> ADC0832_CLK=0;</p><p><b> _nop_();</b></p><p> ADC0832_DI=ODD_SIGN;</p><p>
75、; ADC0832_CLK=1; // 上升沿鎖住ODD_SIGN信號</p><p><b> _nop_();</b></p><p> ADC0832_CLK=0; // 此下降沿開始轉(zhuǎn)換,開始讀取數(shù)值</p><p><b> _nop_();</b></p><p> /
76、/ 讀取AD轉(zhuǎn)換數(shù)值</p><p> for(i=0;i<8;i++)</p><p><b> { </b></p><p> ADC0832_CLK=1; // CLK為1時,DO肯定保持在穩(wěn)定態(tài)</p><p> _nop_(); // 故此時可讀出數(shù)據(jù)</p><
77、;p> if(ADC0832_DO)</p><p><b> dat++;</b></p><p> dat=dat<<1;</p><p> ADC0832_CLK=0;</p><p><b> _nop_();</b></p><p>&l
78、t;b> }</b></p><p><b> //釋放總線</b></p><p> ADC0832_CLK=1;</p><p><b> _nop_();</b></p><p> ADC0832_CLK=0;</p><p><b&
79、gt; _nop_();</b></p><p> ADC0832_CS=1; //讀取完畢,片選無效</p><p> return dat;</p><p><b> }</b></p><p> 附錄三 1602LCD顯示模塊的程序</p><p> void d
80、elay(uint x)</p><p><b> {</b></p><p><b> uint a,b;</b></p><p> for(a=x;a>0;a--)</p><p> for(b=10;b>0;b--); </p><p><b&
81、gt; }</b></p><p> //LCD1602寫命令</p><p> void write_com(uchar com)</p><p><b> {</b></p><p><b> P0=com;</b></p><p><b>
82、; rs=0;</b></p><p><b> rw=0;</b></p><p><b> lcden=0;</b></p><p> delay(10);</p><p><b> lcden=1;</b></p><p>
83、 delay(10);</p><p><b> lcden=0;</b></p><p><b> }</b></p><p> //LCD1602寫數(shù)據(jù)</p><p> void write_date(uchar date)</p><p><b>
84、 {</b></p><p><b> P0=date;</b></p><p><b> rs=1;</b></p><p><b> rw = 0;</b></p><p><b> lcden=0;</b></p>
85、<p> delay(10);</p><p><b> lcden=1;</b></p><p> delay(10);</p><p><b> lcden=0;</b></p><p><b> }</b></p><p>
86、//LCD1602初始化</p><p> void init()</p><p><b> {</b></p><p> delay(200);</p><p> write_com(0x38);</p><p> delay(20);</p><p> wr
87、ite_com(0x38);</p><p> delay(20);</p><p> write_com(0x38);</p><p> delay(20);</p><p> write_com(0x0c);</p><p> delay(20);</p><p> write_
88、com(0x06);</p><p> delay(20);</p><p> write_com(0x01);</p><p> delay(20);</p><p><b> }</b></p><p> //LCD1602指定位置顯示字符</p><p>
89、 void WriteChar(uchar pox_x,uchar pox_y,uchar chr)</p><p><b> {</b></p><p> uchar addr=0;</p><p> if( pox_y==0 )</p><p><b> {</b></p>
90、<p> addr = pox_x + 0x80;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> addr = pox_x + 0xC0;</p>
91、<p><b> }</b></p><p> write_com(addr);</p><p> delay(10);</p><p> write_date(chr);</p><p> delay(10);</p><p><b> }</b>&l
92、t;/p><p> //LCD1602指定位置顯示數(shù)值</p><p> void WriteNum(uchar pox_x,uchar pox_y,uint dat,uchar zero)</p><p><b> {</b></p><p> uchar b[4];</p><p> u
93、char i,j=0;</p><p> if(dat<10000)</p><p><b> {</b></p><p> b[0] = (dat%10000)/1000;</p><p> b[1] = (dat%1000)/100;</p><p> b[2] = (dat
94、%100)/10;</p><p> b[3] = dat%10;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> b[0] = dat/10000;&
95、lt;/p><p> b[1] = (dat%10000)/1000;</p><p> b[2] = (dat%1000)/100;</p><p> b[3] = (dat%100)/10;</p><p><b> }</b></p><p> for(i=0;i<4;i+
96、+)</p><p><b> {</b></p><p> if(b[i]==0)</p><p><b> {</b></p><p> if(zero==0)</p><p><b> {</b></p><p>
97、 WriteChar(pox_x+j,pox_y,b[i]+0x30);</p><p><b> j++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b>&l
98、t;/p><p><b> {</b></p><p> WriteChar(pox_x+j,pox_y,b[i]+0x30);</p><p><b> j++;</b></p><p><b> }</b></p><p><b>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的直流電壓檢測系統(tǒng)設(shè)計課程設(shè)計
- 基于單片機的直流電壓表的課程設(shè)計
- 單片機直流電壓采集與顯示課程設(shè)計
- 單片機課程設(shè)計-- 簡易直流電壓表的設(shè)計
- 單片機課程設(shè)計-直流電機
- 單片機課程設(shè)計---基于單片機的直流電機控制
- 課程設(shè)計--單片機直流電機調(diào)速系統(tǒng)設(shè)計
- 單片機課程設(shè)計--單片機控制直流電機的轉(zhuǎn)動
- 基于avr單片機的數(shù)控直流電壓源設(shè)計
- 單片機課程設(shè)計---基于單片機直流電機測速及其控制系統(tǒng)
- 基于51單片機控制的直流電壓檢測系統(tǒng)開題報告
- 基于51單片機控制的直流電壓檢測系統(tǒng)開題報告
- 課程設(shè)計--基于51單片機的數(shù)控直流電源設(shè)計
- 單片機微型直流電機控制系統(tǒng)課程設(shè)計
- 單片機微型直流電機控制系統(tǒng)課程設(shè)計
- 單片機課程設(shè)計---可調(diào)直流電機設(shè)計
- 單片機課程設(shè)計論文--直流電機調(diào)速
- 單片機課程設(shè)計------基于89c51單片機的直流電機控制系統(tǒng)設(shè)計
- 課程設(shè)計--基于單片機的直流電機位置控制系統(tǒng)設(shè)計
- 課程設(shè)計---基于單片機的直流電機測速、調(diào)速及顯示系統(tǒng)設(shè)計
評論
0/150
提交評論