找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14092|回復(fù): 6
收起左側(cè)

數(shù)字電壓表課程設(shè)計試驗報告 帶源碼和仿真

[復(fù)制鏈接]
ID:137190 發(fā)表于 2016-9-9 19:54 | 顯示全部樓層 |閱讀模式
0.png
課程設(shè)計的全部內(nèi)容打包下載:
課程設(shè)計—數(shù)字電壓表.rar (528.24 KB, 下載次數(shù): 151)



所在院系

教育信息與技術(shù)學(xué)院

專業(yè)名稱

信息工程

班級

1002

題目

數(shù)字電壓表

指導(dǎo)教師

黎明

成員

孫斌 鄭兵 楊鑫

完成時間

17.1.4


一、設(shè)計任務(wù)及要求:
設(shè)計任務(wù):
設(shè)計一個數(shù)字電壓表。
要    求:
1.0-5V輸入;
2.用4個數(shù)碼管顯示;有小數(shù)點的顯示;顯示小數(shù)后三位數(shù),如0.001;只顯示最后結(jié)果,不要顯示中間結(jié)果。
3. 要求精度達(dá)到1%,超出量程警告提示。
4. 可以多檔切換。

指導(dǎo)教師簽名:

   2017年1月3日      

二、指導(dǎo)教師評語:



指導(dǎo)教師簽名:

  2017年1月 3 日     

三、成績






                          驗收蓋章                 

2013年1月3 日

目錄



1 設(shè)計目的

2 設(shè)計思路

3 設(shè)計過程

3.1方案論證
3.2電路設(shè)計

3.2.1  硬件部分

(1)單片機(jī)控制模塊設(shè)計

(2)AD轉(zhuǎn)換模塊設(shè)計

(3)量程自動轉(zhuǎn)換模塊

(4)LED顯示模塊

(5)報警模塊

3.2.2  軟件部分

(1)主程序設(shè)計

(2)A/D轉(zhuǎn)換程序設(shè)計

4電路仿真與結(jié)果分析

4.1電路仿真
4.2結(jié)果分析

5設(shè)計體會

參考文獻(xiàn)            

附件

完整電路
源代碼





數(shù)字電壓表的設(shè)計

1 設(shè)計目的

(1)熟悉數(shù)字電壓表的基本工作原理和與一般的模擬電壓表相比,數(shù)字電壓表具有的優(yōu)點。

(2)掌握A/D 的使用和單片機(jī)整個開發(fā)過程。

(3)了解積分式和逐次逼近式AD轉(zhuǎn)換器各自的特點。

2 設(shè)計思路

利用AD轉(zhuǎn)換器對輸入電壓進(jìn)行采集并傳輸給單片機(jī),讓其進(jìn)行數(shù)據(jù)的處理。通過單片機(jī)與數(shù)碼管的連接,最終顯示在數(shù)碼管上。并用軟件編程的方式檢測輸入信號的大小來實現(xiàn)數(shù)字電壓表的量程自動轉(zhuǎn)換功能。

3 設(shè)計過程

第一部分:單片機(jī)控制模塊?刂浦行奈⒖刂破鞑捎玫氖茿T89C52 單片機(jī),其對于多量程電路的測量有著不可比擬的性價比,而且操作簡單,特別是與ADC0808 構(gòu)成的電壓采集電路,反映時間短,能夠有效地將模擬電壓數(shù)據(jù)在LED 上顯示出來。

第二部分:AD轉(zhuǎn)換模塊。A/D 轉(zhuǎn)換電路用來將量程轉(zhuǎn)換電路輸入的直流電壓信號轉(zhuǎn)成數(shù)字電壓信號,以供主控制器進(jìn)行數(shù)據(jù)處理。采用一片ADC0808,它是采樣分辨率為8 位的、以逐次逼近原理進(jìn)行!獢(shù)轉(zhuǎn)換的器件。

第三部分:量程自動轉(zhuǎn)換模塊。通過對輸入電壓的測量,利用軟件編程的方式來實現(xiàn)量程的自動轉(zhuǎn)換。

第四部分;LED顯示模塊。數(shù)碼管顯示電路以顯示4位的方式來顯示數(shù)字電壓表測量的直流電壓值。

第五部分:報警模塊。當(dāng)輸入的直流電壓超過最大量程時,數(shù)字電壓表報警以示警告。

3.1方案論證

利用AD轉(zhuǎn)換器對輸入電壓進(jìn)行采集并傳輸給單片機(jī),讓其進(jìn)行數(shù)據(jù)的處理。通過單片機(jī)與數(shù)碼管的連接,將輸入的直流電壓顯示在數(shù)碼管上。利用軟件編程的方式檢測輸入信號的大小來實現(xiàn)數(shù)字電壓表的量程自動轉(zhuǎn)換功能。在允許的誤差范圍內(nèi)實現(xiàn)了數(shù)字電壓表的設(shè)計要求,完成了數(shù)字電壓表的全部設(shè)計。

3.2電路設(shè)計

3.2.1  硬件部分

(1) 單片機(jī)控制模塊設(shè)計

單片機(jī)控制模塊的作用是為控制各單元電路的運(yùn)行并完成數(shù)據(jù)的換算或處理,主要由單片機(jī)、時鐘電路、復(fù)位電路組成。

① 時鐘電路

單片機(jī)工作的時間基準(zhǔn)是由時鐘電路提供的,在單片機(jī)的XTAL1和XYAL2兩個管腳接一只晶振及兩只電容就構(gòu)成了單片機(jī)的時鐘電路,電路中電容器C1和C2對振蕩頻率有微調(diào)作用,通常取(30±10pF)石英晶體選擇11.0592MHz。時鐘電路如圖1所示。

1.003.jpg
圖1  時鐘電路

②  復(fù)位電路

單片機(jī)的RST管腳為主機(jī)提供了一個外部復(fù)位信號輸入口。復(fù)位信號是高電平有效,高電平有效的持續(xù)時間為2個機(jī)器周期以上。單片機(jī)的復(fù)位方式為上電復(fù)位方式。復(fù)位電路如圖2所示。

1.004.jpg
                      圖2  復(fù)位電路

(2)AD轉(zhuǎn)換模塊設(shè)計

逐次逼近型A/D轉(zhuǎn)換器ADC0808屬于直接型A/D轉(zhuǎn)換器,它能把輸入的模擬電壓直接轉(zhuǎn)換為輸出的數(shù)字代碼,而不需要經(jīng)過中間變量。

① ADC0808簡介

ADC0808精度為8位,CMOS器件,不僅包括一個8位的逐次逼近型的ADC部分,而且還提供一個8通道的模擬多路開關(guān)和通道尋址邏輯,因而有理由把它作為簡單的“數(shù)據(jù)采集系統(tǒng)”。利用它可直接輸入8個單端的模擬信號分時進(jìn)行A/D轉(zhuǎn)換,在多點巡回檢測和過程控制、運(yùn)動控制中應(yīng)用十分廣泛。

②外部引腳圖及引腳功能

ADC0808的外部引腳如圖3所示。


1.005.jpg
圖3  ADC0808外部引腳圖

IN0~I(xiàn)N7:8路模擬量輸入。A、B、C:3位地址輸入,2個地址輸入端的不同組合選擇八路模擬量輸入。

ALE:地址鎖存啟動信號,在ALE的上升沿,將A、B、C上的通道地址鎖存到內(nèi)部的地址鎖存器。

D0~D7:八位數(shù)據(jù)輸出線,A/D轉(zhuǎn)換結(jié)果由這8根線傳送給單片機(jī)。

OE:允許輸出信號。當(dāng)OE=1時,即為高電平,允許輸出鎖存器輸出數(shù)據(jù)。

START:啟動信號輸入端,START為正脈沖,其上升沿清除ADC0808的內(nèi)部的各寄存器,其下降沿啟動A/D開始轉(zhuǎn)換。

EOC:轉(zhuǎn)換完成信號,當(dāng)EOC上升為高電平時,表明內(nèi)部A/D轉(zhuǎn)換已完成。

③AD轉(zhuǎn)換模塊設(shè)計

集成摸數(shù)轉(zhuǎn)換芯片ADC0808實現(xiàn)的A/D轉(zhuǎn)換電路如圖4所示,被測信號由ADC0808模擬輸入端輸入,完成A/D轉(zhuǎn)換后送入單片機(jī),經(jīng)相應(yīng)處理后送出顯示。

1.006.jpg
圖4  AD轉(zhuǎn)換電路

(3)量程自動轉(zhuǎn)換模塊

利用軟件編程的方式,通過對輸入電壓判斷其大小來確定電壓表的當(dāng)前量程,進(jìn)而實現(xiàn)電壓表的量程自動切換。量程自動轉(zhuǎn)換模塊如圖5所示。量程分為3個檔:當(dāng)s1亮?xí)r為1V-5V;當(dāng)s2亮?xí)r為0.1—1V;當(dāng)s3亮?xí)r為0—0.1V。

1.007.jpg
圖5  量程自動轉(zhuǎn)換模塊

(4)LED顯示模塊

LED顯示模塊用來顯示數(shù)字電壓表測量的直流電壓值。LED顯示模塊如圖6所示。

1.008.jpg
圖6   LED顯示模塊

(5) 報警模塊

利用一個電壓比較器和一個蜂鳴器的連接來實現(xiàn)報警模塊的設(shè)計。當(dāng)輸入的直流電壓大于最大量程(5V)時,蜂鳴器響起即報警。報警模塊如圖7所示。

   1.009.jpg
圖7   報警模塊

3.2.2  軟件部分

(1)主程序設(shè)計

1.010.jpg 主程序主要負(fù)責(zé)初始化工作:設(shè)置定時器、寄存器的初值,啟動A/D轉(zhuǎn)換,讀取轉(zhuǎn)換結(jié)果,處理量程轉(zhuǎn)換響應(yīng),控制液晶實時顯示等,主流程圖如圖8所示。

1.011.jpg
圖8 主程序流程圖

(2)A/D轉(zhuǎn)換程序設(shè)計

A/D轉(zhuǎn)換程序的功能是采集數(shù)據(jù),在整個系統(tǒng)設(shè)計中占有很高的地位。當(dāng)系統(tǒng)設(shè)置好后,單片機(jī)掃描轉(zhuǎn)換結(jié)束管腳P3^2的輸入電平狀態(tài),當(dāng)輸入為高電平則轉(zhuǎn)換完成,將轉(zhuǎn)換的數(shù)值轉(zhuǎn)換并顯示輸出。若輸入為低電平,則繼續(xù)掃描。AD轉(zhuǎn)換程序流程圖如圖9所示。

1.012.jpg

圖9  A/D轉(zhuǎn)換程序流程圖

程序如下:

              OE=0;

              ST=0;

              ST=1;

              ST=0;//啟動轉(zhuǎn)換

              while(EOC==0);    //等待轉(zhuǎn)換結(jié)果

              OE=1;   //允許輸出

              sum=data;

4電路仿真與結(jié)果分析

電路的仿真和結(jié)果分析

4.1電路仿真
輸入電壓為0.8V時的仿真電路如圖10所示
1.013.jpg
圖10    輸入電壓為0.8V時的仿真電路

4.2結(jié)果分析

(1)當(dāng)輸入直流電壓(input)大于5V時,電壓表只能顯示5.000V的電壓,此時s1亮。電壓大于5V時數(shù)碼管顯示如圖11所示。

1.014.jpg
圖11   電壓大于5V時數(shù)碼管顯示

(2)當(dāng)輸入直流電壓(input)在1V~5V時,s1亮。在誤差允許的范圍內(nèi)輸出相對精確的電壓值。電壓在1V~5V時數(shù)碼管顯示如圖12所示。

1.015.jpg
圖12電壓在1V~5V時數(shù)碼管顯示

(3) 當(dāng)輸入直流電壓(input)在0.1V~1V時,s2亮。在誤差允許的范圍內(nèi)輸出相對精確的電壓值。電壓在0.1V~1V時數(shù)碼管顯示如圖13所示。

1.016.jpg
圖13 電壓在0.1V~1V時數(shù)碼管顯示

(4) 當(dāng)輸入直流電壓(input)在0V~0.1V時,s3亮。在誤差允許的范圍內(nèi)輸出相對精確的電壓值。電壓在0V~0.1V時數(shù)碼管顯示如圖14所示。

1.017.jpg
圖14    電壓在0V~0.1V時數(shù)碼管顯示

5設(shè)計體會

通過這次對數(shù)字電壓表的設(shè)計與制作,我們了解了單片機(jī)整個開發(fā)過程,熟知和掌握了AT89C51,ADC0809,CD4066,運(yùn)放等芯片的作用及其使用。雖然在制作過程中出現(xiàn)了問題,但是通過不斷實踐和查找資料,積極地思考問題、發(fā)現(xiàn)問題,最終解決了。無論從硬件還是軟件方面,都提高了我們的動手和動腦能力。整個過程中,不但擴(kuò)展了我們的知識面,而且也不斷在挖掘我們的潛力,為我們今后的學(xué)習(xí)奠定扎實的基礎(chǔ)。也許在這幾天的制作中,我學(xué)的知識比課本上的還多、還難。在這次制作中,我更加看到了我對課本知識不熟,思想不夠開闊等不足的地方,希望在以后的學(xué)習(xí)與實踐中多看課本,多思考來彌補(bǔ)自己的不足。

參考文獻(xiàn)(至少5篇)

[1] 徐愛鈞.智能化測量控制儀表原理 [M].北京航空航天大學(xué)出版社.2004

[2] 吳金戌,沈慶陽,郭庭吉.8051單片機(jī)實踐與應(yīng)用[M].北京清華大學(xué)出版社.2002

[3] 張毅剛,彭喜元,彭宇.《單片機(jī)原理及應(yīng)用》第二版[M].北京高等教育出版社.2010.5

[4] 汪德彪.MCS-51單片機(jī)原理及接口技術(shù)[M]. 第1版.北京電子工業(yè)出版社.2003

[5] 沙占友.新型數(shù)字電壓表原理與應(yīng)用[M].北京機(jī)械工業(yè)出版社.2006

附件完整電路
1.018.jpg


源代碼:

  1. #include
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. #define data P1
  5. sbit ST=P3^0;
  6. sbit OE=P3^1;
  7. sbit EOC=P3^2;
  8. sbit CLK=P3^3;
  9. sbit S1=P3^4;
  10. sbit S2=P3^5;
  11. sbit S3=P3^6;
  12. ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  13. ucharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xdf} ;
  14. uint sum;
  15. uchar getdata;
  16. uchar num[4];
  17. void delay(uint ms)
  18. {
  19. uchar i;
  20. while(ms--)
  21. for(i=0;i<120;i++);
  22. }

  23. void Display_Result()
  24. {
  25. P2=0xfe;//千位
  26. P0=table1[num[3]];
  27. delay(5);
  28. P2=0xfd;//百位
  29. P0=table[num[2]];
  30. delay(5);
  31. P2=0xfb;//十位
  32. P0=table[num[1]];
  33. delay(5);
  34. P2=0xf7;//個位
  35. P0=table[num[0]];
  36. delay(5);
  37. }
  38. void init()
  39. {
  40. EA=1;
  41. TMOD=0x01;
  42. TH0=(65536-150)/256;
  43. TL0=(65536-150)%256;
  44. ET0=1;
  45. TR0=1;
  46. S1=0;
  47. S2=0;
  48. S3=1;
  49. }

  50. void main()
  51. {
  52.   init();
  53.   while(1)
  54.               {
  55.                             OE=0;
  56.                             ST=0;
  57.                             ST=1;
  58.                             ST=0;//啟動轉(zhuǎn)換
  59.                             while(EOC==0);    //等待轉(zhuǎn)換結(jié)果
  60.                             OE=1;   //允許輸出
  61.                             sum=data;
  62.                             if(data<5)
  63.                             {
  64.                                S1=0;
  65.                                S2=0;
  66.                                S3=1;
  67.                                sum=sum*1.0/255*5000;
  68.                                num[0]=sum%10;
  69.                                num[1]=sum/10;
  70.                                num[2]=sum/100;
  71.                                num[3]=sum/1000;
  72.                                Display_Result();//顯示A/D轉(zhuǎn)換結(jié)果
  73.                             }
  74.                             else if (data<51)
  75.                             {
  76.                                S1=0;
  77.                                S2=1;
  78.                                S3=0;
  79.                                sum=sum*1.0/255*5000;
  80.                                num[0]=sum%10;
  81.                                num[1]=sum/10%10;
  82.                                num[2]=sum/100;
  83.                                num[3]=sum/1000;
  84.                                Display_Result();//顯示A/D轉(zhuǎn)換結(jié)果
  85.                             }
  86.                             else if (data<256)
  87.                             {
  88.                                S1=1;
  89.                                S2=0;
  90.                                S3=0;
  91.                                sum=sum*1.0/255*5000;
  92.                                num[0]=sum%10;
  93.                                num[1]=sum/10%10;
  94.                                num[2]=sum/100%10;
  95.                                num[3]=sum/1000;
  96.                                Display_Result();//顯示A/D轉(zhuǎn)換結(jié)果
  97.               }
  98.               }
  99. }
  100. void Timer0() interrupt 1
  101. {
  102. TH0=(65536-150)/256;
  103. TL0=(65536-150)%256;
  104. CLK=~CLK;//ADC0809時鐘信號
  105. }
復(fù)制代碼




評分

參與人數(shù) 1黑幣 +5 收起 理由
小末末 + 5 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:455208 發(fā)表于 2018-12-26 11:09 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:273035 發(fā)表于 2019-1-7 10:00 來自觸屏版 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報

ID:474876 發(fā)表于 2019-2-3 19:52 | 顯示全部樓層
太厲害了 老哥
回復(fù)

使用道具 舉報

ID:540911 發(fā)表于 2020-4-13 15:45 | 顯示全部樓層
如果是交流電壓也可以嗎
回復(fù)

使用道具 舉報

ID:1145258 發(fā)表于 2025-6-11 16:22 | 顯示全部樓層
感謝樓主分享,太厲害了
回復(fù)

使用道具 舉報

ID:1145258 發(fā)表于 2025-6-11 16:22 | 顯示全部樓層
雨落 發(fā)表于 2020-4-13 15:45
如果是交流電壓也可以嗎

沒什么不可以的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表