單路電壓表c語言編程,用AT89C51單片機制作的數字電壓表

此數字電壓表,利用A/D轉換原理將被測模擬量轉換成數字量,并通過控制系統用數字方式顯示測量結果。本設計采用AT89C51單片機,ADC0809進行模/數轉換,能夠測量8路0~5V的輸入電壓值,可用四位LED數碼管輪流或單路顯示測量結果。其最小分辨率約為0.019V,測量誤差小于0.02V。

一、系統簡介

本系統分為主控電路、顯示電路、A/D轉換電路、鍵盤控制電路、電源電路及復位電路等,系統框圖如右圖所示。

二、硬件電路設計

本系統采用AT89C51單片機作為控制核心,對8路模擬電壓信號經8位A/D轉換芯片ADC0809轉換成數字信號后,送單片機進行處理,然后通過數碼管顯示其電壓值。電路原理見上圖。

859c0aa28fee16a77e8918de251af659.gif

ADC0809有8路模擬輸入口IN0~IN7,通過地址線(23)~(25)腳選擇其中一路進行A/D轉換。

(22)腳為地址鎖存控制,高電平有效。⑥腳為測試控制,當輸入一個2μs正脈沖時,啟動A/D轉換。⑦腳為A/D轉換結束標志,當A/D轉換結束時,⑦腳輸出高電平。⑨腳為A/D轉換數據輸出允許控制端,當⑨腳為高電平時,A/D轉換數據從MSB2-1~MSB2-8輸出。⑩腳為時鐘輸入端,利用單片機ALE腳的六分頻再通過74LS74構成的四分頻得到500kHz時鐘。

AT89C51的P2、P0.4~P0.7口作為數碼管顯示控制,采用動態顯示方式顯示測量的數字電壓值和通道號。P0.0口用作單路顯示/循環顯示轉換按鈕,P0.1口用作單路顯示時通道選擇按鈕。

P1口作A/D轉換數據輸入,P3.0-P3.6口用作ADC0809的控制。

三、系統軟件設計

本系統軟件由顯示控制子程序、顯示數據處理子程序、8路電壓采集子程序、鍵盤處理子程序等組成,采用匯編語言編程。

1.主程序流程如左圖所示。

77758b0393eb1202d647294f10c59335.gif

2.顯示控制子程序

測量的A/D轉換數據放在RAM70H~77H中,測量數據轉換成的BCD碼放在7AH~7DH中。

20H.0為顯示方式標志位,21H存放通道標志數。R4用作8路循環控制,R0用作顯示通道原始數據地址指針,R1為處理后的四位顯示數據地址指針。程序通過測試20H.0來確定采用8路循環顯示還是單通道顯示。循環顯示時每通道顯示約2s。數字電壓值是通過查表方式采用動態掃描法實現的。其程序流程如中圖所示。

3.鍵盤處理子程序

本設計采用2個功能鍵和1個硬復位鍵。2個功能鍵接在P0.0與P0.1口上。對功能鍵的處理采用測試端口并設置標志的方法,使用了延時去抖處理。鍵盤按下時,還可以顯示通道號碼,松開后才顯示測量電壓值。循環顯示時,通道號顯示為“0”;單通道顯示號碼為0~8。

4.八路電壓采集子程序

單片機為ADC0809提供所需的控制時序,采集到的八路電壓數據分別存放在單片機RAM70H~77H中。程序流程如下圖。

5.顯示數據處理子程序

放在AT89C5170H~77H中的對應電壓值數據必須轉換成相應的BCD碼后才能送數碼管顯示。由于本系統中ADC0809的參考電壓VREF=VCC,所以最大測量電壓5V所對應的二進制數就是FFH,而每伏電壓對應的二進制數為33H。其處理方法是,用轉換后的數據除以33H,得到的商即為電壓值的個位數。余數×5后再除以33H得到的商×2即為電壓值的十分位數。所余之數×2后再進行一次×5÷33H得到的商×2即為電壓值的百分位數。同理可得到千分位數。最后進行四舍五入處理,若千分位處理后的余數大于19H即千分位加1。四舍五入處理后需要對各位進行進位調整。調整后的個位、十分位、百分位、千分位分別存入7AH~7DH中。

7d999fc148577a287dd7e8603d1e21b5.png

64d1fc2da8567d98ce4f38f881092a8c.gif

5e0742dfadfa0a84160272f95682009e.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372035.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZK的實際應用:MVVM –加載和渲染數據

先前的文章簡要介紹了RIA框架ZK,以及它CSS Selector啟發式控制器機制如何通過使在控制器類中引用UI組件的任務變得相對靈活來減輕UI更改所帶來的一些負擔。 然后,我們在上一篇文章中探討了ZK中的MVVM模式如何允許單個ViewModel提供不同的視圖。 這篇文章…

搭建一個簡單的mybatis框架

一、Mybatis介紹 MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Pla…

定時操作范例

1 package timetask.demo;2 3 import java.text.SimpleDateFormat;4 import java.util.Date;5 import java.util.Timer;6 import java.util.TimerTask;7 8 /*9 * time類 是一個線程實施,可以用來實現在某一個時間或者某一個時間段后安排某一個任務執行一次或者定期…

c語言空格符 r t,c語言中、\t \r \n 和空格什么意思

具體意思:都是轉義字符,空格就是單純的空格,輸入時可以輸入空格\t 跳格 \r 回車 \n 換行\\ 反斜杠 \a 警告 \b 退格 \f 換頁 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八進制數字。轉義字符串(Escap…

如何在運行時更改日志記錄級別

在運行時中更改日志記錄級別很重要,這主要在生產環境中非常重要,在生產環境中,您可能希望在有限的時間內進行調試日志記錄。 好了,更改根記錄器非常簡單–假設您有一個具有所需記錄級別的輸入參數,只需獲取根記錄器并…

擴展中國剩余定理

轉自:http://blog.csdn.net/clove_unique/article/details/54571216 對于兩個方程$x\equiv c_1\pmod {m_1}$$x\equiv c_2\pmod {m_2}$將其合并為一個方程,有解條件為$(m1,m2)|(c2-c1)$$m\frac{m1m2}{(m1,m2)}$$c(inv(\frac{m1}{(m1,m2)},\frac{m2}{(m1,m…

易語言添加ctrl c鍵,易語言操作快捷鍵匯總

以下是關于易語言的快捷鍵內容:預覽被設計窗口 CtrlEnter運行 F5終止運行 CtrlF5編譯 F7菜單編輯器 CtrlE即時幫助 F1在編輯窗口之間跳轉。按下 Ctrl 鍵后不放,然后反復按 Tab 鍵可以在目前所有的編輯窗口之間跳轉;按下 Ctrl 鍵后同時按下 Ta…

在代理類中引用動態代理

在Stackoverflow中有一個有趣的問題 ,關于Spring Bean如何獲??得對由Spring創建的代理的引用以處理事務,Spring AOP,緩存,異步流等。需要對代理的引用,因為如果存在對自身的調用通過代理bean,此調用將完全…

Array的用法總結-swift

Araay是有序的數據集,在OC中分為不可變數組NSArray和可變數組NSMutableArray,在swift中只有常量和變量兩種類型,聲明成變量那就可以說明是可變的了! 學習時的具體的用法總結成如下的代碼: //數組var arrInts [Int]()/…

Frame URl

http://www.zi-han.net/theme/hplus/?v4.1 http://webapplayers.com/inspinia_admin-v2.5/ http://baijunyao.com/article/67 轉載于:https://www.cnblogs.com/shijiaoyun/p/6065755.html

linux的i o模型,淺談Linux 網絡 I/O 模型簡介(圖文)

1、介紹Linux 的內核將所有外部設備都看做一個文件來操作(一切皆文件),對一個文件的讀寫操作會調用內核提供的系統命令,返回一個file descriptor(fd,文件描述符)。而對一個socket的讀寫也會有響應的描述符,稱為socket fd(socket文…

handsontable 方法匯總

核心方法1.為handsontable添加鉤子方法 addHook(key,callback):key為鉤子方法名 例如:hot.addHook(beforeInit, myCallback); addHookOnce(key,callback):添加只使用一次的方法,用完后自動刪除 例如:hot.addHookOnce(beforeInit, …

swing中JTable的使用方法

1 public static void main(String[] args) {2 3 Student s1 new Student("張三", "001", 0);4 Student s2 new Student("李四", "002", 1);5 Student s3 new Student("王五", "003",…

android仿高德地圖透明黑字,Android 仿高德地圖可拉伸的BottomSheet

原標題:Android 仿高德地圖可拉伸的BottomSheet2018安卓巴士開發者大會-上海站你一直期待的安卓技術盛宴即將登場!前言最近項目中需要用到高德地圖搜索結果后的結果展示的可拉伸控件。而我看到這個效果圖,覺得這個就是一個slidingpanel&#…

Java EE 7中包含哪些JSR?

我開始填寫所有應該加入Java EE 7的Java規范請求的表。 由于平臺版本仍在確定中,因此某些細節很難確定。 完整的Java EE 7 EJB產品具有以下標準組件和API: 名稱 版 描述 JSR 網頁 輪廓 批處理 1.0 批量處理 352 Bean驗證 1.1 Bean驗證框…

[ Javascript ] JavaScript中的定時器(Timer) 是怎樣工作的!

作為入門者來說。了解JavaScript中timer的工作方式是非常重要的。通常它們的表現行為并非那么地直觀,而這是由于它們都處在一個單一線程中。讓我們先來看一看三個用來創建以及操作timer的函數。var id setTimeout(fn, delay); - 初始化一個單一的timer&#xff0c…

android dropbox anr分析,Android如何分析排查ANR

釋放雙眼,帶上耳機,聽聽看~!在Android開發中,當程序發生異常時會拋出異常信息,先說下三種常見類型:列表內容KeyDispatchTimeout(谷歌default 5s,MTK平臺上是8s) –主要類型按鍵或觸摸事件在特定…

修改httpd默認端口號

Tomcat: vim /etc/httpd/conf/httpd.conf//別忘了service httpd restart Nginx: vim /etc/nginx/nginx.conf//完了之后service nginx restart 轉載于:https://www.cnblogs.com/bincoding/p/6067054.html

整合彈簧,速度和瓷磚

我喜歡 Tiles, 并且聽到了很多有關 Velocity的信息 。 它們似乎有不同的用途,并且據說很容易結合在一起,所以我決定試一試,并在Spring Web應用程序中同時使用它們。 集成實際上花費了許多小時,并且是一次真正的過山車&…

Android 軟鍵盤自動彈出和關閉

在我們寫修改信息或者搜索,修改密碼等界面的時候,用戶進入這個界面的主要目的就是輸入修改/查找 某些信息,為了用戶體驗應該自動彈出軟鍵盤而不是讓用戶主動點擊輸入框才彈出。 1.軟鍵盤的自動彈出 private void showKeyboard(){InputMethodM…