久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13998|回復: 1
打印 上一主題 下一主題
收起左側

51單片機+ADC0832數字電壓表設計 0-5v,含有仿真與報告和代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:445903 發表于 2018-12-22 16:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目錄
1 數字電壓表的簡介
1.1數字電壓表簡介
1.2數字電壓表的的背景與意義
2 設計總體方案
2.1 設計要求
2.2 設計思路
2.3 設計方案
3 硬件電路設計              5
3.1 A/D轉換模塊              5
3.2 單片機系統              8
3.3 復位電路和時鐘電路              10
3.4 LCD顯示系統設計              11
3.5 總體電路設計              13
4 程序設計              14
4.1 程序設計總方案              14
4.2 系統子程序設計              14
5 仿 真              16
5.1軟件調試              16
5.2顯示結果及誤差分析              16
5.2.1 顯示結果
5.2.2 誤差分析
結 論
參考文獻
附 錄            

1 數字電壓表的簡介1.1數字電壓表簡介
在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。數字電壓表簡稱DVM,它是采用數字化測量技術,把連續的模擬量轉換成不連續、離散的數字形式并加以顯示的儀表。由于數字式儀器具有讀數準確方便、精度高、誤差小、測量速度快等特而得到廣泛應用。
    傳統的指針式刻度電壓表功能單一,進度低,容易引起視差和視覺疲勞,因而不能滿足數字化時代的需要。采用單片機的數字電壓表,將連續的模擬量如直流電壓轉換成不連續的離散的數字形式并加以顯示,從而精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC實時通信。數字電壓表是諸多數字化儀表的核心與基礎。以數字電壓表為核心,可以擴展成各種通用數字儀表、專用數字儀表及各種非電量的數字化儀表。目前,由各種單片機和A/D轉換器構成的數字電壓表作全面深入的了解是很有必要的。
1.2數字電壓表的的背景與意義
電壓表已經有100多年的發展歷史,雖然不斷改進與完善,仍然無法滿足現代電子測量的需求,近二十年,微電子技術,計算機技術,集成技術,網絡技術等高新技術得到了迅猛發展。這一背景和形勢,不斷地向儀器儀表提出了更高、更新、更多的要求,如要求速度更快、靈敏度更高、穩定性更好、樣品量更少、遙感遙測更遠距、使用更方便、成本更低廉、無污染等。同時也為儀器儀表科技與產業的發展提供了強大的推動力,并成了儀器儀表進一步發展的物質、知識和技術基礎。
數字電壓表(Digital Voltmeter簡稱DVM)自1952年問世以來,顯示出強大的生命力,現已成為在電子測量領域中應用最廣泛的一種儀器。數字電壓表可以顯示清晰、直觀,讀數準確,準確度高,分辨力強,測量范圍廣,擴展能力強,測量速度快,輸入阻抗高,集成度高,微功耗和抗干擾能力強等優點,獨占電壓表產品的熬頭。
    DVM的高速發展,使它已成為實現測量自動化、提高工作效率不可缺少的儀表,數字化是當前計量儀器發展的主要方向之一,而高準度的DC-DVC的出現,又使DVM進入了精密標準測量領域。隨著現代化技術的不斷發展,數字電壓表的功能和種類將越來越強,越來越多,其使用范圍也會越來越廣泛。采用智能化的數字儀器也將是必然的趨勢,它們將不僅能提高測量準確度,而且能提高電測量技術的自動化程序,可以擴展成各種通用數字儀表、專用數字儀表及各種非電量的數字化儀表(如:溫度計、濕度計、酸度計、重量、厚度儀等),幾乎覆蓋了電子電工測量、工業測量、自動化儀表等各個領域。從而提高計量檢定人員的工作效。
    目前數字電壓表的內部核心部件是A/D轉換器,轉換器的精度很大程度上影響著數字電壓表的準確度,本課程設計A/D轉換器采用ADC0832對輸人模擬信號進行轉換,控制核心STC89C52再對轉換的結果進行運算和處理,最后驅動輸出裝置顯示數字電壓信號。


2 設計總體方案
    該設計主要由三個模塊組成:A/D轉換模塊,數據處理模塊及顯示模塊。A/D轉換主要由芯片ADC0832來完成,它負責把采集到的模擬量轉換為相應的數字量在傳送到數據處理模塊;數據處理則由芯片STC89C52來完成,其負責把ADC0832傳送來的數字量經過一定的數據處理;產生相應的顯示碼送到顯示模塊進行顯示。
2.1 設計要求
1、以MCS-52系列單片機為核心器件,組成一個簡單的直流數字電壓表。
2、采用1路模擬量輸入,能夠測量0-5V之間的直流電壓值。
3、電壓顯示采用LCD1602液晶屏顯示,至少能夠顯示兩位小數。
4、所用的元件較少,成本低,且測量精度和可靠性較高。
2.2 設計思路
1、根據設計要求,選擇STC89C52單片機為核心控制器件。
2、A/D轉換采用ADC0832實現,與單片機的接口P3的部分口連接。
3、電壓顯示采用LCD1602液晶屏顯示。
4、LCD1602數據傳輸接口是單片機的P0口,單片機P0需要接上拉電阻。為方便移植,只需將LCD1602三個控制端口與P2口連接即可。
2.3 設計方案
本設計硬件電路設計由6個部分組成:A/D轉換電路,STC89C52單片機系統,LCD顯示系統、時鐘電路、復位電路以及測量電壓輸入電路。總體硬件電路框圖如圖2.1所示。

圖2.1 系統硬件設計框圖


3 硬件電路設計
3.1 A/D轉換模塊
    現實世界的物理量都是模擬量,能把模擬量轉化成數字量的器件稱為模/數轉換器(A/D轉換器),A/D轉換器是單片機數據采集系統的關鍵接口電路,按照各種A/D芯片的轉化原理可分為逐次逼近型,雙重積分型等等。雙積分式A/D轉換器具有抗干擾能力強、轉換精度高、價格便宜等優點。與雙積分相比,逐次逼近式A/D轉換的轉換速度更快,而且精度更高,比如ADC0809、ADC0808等,它們通常具有8路模擬選通開關及地址譯碼、鎖存電路等,它們可以與單片機系統連接,將數字量送到單片機進行分析和顯示。一個n位的逐次逼近型A/D轉換器只需要比較n次,轉換時間只取決于位數和時鐘周期,逐次逼近型A/D轉換器轉換速度快,因而在實際中廣泛使用。
(1) 逐次逼近型A/D轉換器原理
逐次逼近型A/D轉換器是由一個比較器、A/D轉換器、存儲器及控制電路組成。它利用內部的寄存器從高位到低位一次開始逐位試探比較。
轉換過程如下:
開始時,寄存器各位清零,轉換時,先將最高位置1,把數據送入A/D轉換器轉換,轉換結果與輸入的模擬量比較,如果轉換的模擬量比輸入的模擬量小,則1保留,如果轉換的模擬量比輸入的模擬量大,則1不保留,然后從第二位依次重復上述過程直至最低位,最后寄存器中的內容就是輸入模擬量對應的二進制數字量。其原理框圖如圖3.1所示:

圖3.1 逐次逼近式A/D轉換器原理圖

(2) ADC0832 主要特性
ADC0832為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據有雙數據輸出可作為數據校驗,以減少數據誤差,轉換速度快且穩定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI數據輸入端,可以輕易的實現通道功能的選擇。
(3) ADC0832的外部引腳特征
ADC0832有DIP和SOIC兩種封裝,DIP封裝的ADC0832引腳排列如圖3.2所示。各引腳說明如下:

      圖3.2ADC0832的引腳圖

● CS——片選端,低電平有效。
● CH0,CH1——兩路模擬信號輸入端。
● DI——兩路模擬輸入選擇輸入端。
● DO——模數轉換結果串行輸出端。
● CLK——串行時鐘輸入端。
● Vcc/REF——正電源端和基準電壓輸入端。
● GND——電源地。
(4) 單片機對ADC0832的控制原理
    一般情況下ADC0832與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將CS端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK提供時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1個時鐘脈沖到來之前DI端必須是高電平,表示啟動位。在第2、3個時鐘脈沖到來之前DI端應輸入2位數據用于選擇通道功能,其功能項見表3.1所示。

表3.1 功能表

    如表3.1所示,當配置位2位數據為1、0時,只對CH0 進行單通道轉換。當配置2位數據為1、1時,只對CH1進行單通道轉換。當配置2位數據為0、0時,將CH0作為正輸入端IN+,CH1作為負輸入端IN-進行輸入。當配置2位數據為0、1時,將CH0作為負輸入端IN-,CH1作為正輸入端IN+進行輸入。到第3個時鐘脈沖到來之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數據輸出DO進行轉換數據的讀取。從第4個時鐘脈沖開始由DO端輸出轉換數據最高位D7,隨后每一個脈沖DO端輸出下一位數據。直到第11個脈沖時發出最低位數據D0,一個字節的數據輸出完成。也正是從此位開始輸出下一個相反字節的數據,即從第11個時鐘脈沖輸出D0。隨后輸出8位數據,到第19個脈沖時數據輸出完成,也標志著一次A/D轉換的結束。最后將CS置高電平禁用芯片,直接將轉換后的數據進行處理就可以了,圖3.3為ADC0832時序圖。

圖3.3 ADC0832時序圖

3.2 單片機系統
(1) STC89C52性能
STC89C52是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含有4KB的可反復擦寫的只讀程序存儲器和128字節的隨機存儲器。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容,由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的STC89C52是一種高效微控制器,它為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
    STC89C52功能性能:與MCS-51成品指令系統完全兼容;4KB可編程閃速存儲器;壽命:1000次寫/擦循環數據保留時間:10年;全靜態工作:0-24MHz;三級程序存儲器鎖定;128*8B內部RAM;32個可編程I/O口線;2個16位定時/計數器;5個中斷源;可編程串行UART通道;片內震蕩器和掉電模式。
(2) STC89C52各引腳功能
STC89C52提供以下標準功能:4KB的Flash閃速存儲器,128B內部RAM,32個I/O口線,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內震蕩器及時鐘電路,同時,AT89C52可降至0Hz靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續工作,掉電方式保存RAM中的內容,但震蕩器停止工作并禁止其他所有工作直到下一個硬件復位。STC89C52采用PDIP封裝形式,引腳配置如圖3.4所示。

圖3.4 STC89C52的引腳圖

STC89C52芯片的各引腳功能為:
P0口:這組引腳共有8條,P0.0為最低位。這8個引腳有兩種不同的功能,分別適用于不同的情況,第一種情況是89C52不帶外存儲器,P0口可以為通用I/O口使用,P0.0-P0.7用于傳送CPU的輸入/輸出數據,這時輸出數據可以得到鎖存,不需要外接專用鎖存器,輸入數據可以得到緩沖,增加了數據輸入的可靠性;第二種情況是89C52帶片外存儲器,P0.0-P0.7在CPU訪問片外存儲器時先傳送片外存儲器的低8位地址,然后傳送CPU對片外存儲器的讀/寫數據。P0口為開漏輸出,在作為通用I/O使用時,需要在外部用電阻上拉。
P1口:這8個引腳和P0口的8個引腳類似,P1.7為最高位,P1.0為最低位,當P1口作為通用I/O口使用時,P1.0-P1.7的功能和P0口的第一功能相同,也用于傳送用戶的輸入和輸出數據。
P2口:這組引腳的第一功能與上述兩組引腳的第一功能相同即它可以作為通用I/O口使用,它的第一功能和P0口引腳的第二功能相配合,用于輸出片外存儲器的高8位地址,共同選中片外存儲器單元,但并不是像P0口那樣傳送存儲器的讀/寫數據。
P3口:這組引腳的第一功能和其余三個端口的第一功能相同,第二功能為控制功能,每個引腳并不完全相同,如下表3.2所示:

表3.2 P3口各位的第二功能

P3口各位
第二功能
P3.0  
RXT(串行口輸入)
P3.1  
TXD(串行口輸出)
P3.2
/INT0(外部中斷0輸入)
P3.3
/INT1(外部中斷1輸入)
P3.4
T0(定時器/計數器0的外部輸入)
P3.5
T1(定時器/計數器1的外部輸入)
P3.6
/WR(片外數據存儲器寫允許)
      P3.7
/RD(片外數據存儲器讀允許)


Vcc為+5V電源線,Vss接地。
ALE:地址鎖存允許線,配合P0口的第二功能使用,在訪問外部存儲器時,89C52的CPU在P0.0-P0.7引腳線去傳送隨后而來的片外存儲器讀/寫數據。在不訪問片外存儲器時,89C52自動在ALE線上輸出頻率為1/6震蕩器頻率的脈沖序列。該脈沖序列可以作為外部時鐘源或定時脈沖使用。
/EA:片外存儲器訪問選擇線,可以控制89C52使用片內ROM或使用片外ROM,
若/EA=1,則允許使用片內ROM, 若/EA=0,則只使用片外ROM。
/PSEN:片外ROM的選通線,在訪問片外ROM時,89C52自動在/PSEN線上產生一個負脈沖,作為片外ROM芯片的讀選通信號。
RST:復位線,可以使89C52處于復位(即初始化)工作狀態。通常89C52復位有自動上電復位和人工按鍵復位兩種。
XTAL1和XTAL2:片內震蕩電路輸入線,這兩個端子用來外接石英晶體和微調電容,即用來連接89C52片內OSC(震蕩器)的定時反饋回路。
3.3 復位電路和時鐘電路
(1) 復位電路設計
單片機在啟動運行時都需要復位,使CPU和系統中的其他部件都處于一個確定的初始狀態,并從這個狀態開始工作。MCS-51單片機有一個復位引腳RST,采用施密特觸發輸入。當震蕩器起振后,只要該引腳上出現2個機器周期以上的高電平即可確保時器件復位。復位完成后,如果RST端繼續保持高電平,MCS-51就一直處于復位狀態,只要RST恢復低電平后,單片機才能進入其他工作狀態。單片機的復位方式有上電自動復位和手動復位兩種,圖3.5是51系列單片機統常用的上電復位和手動復位組合電路,只要Vcc上升時間不超過1ms,它們都能很好的工作。

圖3-5  復位電路



圖3.5 復位電路

(2) 時鐘電路設計
單片機中CPU每執行一條指令,都必須在統一的時鐘脈沖的控制下嚴格按時間節拍進行,而這個時鐘脈沖是單片機控制中的時序電路發出的。CPU執行一條指令的各個微操作所對應時間順序稱為單片機的時序。MCS-51單片機芯片內部有一個高增益反相放大器,用于構成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路。
    本設計系統采用內部時鐘方式,利用單片機內部的高增益反相放大器,外部電路簡,只需要一個晶振和2個電容即可,如圖3.6所示。

圖3.6  時鐘電路

電路中的器件選擇可以通過計算和實驗確定,也可以參考一些典型電路的參數,電路中,電容器C1和C2對震蕩頻率有微調作用,通常的取值范圍是30±10pF,在這個系統中選擇了33pF;石英晶振選擇范圍最高可選24MHz,它決定了單片機電路產生的時鐘信號震蕩頻率,在本系統中選擇的是12MHz,因而時鐘信號的震蕩頻率為12MHz。
3.4 LCD顯示系統設計
(1) LCD的選擇
    在應用系統中,設計要求不同,使用的LCD顯示器的位數也不同,因此就生產了位數,尺寸,型號不同的LCD顯示器供選擇,在本設計中,選擇采用LCD1602液晶屏顯示。LCD1602是字符型液晶,顯示字母和數字比較方便,控制簡單,成本較低。
(2) LCD1602顯示器的管腳功能
1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.3所示。

表3.3 引腳接口說明表

編號
符號
引腳說明
編號
符號
引腳說明
1
VSS
電源地
9
D2
數據
2
VDD
電源正極
10
D3
數據
3
VL
液晶顯示偏壓
11
D4
數據
4
RS
數據/命令選擇
12
D5
數據
5
R/W
讀/寫選擇
13
D6
數據
6
E
使能信號
14
D7
數據
7
D0
數據
15
BLA
背光源正極
8
D1
數據
16
BLK
背光源負極
    第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。
(3) LCD顯示器與單片機接口設計
由于單片機的并行口不能直接驅動LCD顯示器,所以在一般情況下,必須采用專用的驅動電路芯片,使之產生足夠大的電流,顯示器才能正常工作[7]。如果驅動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅動電路長期在超負荷下運行容易損壞,因此,LCD顯示器的驅動電路設計是一個非常重要的問題。
為了簡化數字式直流電壓表的電路設計,在LCD驅動電路的設計上,可以利用單片機P0口上外接的上拉電阻來實現,即將LCD的D0-D7段顯示引腳與P0口并聯到上拉電阻之間,這樣,就可以加大P0口作為輸出口德驅動能力,使得LCD能按照正常的亮度顯示出數字。
3.5 總體電路設計
經過以上的設計過程,可設計出基于單片機的簡易數字直流電壓表硬件電路原理圖如圖3.7所示。

圖3.7 簡易數字電壓表電路圖

此電路的工作原理是:+5V模擬電壓信號通過變阻器VR1分壓后由ADC0832的IN0通道進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經過模/數轉換后,產生相應的數字量經過其輸出通道D0-D7傳送給STC89C52芯片的P1口,并且此時單片機STC89C52負責把接收到的數字量經過數據處理,產生正確的信號傳給LCD1602,LCD1602經過正確的線段顯示。此外,STC89C52還控制ADC0832的工作。其中,單片機STC89C52通過定時器中斷從P3.3輸出方波,接到ADC0832的CLOCK,P3.4發正脈沖啟動A/D轉換,并檢測A/D轉換是否完成,轉換完成后,P3.5置高從P1口讀取轉換結果送給LCD顯示出來。
數字直流電壓表的硬件電路設計完成,就可以選取相應的芯片和元器件,Proteus軟件繪制出硬件的原理,并仔細地檢查,直至形成完善的硬件原理圖。但要真正實現電路對電壓的測量和顯示的功能,還需要有相應的軟件配合,才能達到設計要求。
4 程序設計
    系統的軟件程序中主函數含有初始化程序,同時分別調用AD0832轉換程序、數據轉換程序、顯示函數,在顯示程序中包含LCD1602驅動程序。以此完成整個系統的運行。
4.1 程序設計總方案
根據模塊的劃分原則,將該程序劃分初始化模塊,A/D轉換子程序和顯示子程序,這三個程序模塊構成了整個系統軟件的主程序,如圖4.1所示。

圖4.1 數字式直流電壓表主程序框圖

4.2 系統子程序設計
(1)初始化程序
所謂初始化,是對將要用到的MCS_51系列單片機內部部件或擴展芯片進行初始工作狀態設定,初始化子程序的主要工作是設置定時器的工作模式,初值預置,開中斷和打開定時器等。
(2)顯示子程序
顯示子程序采用字符型液晶顯示,此模塊模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。
在本設計中,為了簡化硬件設計,主要采用軟件定時的方式,即用定時器0溢出中斷功能實現11μs定時,通過軟件延時程序來實現5ms的延時。
(3)A/D轉換子程序
A/D轉換子程序用來控制對輸入的模塊電壓信號的采集測量,并將對應的數值存入相應的內存單元,其轉換流程圖如圖4.2所示。

圖4.2 A/D轉換流程圖


5 仿 真5.1軟件調試
    軟件調試的主要任務是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的,可以通過仿真開發系統發現逐步改正。Proteus軟件可以對基于微控制器的設計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。Proteus支持的微處理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成單片機系統原理圖電路繪制、PCB設計,更為顯著點的特點是可以與u Visions3 IDE工具軟件結合進行編程仿真調試。
   本系統的調試主要以軟件為主,其中系統電路圖的繪制和仿真我采用的是Proteus軟件,而程序方面,采用的是C語言,用Keil軟件將程序寫入單片機。
5.2顯示結果及誤差分析5.2.1 顯示結果
  • 當IN0口輸入電壓值為0V時,顯示結果如圖5.1所示,測量誤差為0.01V。

圖5.1 輸入電壓為0V時,LCD的顯示結果


2.當IN0輸入電壓值為2.10V時,顯示結果如圖5.2所示。測量誤差為0.01V。

圖5.2輸入電壓為2.10V時,LCD的顯示結果

3. 當IN0口輸入電壓值為5.00V時,顯示結果如圖5.3。測量誤差為0V。

圖5.3 輸入電壓為5.00V時,LCD的顯示結果

5.2.2 誤差分析
通過以上仿真測量結果可得到簡易數字電壓表與“標準”數字電壓表對比測試表,如下表5.1所示:

表5.1 簡易數字電壓表與“標準”數字電壓表對比測試表

標準電壓值/V
簡易電壓表測量值/V
絕對誤差/V
0.00
0.00
0.01
0.50
0.51
0.01
1.00
1.00
0.00
1.50
1.51
0.01
2.10
2.11
0.01
2.50
2.50
0.00
3.00
3.00
0.00
3.56
3.56
0.00
4.00
4.00
0.00
5.00
5.00
0.00

    由于單片機STC89C52為8位處理器,當輸入電壓為5.00V時,ADC0832輸出數據值為255(FFH),因此單片機最高的數值分辨率為0.0196V(5/255)。這就決定了電壓表的最高分辨率只能到0.0196V,從上表可看到,測試電壓一般以0.02V的幅度變化。
    從上表可以看出,簡易數字電壓表測得的值基本上比標準電壓值偏大0-0.01V,這可以通過校正ADC0832的基準電壓來解決。因為該電壓表設計時直接用5V的供電電源作為電壓,所以電壓可能有偏差。當要測量大于5V的電壓時,可在輸入口使用分壓電阻,而程序中只要將計算程序的除數進行調整就可以了。



結 論
經過一段時間的努力,課程設計-基于單片機的簡易數字電壓表基本完成。但設計中的不足之處仍然存在。這次設計是我第一次設計電路,并用Proteus實現了仿真。在這過程中,我對電路設計,單片機的使用等都有了新的認識。通過這次設計學會了Proteus和Keilc軟件的使用方法,掌握了從系統的需要、方案的設計、功能模塊的劃分、原理圖的設計和電路圖的仿真的設計流程,積累了不少經驗。
基于單片機的數字電壓表使用性強、結構簡單、成本低、外接元件少。在實際應用工作應能好,測量電壓準確,精度高。系統功能、指標達到了課題的預期要求、系統在硬件設計上充分考慮了可擴展性,經過一定的改造,可以增加功能。本文設計主要實現了簡易數字電壓表測量一路電壓的功能,詳細說明了從原理圖的設計、電路圖的仿真再到軟件的調試。
通過本次設計,我對電子測量有了進一步的了解。無論是在硬件連接方面還是在軟件編程方面。本次設計采用了STC89C52單片機芯片,與以往的單片機相比增加了許多新的功能,使其功能更為完善,應用領域也更為廣泛。設計中還用到了模/數轉換芯片ADC0832,以前在學單片機課程時只是對其理論知識有了初步的理解。通過這次設計,對它的工作原理有了更深的理解。在調試過程中遇到很多問題,硬件上的理論知識學得不夠扎實,對電路的仿真方面也不夠熟練。
總之這次電路的設計和仿真,基本上達到了設計的功能要求。在以后的實踐中,我將繼續努力學習電路設計方面的理論知識,并理論聯系實際,爭取在電路設計方面能有所提升。

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit lcdrs=P2^4;
  6. sbit lcdrw=P2^5;
  7. sbit lcden=P2^6; //1602控制端口
  8. sbit DI=P3^4;
  9. sbit DO=P3^4;  //DI和DO與單片機共接口
  10. sbit Clk=P3^3;
  11. sbit CS=P3^5;//ADC0832控制端口
  12. uchar  dis[3]={0x00,0x00,0x00}; //顯示緩沖區
  13. uchar date=0; //AD值
  14. uchar CH;    //ADC0832通道值
  15. /*****************************************
  16. AD0832轉換程序
  17. ******************************************/
  18. uchar ADC0832(uchar CH)

  19. {
  20.     uchar i,dis0,dis1;
  21.                
  22.               Clk=0;    //拉低時鐘
  23.    DI=1;   //初始化
  24.    _nop_();
  25.               CS=0;    //芯片選定
  26.     _nop_();
  27.     Clk=1;   //拉高時鐘
  28.     _nop_();

  29.               if(CH==0)      //通道選擇
  30.     {
  31.       Clk=0;      //第一次拉低時鐘
  32.       DI=1;     //通道0的第一位
  33.       _nop_();
  34.       Clk=1;    //拉高時鐘
  35.                 _nop_();
  36.       Clk=0;    //第二次拉低時鐘,ADC0832 DI接受數據
  37.       DI=0;   //通道0的第二位
  38.       _nop_();
  39.       Clk=1;
  40.       _nop_();
  41.     }
  42.     else
  43.     {
  44.       Clk=0;
  45.       DI=1;      //通道1的第一位
  46.       _nop_();
  47.       Clk=1;
  48.       _nop_();
  49.       Clk=0;
  50.       DI=1;      //通道1的第二位
  51.       _nop_();
  52.       Clk=1;
  53.       _nop_();
  54.     }
  55.               Clk=0;  //第三次拉低時鐘,此前DI兩次賦值決定通道
  56.     DI=1;   //DI開始失效,拉高電平,便于DO數據傳輸

  57.     for(i= 0;i<8;i++)      //讀取前8位的值
  58.     {
  59.        _nop_();
  60.        dis0<<= 1;
  61.        Clk=1;   
  62.        _nop_();
  63.        Clk=0;
  64.        if (DO)
  65.           dis0|=0x01;  
  66.       else
  67.          dis0|=0x00;
  68.     }
  69.     for (i=0;i<8;i++)      //讀取后8位的值
  70.     {
  71.        dis1>>= 1;
  72.        if (DO)
  73.         dis1|= 0x80;
  74.        else
  75.         dis1|= 0x00;
  76.        _nop_();
  77.        Clk=1;
  78.        _nop_();
  79.        Clk=0;
  80.     }
  81.               if(dis0==dis1) //兩次結束數據比較,若相等
  82.                 date=dis0;    //則賦值給dat  
  83.     _nop_();
  84.     CS=1;  //釋放ADC0832
  85.     DO=1;  //拉高輸出端,方便下次通道選擇DI端有效
  86.     Clk=1;  //拉高時鐘
  87. return date;
  88. }
  89. /***********************************************
  90. 數據轉換程序
  91. 功能:將0-255級換算成0.00-5.00的電壓數
  92. ***********************************************/
  93. void convert(uchar a)
  94. {            
  95.     uint temp;       //特別注意這里需定義int型(余數將大于255)
  96.               dis[0]=a/51;     //取個位
  97.               temp=a%51;
  98.               temp=temp*10;
  99.               dis[1]=temp/51;  //取小數點后第一位
  100.               temp=temp%51;
  101.               temp=temp*10;
  102.               dis[2]=temp/51;  //取小數點后第二位
  103. }
  104. /*****************************************
  105. LCD1602驅動程序
  106. ******************************************/
  107. void delay(uchar z)
  108. {
  109.               uint x,y;
  110.               for(x=z;x>0;x--)
  111.                             for(y=122;y>0;y--);            
  112. }
  113. void write_cmd(uchar cmd)//lcd1602寫命令函數
  114. {
  115.               lcdrs=0;
  116.               lcdrw=0;    //選擇指令寄存器
  117.               lcden=1;
  118.               P0=cmd;     //寫數據
  119.               delay(5);
  120.               lcden=0;    //使能拉低
  121.               lcden=1;
  122. }
  123. void write_date(uchar date)//lcd1602寫數據函數
  124. {
  125.               lcdrs=1;
  126.               lcdrw=0;    //選擇數據寄存器
  127.               lcden=1;
  128.               P0=date;     //寫數據
  129.               delay(5);
  130.               lcden=0;    //使能拉低
  131.               lcden=1;
  132. }
  133. void init_lcd1602()//lcd1602初始化
  134. {
  135.               write_cmd(0x01);  //清屏
  136.               write_cmd(0x38);  //功能設置
  137.               write_cmd(0x0c);  //顯示設置
  138.               write_cmd(0x06);  //輸入方式從左到右
  139.               delay(1);
  140. }
  141. /*****************************************
  142. 顯示函數
  143. *****************************************/
  144. void display(void)
  145. {
  146.               uchar i;
  147.               write_cmd(0x80);
  148.               for(i=0;i<3;i++)
  149.               {
  150.                             if(i==1) write_date('.'); //第二位顯示小數點
  151.                             write_date (0x30+dis[i]);
  152.                             delay(5);
  153.               }
  154.               write_date('V');  //最后一位后顯示字符'V'
  155.             
  156. }
  157. /************************************************
  158.       主函數
  159. ***************************************************/

  160. void main(void)

  161. {
  162.    CH=0;       //選擇通道0或1
  163.   init_lcd1602();//液晶1602顯示初始化
  164.    while(1)       //主循環                             
  165.    {
  166.                             date=ADC0832(CH);//啟動ADC0832轉換并接受數據
  167.                             delay(1);
  168.                             convert(date);  //數據轉換成BCD碼
  169.                      display();      //顯示數值
  170.     }
  171. }
復制代碼

全部資料51hei下載地址:
zhc仿真與報告.rar (298.21 KB, 下載次數: 201)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:552840 發表于 2019-6-26 09:43 | 只看該作者
有沒有仿真圖的程序文件
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 啪视频在线 | 欧美成人手机在线 | 欧美毛片免费观看 | 精品欧美一区二区精品久久久 | 国产精品一区二区在线播放 | 国产精品毛片 | 亚洲一区二区三区免费视频 | 国产精品2| 狠狠色网 | 国产黄色网址在线观看 | 伊人久久国产 | 国产黄色免费网站 | 天天视频成人 | 视频在线一区二区 | 亚洲国产精品一区二区第一页 | 成人在线观看欧美 | 亚洲精品乱码久久久久久蜜桃91 | 特级毛片| 中文字幕一区二区三区在线乱码 | 一区二区三区福利视频 | 欧美一区在线看 | 欧美日韩高清一区 | www.日韩高清| 午夜手机在线视频 | 色又黄又爽网站www久久 | 欧美在线一区二区视频 | 久久91| 欧美日韩中文字幕在线 | 欧美精品欧美精品系列 | 超碰操 | 日日日操 | 先锋资源在线 | 一区二区三区国产好的精 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 久久国产精品色av免费观看 | 成人水多啪啪片 | 午夜久久av | 天堂成人国产精品一区 | 国产三级日本三级 | 日日夜夜操天天干 | 国产欧美精品一区二区色综合朱莉 |