導航:首頁 > 操作系統 > 單片機數字電壓表的設計

單片機數字電壓表的設計

發布時間:2023-11-08 21:23:52

① 畢設:基於單片機的數字電壓表的設計

2路3相應該算6路
0.5%的話只要8bit就夠了
找一個帶ad的51
max232
串口通信
c8051f320也可以
奢侈了點
輸入用電阻分壓
加運放
就可以了
還有幾個按鍵和數碼管顯示電路
不是很復雜

② 利用單片機AT89C51與ADC0808設計一個數字電壓表,能夠測量0~5V的直流電壓值,精度越高越好

本文介紹了用ADC0808集成電壓轉換晶元和AT89C51單片機設計製作的數字直流電壓表。在測量儀器中,電壓表是必須的,而且電壓表的好壞直接影響到測量精度。具有一個精度高、轉換速度快、性能穩定的電壓表才能符合測量的要求。為此,我們設計了數字電壓表,此作品主要由A/D0808轉換器和單片機AT89C51構成,A/D轉換器在單片機的控制下完成對模擬信號的採集和轉換功能,最後由數碼管顯示採集的電壓值。此設計通過調試完全滿足設計的指標要求。電路設計簡單,設計製作方便有較強的實用性。
關鍵詞:
ADC0808;單片機AT89C51;數字電壓表
Abstract:
In this paper, with ADC0808 voltage converter integrated chips and microcontroller designed AT89C51 the number of DC voltage table. In measuring instruments, voltage meter is necessary, and voltage meter will have a direct impact on measurement accuracy. With a high precision, the conversion speed and stable performance of the voltage meter to conform to the requirements of measurement. To this end, we design a digital voltage meter, this works mainly by A/D0808 converter and a microcontroller AT89C51, A / D converter under the control of the MCU to complete the acquisition and analog signal conversion functions, from the final Acquisition of the digital display voltage value. This design through debugging to fully meet the design requirements of the target. Circuit design simple, designed to facilitate a more practical.
Key words:
ADC0808; SCM AT89C51; Digital Voltmeter
目 錄
1.設計方案……………………………………………………………………………………1
2. 系統硬體設計……………………………………………………………………………2
2.1單片機晶元……………………………………………………………………………2
2.1.1.單片機晶元選擇……………………………………………………………2
2.1.2.單片機管腳說明……………………………………………………………3
2.2.A/D轉換器……………………………………………………………………………5
2.2.1.A/D轉換器晶元選擇………………………………………………………5
2.2.2.A/D轉換器管腳說明………………………………………………………6
2.3.電壓顯示電路…………………………………………………………………………7
3.系統程序設計……………………………………………………………………………………8
3.1.軟體總體框架設計……………………………………………………………………8
4.系統總圖及程序…………………………………………………………………………………9
5.參考文獻………………………………………………………………………………………………12
6.結束語……………………………………………………………………………………………………13
1.設計方案
在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。數字電壓表(Digital Voltmeter)簡稱DVM,它是採用數字化測量技術,把連續的模擬量(直流或交流輸入電壓)轉換成不連續、離散的數字形式並加以顯示的儀表。由於數字式儀器具有讀數准確方便、精度高、誤差小、靈敏度高和解析度高、測量速度快等特點而倍受青睞。本設計從各個角度分析了由單片機組成的數字電壓表的設計過程及各部分電路的組成及其原理,並且分析了程序如何驅動單片機進而使系統運行起來的原理及方法。框圖如下:
本設計主要分為兩部分:硬體電路及軟體程序。而硬體電路又大體可分為A/D轉換電路、LED顯示電路,各部分電路的設計及原理將會在硬體電路設計部分詳細介紹;程序的設計使用匯編語言編程,利用WAVE和PROTEUS 軟體對其編譯和模擬,詳細的設計演算法將會在程序設計部分詳細介紹。
2.系統硬體電路設計
2.1 單片機晶元
2.1.1.單片機晶元選擇
AT89C51簡介
AT89C51是一種帶4K位元組閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。由於將多功能8位CPU和閃爍存儲器組合在單個晶元中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示
圖2.1_1 AT89C51引腳圖
2.1.2.單片機管腳說明
主要特性:
?與MCS-51 兼容
?4K位元組可編程閃爍存儲器
?壽命:1000寫/擦循環
?數據保留時間:10年
?全靜態工作:0Hz-24Hz
?三級程序存儲器鎖定
?128×8位內部RAM
?32可編程I/O線
?兩個16位定時器/計數器
?5個中斷源
?可編程串列通道
?低功耗的閑置和掉電模式
?片內振盪器和時鍾電路
管腳接法說明:
VCC:供電電壓我們接+5V。
GND:接地。
P0口:在這個設計中我們將AT89C51做為BCD碼的輸出口與LED顯示器相連。由於P0口輸出驅動電路中沒有上拉電阻,所以我們在外接電路上接上拉電阻。
P1口:把AT89C51中的P1口與ADC0808的輸出端相連,做為數字信號的接收端。
P2口:我們把P2口做為位碼輸出口,以P2.0—2.3輸出位控線與LED顯示器相連.
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分別與ADC0808的OE,EOC,START/ALE,A,B,C端相連。
XTAL1 ,XTAL2:外接一振盪電路。
圖2.1.2 振盪電路
RST:在此端接一復位電路。
圖2.1.3 復位電路
2.2 A/D轉換器與單片機介面電路
2.2.1.A/D轉換器晶元選擇
A/D轉換器是模擬量輸入通道中的一個環節,單片機通過A/D轉換器把輸入模擬量變成數字量再處理。
隨著大規模集成電路的發展,目前不同廠家已經生產出了多種型號的A/D轉換器,以滿足不同應用場合的需要。如果按照轉換原理劃分,主要有3種類型,即雙積分式A/D轉換器、逐次逼近式A/D轉換器和並行式A/D轉換器。目前最常用的是雙積分和逐次逼近式。
雙積分式A/D轉換器具有抗干擾能力強、轉換精度高、價格便宜等優點,比如ICL71XX系列等,它們通常帶有自動較零、七段碼輸出等功能。與雙積分相比,逐次逼近式A/D轉換的轉換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關及地址解碼、鎖存電路等,它們可以與單片機系統連接,將數字量送入單片機進行分析和顯示。
本設計中,由於對精度沒做很大要求,我們採用逐次逼近式A/D轉換ADC0808,精度為0.02,所以四位LED顯示中的最後一位我們設置為V。
圖2.2.1 ADC0808引腳圖
2.2.2.A/D轉換器ADC0808的管腳說明:
IN0~IN7:為模擬量的輸入口,我們選取IN3口為入口,外接可變電阻,通過改變阻值來控制模擬量的輸入。
A、B、C:3位地址輸入,2個地址輸入端的不同組合選擇八路模擬量輸入。這里我們將A,B接高電平,C為低電平。
ALE:地址鎖存啟動信號,在ALE的上升沿,將A、B、C上的通道地址鎖存到內部的地址鎖存器。
D0~D7:八位數據輸出線,A/D轉換結果由這8根線傳送給單片機。
OE:允許輸出信號。當OE=1時,即為高電平,允許輸出鎖存器輸出數據。
START:啟動信號輸入端,START為正脈沖,其上升沿清除ADC0808的內部的各寄存器,其下降沿啟動A/D開始轉換。
EOC:轉換完成信號,當EOC上升為高電平時,表明內部A/D轉換已完成。
CLK:時鍾輸入信號,選用頻率500KHZ。
圖2.2.2 時鍾信號
2.3 電壓顯示電路:
設計中採用的是4段LED數碼管來顯示電壓值。LED具有耗電低、亮度高、視角大、線路簡單、耐震及壽命長等優點,它由4個發光二極體組成,其中3個按『8』字型排列,另一個發光二極體為圓點形狀,位於右下角,常用於顯示小數點。把4個發光二極體連在一起,公共端接高電平,叫共陽極接法,相反,公共端接低電平的叫共陰極接法,我們採用共陰極接法。當發光二極體導通時,相應的一段筆畫或點就發亮,從而形成不同的發光字元。其8段分別命名為dp g f e d c b a。例如,要顯示「0」,則dp g f e d c b a分別為:00111111B;若要顯示多個數字,只要讓若干個數碼管的位碼循環為高電平就可以了。
根據設計要求,顯示電路需要至少4位LED數碼管來顯示電壓值,我們再多加一位用來顯示電壓單位「V」,則有7位LED循環顯示。利用單片機的I/O口驅動LED數碼管的亮滅,設計中由P0口驅動LED的段碼顯示,即顯示字元,由P2口選擇LED位碼,即選擇點
亮哪位LED來顯示。
圖2.3 LED管
另外,一般I/O介面晶元的驅動能力是很有限的,在LED顯示器介面電路中,輸出口所能提供的驅動電流一般是不夠的尤其是設計中需要用到多位LED,此時就需要增加LED驅動電路。驅動電路有多種,常用的是TTL或MOS集成電路驅動器,在本設計中採用了ADC0808晶元驅動電路。
3.系統程序設計
3.1軟體總體框架設計
在編寫匯編語言時,先存放數碼管的段碼,再存放轉換後的數據,選取通道並設值.再將AD轉換結果轉換成BCD碼,通過換算LED上顯示.
再換算中,利用關系得到LED上個位,十位,百位的顯示,然後設置小數點:
開始
預設初值
選取通道3
啟動A/D轉換


數碼顯示子程序
延時顯示結果
結束
在系統上電開始測量前,要用萬用表的電壓檔對被測電壓進行估測,然後再測。
4.系統總圖及程序
LED_0 EQU 30H;
LED_1 EQU 31H;
LED_2 EQU 32H;
LED_3 EQU 33H;
ADC EQU 35H;
ST BIT P3.2;
OE BIT P3.0;
EOC BIT P3.1;
ORG 00H;
START: MOV LED_0,#00H;
MOV LED_1,#00H;
MOV LED_2,#00H;
MOV LED_3,#00H;
MOV DPTR,#TABLE;
SETB P3.4;
SETB P3.5;
CLR P3.6;
WAIT: CLR ST;
SETB ST;
CLR ST;
JNB EOC,$;
SETB OE;
MOV ADC,P1;
CLR OE;
MOV A,ADC;
MOV B,#51;
DIV AB;
MOV LED_3,A;
MOV A,B;
MOV B,#5;
DIV AB;
MOV LED_2,A;
MOV LED_1,B;
LCALL DISP;
SJMP WAIT;
DISP: MOV A,#3EH;
CLR P2.3;
MOV P0,A;
LCALL DELAY;
SETB P2.3;
MOV A,LED_1;
MOVC A,@A+DPTR;
CLR P2.2;
MOV P0,A;
LCALL DELAY;
SETB P2.2;
MOV A,LED_2;
MOVC A,@A+DPTR;
CLR P2.1;
MOV P0,A;
LCALL DELAY;
SETB P2.1;
MOV A,LED_3;
MOVC A,@A+DPTR;
ORL A,#80H;
CLR P2.0;
MOV P0,A;
LCALL DELAY;
SETB P2.0;
RET;
DELAY: MOV R6,#10;
D1: MOV R7,#250;
DJNZ R7,$;
DJNZ R6,D1;
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
END
數字直流電壓表的總圖

③ 用STC15F2K60S2單片機設計數字電壓表

//實驗用程序 測試通過 STC15F2K60S2 @11.0592MHZ
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr P1ASF = 0x9D;
BYTE ch = 0; //ADC迴路數
/*----------------------------
延時
----------------------------*/
void Delay(WORD n){
WORD x;
while (n--){
x = 5000;
while (x--);
}
}
/*----------------------------
ADC中斷
----------------------------*/
void adc_isr() interrupt 5 using 1{
ADC_CONTR &= !0x10;
P2=ADC_RES;
ADC_CONTR = 0x80 | 0x00 | 0x08 | ch;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC(){
P1ASF = 0xff;
ADC_RES = 0;
ADC_CONTR = 0x80 | 0x00 | 0x08 | ch;;
Delay(2);
}
void main(){
InitADC(); //初始化ADC
IE = 0xa0;
while (1);
}

④ 用單片機設計一個量程自動切換的數字電壓表

參考資料: 摘要電學參數測量技術涉及范圍廣,特別是微電壓、微電流、高電壓以及待測信號強弱相差極大的情況下,既要保證弱信號的測量精度又要兼顧強信號的測量范圍,在技術上有一定的難度。傳統的低成本儀表在測量電壓、電阻時都採用手動選擇檔位的方法來轉換量程。在使用中,當忘記轉換檔位時,會造成儀表測量精度下降或損壞。 現代電子測量對系統的精度要求越來越高且智能化程度也越來越高。全量程無檔自動量程轉換電壓表和電阻表是在保證測量精度不下降的前提條件下省去手動轉換量程的工作,得到了廣泛應用。本文介紹了一種基於AT89S52單片機的智能多用表。該表能在單片機的控制下完成直流電壓、電阻和直流電流的測量。測量電流部分採用了簡單的I/V轉換電路完成測試;測量電壓部分結合模擬開關CD4051和運算放大器OP07構成程式控制放大器,實現了自動量程轉換;測量電阻部分也由模擬開關CD4051和運算放大器OP07相結合,在單片機控制下完成了自動量程轉換。電流、電壓和電阻的最終測量信號都在單片機的控制下由12位A/D轉換器TLC2543進行採集,採集的信號經單片機數據處理後通過LCD(12864)顯示出來,測量結果還可以由帶有串列EEPROM的CPU存儲器和監控器的X25045進行多個數據保存。關鍵詞:TLC2543 自動量程轉換 程式控制增益放大器 電壓電阻電流目錄摘要1Abstract 2第一章緒論 51. 1概述 51. 2智能儀器/儀表國內外發展概況 51. 3課題研究目的及意義 6第二章系統結構及功能介紹 82. 1系統功能和性能指標 82. 1. 1儀表功能 82. 1. 2性能指標 82. 1. 3本機特色 82. 1. 4系統使用說明 92. 2系統工作原理概述 9第三章方案設計與論證 113. 1量程選擇的設計與論證 11

⑤ 基於AT89C51單片機的數字電壓表的設計,不能使用AD轉換晶元,AD轉換電路只能自己搭。

AT89C51單片機內部沒有AD轉換模塊,可以通過IO口擴展AD轉換晶元現在市面上很多這種晶元比如TLC2543、ads1204就是,如果電壓表精度要求不高,用後出來的單片機內部就集成了AD轉換晶元比如avr、PIC等。

⑥ 單片機設計製作數字電壓表

3.系統板上硬體連線

a)把「單片機系統」區域中的P1.0-P1.7與「動態數碼顯示」區域中的ABCDEFGH埠用8芯排線連接。

b)把「單片機系統」區域中的P2.0-P2.7與「動態數碼顯示」區域中的S1S2S3S4S5S6S7S8埠用8芯排線連接。

c)把「單片機系統」區域中的P3.0與「模數轉換模塊」區域中的ST端子用導線相連接。

d)把「單片機系統」區域中的P3.1與「模數轉換模塊」區域中的OE端子用導線相連接。

e)把「單片機系統」區域中的P3.2與「模數轉換模塊」區域中的EOC端子用導線相連接。

f)把「單片機系統」區域中的P3.3與「模數轉換模塊」區域中的CLK端子用導線相連接。

g)把「模數轉換模塊」區域中的A2A1A0端子用導線連接到「把其他形式的能轉換成電能的裝置叫做電源">電源模塊」區域中的GND端子上。

h)把「模數轉換模塊」區域中的IN0端子用導線連接到「三路可調電壓">電壓模塊」區域中的VR1端子上。

i)把「單片機系統」區域中的P0.0-P0.7用8芯排線連接到「模數轉換模塊」區域中的D0D1D2D3D4D5D6D7端子上。

4.程序設計內容

i.由於ADC0809在進行轉換為相應的數宇量的電路">A/D轉換時需要有CLK信號,而此時的ADC0809的CLK是接在AT89S51單片機的P3.3埠上,也就是要求從P3.3輸出CLK信號供ADC0809使用。因此產生CLK信號的方法就得用軟體來產生了。

ii.由於ADC0809的參考電壓VREF=VCC">CC,所以轉換之後的數據要經過數據處理,在數碼管">數碼管上顯示出電壓值。實際顯示的電壓值(D/256*VREF)

5.匯編源程序

(略)

6.C語言源程序

#include<AT89X52.H>

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};

unsignedchardispcount;

unsignedchargetdata;

unsignedinttemp;

unsignedchari;

sbitST=P3^0;

sbitOE=P3^1;

sbitEOC=P3^2;

sbitCLK=P3^3;

voidmain(void)

{

ST=0;

OE=0;

ET0=1;

ET1=1;

EA=1;

TMOD=0x12;

TH0=216;

TL0=216;

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

TR1=1;

TR0=1;

ST=1;

ST=0;

while(1)

{

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

temp=getdata*235;

temp=temp/128;

i=5;

dispbuf[0]=10;

dispbuf=10;

dispbuf=10;

dispbuf=10;

dispbuf[4]=10;

dispbuf[5]=0;

dispbuf[6]=0;

dispbuf[7]=0;

while(temp/10)

{

dispbuf[i]=temp%10;

temp=temp/10;

i++;

}

dispbuf[i]=temp;

ST=1;

ST=0;

}

}

}

voidt0(void)interrupt1using0

{

CLK=~CLK;

}

voidt1(void)interrupt3using0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

if(dispcount==7)

{

P1=P1|0x80;

}

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

⑦ 求一簡易數字電壓表的電路原理圖

28.數字電壓表

1.實驗任務

利用單片機AT89S51與ADC0809設計一個數字電壓表,能夠測量0-5V之間的直流電壓值,四位數碼顯示,但要求使用的元器件數目最少。

2.電路原理圖

圖1.28.1

3.系統板上硬體連線

a)把「單片機系統」區域中的P1.0-P1.7與「動態數碼顯示」區域中的ABCDEFGH埠用8芯排線連接。

b)把「單片機系統」區域中的P2.0-P2.7與「動態數碼顯示」區域中的S1S2S3S4S5S6S7S8埠用8芯排線連接。

c)把「單片機系統」區域中的P3.0與「模數轉換模塊」區域中的ST端子用導線相連接。

d)把「單片機系統」區域中的P3.1與「模數轉換模塊」區域中的OE端子用導線相連接。

e)把「單片機系統」區域中的P3.2與「模數轉換模塊」區域中的EOC端子用導線相連接。

f)把「單片機系統」區域中的P3.3與「模數轉換模塊」區域中的CLK端子用導線相連接。

g)把「模數轉換模塊」區域中的A2A1A0端子用導線連接到「電源模塊」區域中的GND端子上。

h)把「模數轉換模塊」區域中的IN0端子用導線連接到「三路可調電壓模塊」區域中的VR1端子上。

i)把「單片機系統」區域中的P0.0-P0.7用8芯排線連接到「模數轉換模塊」區域中的D0D1D2D3D4D5D6D7端子上。

4.程序設計內容

i.由於ADC0809在進行A/D轉換時需要有CLK信號,而此時的ADC0809的CLK是接在AT89S51單片機的P3.3埠上,也就是要求從P3.3輸出CLK信號供ADC0809使用。因此產生CLK信號的方法就得用軟體來產生了。

ii.由於ADC0809的參考電壓VREF=VCC,所以轉換之後的數據要經過數據處理,在數碼管上顯示出電壓值。實際顯示的電壓值(D/256*VREF)

5.匯編源程序

ADC0809中文資料

ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接介面。

(1)ADC0809的內部邏輯結構

由下圖可知,ADC0809由一個8路模擬開關、一個地址鎖存與解碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用於鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。

(2).ADC0809引腳結構

ADC0809各腳功能如下:

D7-D0:8位數字量輸出引腳。

IN0-IN7:8位模擬量輸入引腳。

VCC:+5V工作電壓。

GND:地。

REF(+):參考電壓正端。

REF(-):參考電壓負端。

START:A/D轉換啟動信號輸入端。

ALE:地址鎖存允許信號輸入端。

(以上兩種信號用於啟動A/D轉換).

EOC:轉換結束信號輸出引腳,開始轉換時為低電平,當轉換結束時為高電平。

OE:輸出允許控制端,用以打開三態數據輸出鎖存器。

CLK:時鍾信號輸入端(一般為500KHz)。

A、B、C:地址輸入線。

ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。

地址輸入和控制線:4條

ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與解碼器將A,B,C三條地址線的地址信號進行鎖存,經解碼後被選中的通道的模擬量進轉換器進行轉換。A,B和C為地址輸入線,用於選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。

CBA選擇的通道

000IN0

001IN1

010IN2

011IN3

100IN4

101IN5

110IN6

111IN7

數字量輸出及控制線:11條

ST為轉換啟動信號。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。EOC為轉換結束信號。當EOC為高電平時,表明轉換結束;否則,表明正在進行A/D轉換。OE為輸出允許信號,用於控制三條輸出鎖存器向單片機輸出轉換得到的數據。OE=1,輸出轉換得到的數據;OE=0,輸出數據線呈高阻狀態。D7-D0為數字量輸出線。

CLK為時鍾輸入信號線。因ADC0809的內部沒有時鍾電路,所需時鍾信號必須由外界提供,通常使用頻率為500KHZ,

VREF(+),VREF(-)為參考電壓輸入。

2.ADC0809應用說明

(1).ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。

(2).初始化時,使ST和OE信號全為低電平。

(3).送要轉換的哪一通道的地址到A,B,C埠上。

(4).在ST端給出一個至少有100ns寬的正脈沖信號。

(5).是否轉換完畢,我們根據EOC信號來判斷。

(6).當EOC變為高電平時,這時給OE為高電平,轉換的數據就輸出給單片機了。

3.實驗任務

如下圖所示,從ADC0809的通道IN3輸入0-5V之間的模擬量,通過ADC0809轉換成數字量在數碼管上以十進制形成顯示出來。ADC0809的VREF接+5V電壓。

4.ADC0809應用電路原理圖

6.程序設計內容

(1).進行A/D轉換時,採用查詢EOC的標志信號來檢測A/D轉換是否完畢,若完畢則把數據通過P0埠讀入,經過數據處理之後在數碼管上顯示。

(2).進行A/D轉換之前,要啟動轉換的方法:

ABC=110選擇第三通道

ST=0,ST=1,ST=0產生啟動轉換的正脈沖信號.

C語言源程序

#include

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};

unsignedchardispcount;

sbitST="P3"^0;

sbitOE="P3"^1;

sbitEOC="P3"^2;

unsignedcharchannel="0xbc";//IN3

unsignedchargetdata;

voidmain(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

TR0=1;

ET0=1;

EA=1;

P3=channel;

while(1)

{

ST=0;

ST=1;

ST=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

dispbuf[2]=getdata/100;

getdata=getdata%100;

dispbuf[1]=getdata/10;

dispbuf[0]=getdata%10;

}

}

voidt0(void)interrupt1using0

{

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

dispbuf[i]=temp;

ST=1;

ST=0;

}

}

}

voidt0(void)interrupt1using0

{

CLK=~CLK;

}

voidt1(void)interrupt3using0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

if(dispcount==7)

{

P1=P1|0x80;

}

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

⑧ 基於單片機的數字電壓表設計 (請不要完成抄襲)

我給你看看我以前做過的數字電壓表,匯編的
COM EQU 50H ;指令寄存器
DAT EQU 51H ;數據寄存器
RS EQU P2.1 ;LCD寄存器選擇信號
RW EQU P2.2 ;LCD讀/寫選擇信號
E EQU P2.3 ;LCD使能信號

ORG 0000H
LJMP MAIN ;主程序入口地址
ORG 000BH
LJMP BT0 ;T0中斷入口
ORG 0030H ;主程序,初始化

MAIN:
MOV SP,#60H
LCALL INT
MOV 30H,#30H ;電壓整數位
MOV 31H,#02EH ;小數點位
MOV 32H,#30H ;小數個位
MOV 33H,#30H ;小數十位
MOV 34H,#30H ;小數百位
MOV 35H,#56H ;字元"V"
MOV R7,#30H
LCALL STR0 ;顯示字元串0
LCALL DELAY
LCALL STR1 ;顯示字元串1
LCALL DELAY
LCALL N2 ;顯示Voltage=0.000V

;***********定時器初始化程序***********

MOV TMOD,#00H ;定時器T0設為方式0
MOV TH0,#00H ;裝入定時常數定時100us
MOV TL0,#00H
SETB TR0 ;啟動T0
MOV 24H,#08H;裝入T0中斷次數
MOV IE,#82H ;開中斷
LP:
MOV R7,#30H ;顯示緩沖區首地址
LCALL DISPLY
SJMP LP ;循環顯示
LED1:CLR P3.0
RET
DISPLY: ;LCD顯示子程序
MOV COM,#0CAH
LCALL PR1
MOV DAT,30H
LCALL PR2
MOV DAT,31H
LCALL PR2
MOV DAT,32H
LCALL PR2
MOV DAT,33H
LCALL PR2
MOV DAT,34H
LCALL PR2
MOV DAT,35H
LCALL PR2
RET
STR0:
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#090H ;設置DDRAM地址
LCALL PR1 ;調寫指令代碼子程序
MOV DPTR,#TAB4
MOV R2,#16
MOV R3,#00H
WRIN0:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN0
MOV COM,#0D0H
LCALL PR1
MOV DPTR,#TAB5
MOV R2,#16
MOV R3,#00H
WRIN1:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN1
MOV R3,#10H
ZUOYI:
MOV COM,#18H
LCALL PRX
DJNZ R3,ZUOYI
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
RET

RET

STR1:
MOV COM,#01H ;LCD清0命令
LCALL PR1 ;調寫指令代碼子程序
MOV COM,#06H ;輸入方式命令,游標右移
LCALL PR1 ;調寫指令代碼子程序
MOV COM,#40H
LCALL PR1
MOV R5,#20H
MOV DPTR,#ZI
MOV R4,#0

LOOP1:MOV A,R4
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R4
DJNZ R5,LOOP1
MOV COM,#80H
LCALL PR1
MOV DPTR,#TAB2
MOV A,#00H
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#01H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#02H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#03H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV R1,#00H
MOV R0,#0dH
MOV DPTR,#TAB3
LOOP2:MOV A,R1
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R1
DJNZ R0,LOOP2

RET

N2: MOV COM,#0C0H
LCALL PR1
MOV DPTR,#TAB1
MOV R2,#10
MOV R3,#00H
WRIN:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN
RET
TAB1: DB "VOLTAGE = "
TAB2: DB 00H
DB 01H
DB 02H
DB 03H
DB 04H
DB 05H

TAB3:DB "10701 tcw "

ZI: DB 009H,00AH,00CH,01FH,00CH,00AH,00CH,009H
DB 004H,004H,01FH,004H,00AH,00AH,011H,000H
DB 004H,004H,01FH,01FH,01FH,004H,007H,000H
DB 004H,00EH,010H,00EH,000H,00EH,003H,000H
TAB4:DB " welcome ! "
TAB5:DB "DESIGN BY tcw"
TAB6:DB "123456"

;********************************************************************
;定時器T0中斷服務子程序,讀取ADC0809第0通道的A/D轉換結果並化為顯示值*
;********************************************************************
BT0:
PUSH ACC
PUSH PSW
MOV PSW,#08H
CLR TR0
MOV TH0,#00H ;重新裝入初值
MOV TL0,#00H
DEC 24H
MOV A,24H
JNZ RTN1
MOV 24H,#08H

LCALL ADC
RTN1: SETB TR0
POP PSW
POP ACC
RETI
ADC:
MOV DPTR,#0F6FFH
MOV A,#0 ;選擇通道0
MOVX @DPTR,A ;啟動AD轉換
MOV A,#40H
DJNZ ACC,$
MOVX A,@DPTR
MOV 22H,A
MOV 21H,#0CCH
CJNE A,21H,BJ0
BJ0:JNC LED
SJMP LL0
LL0:SETB P3.0
SJMP LL
LED:LCALL LED1
LL: MOV A,22H
MOV B,#05H ;A/D轉換結果化為顯示值
MUL AB ;(AD*5)/256
MOV 30H,B ;AD*5的高位元組為整數部分
MOV B,#0AH
MUL AB ;AD*5的低位元組為/256的結果,為小數部分
MOV 32H,B ;二進制小數換為10進制數
MOV B,#0AH
MUL AB
MOV 33H,B
MOV B,#0AH
MUL AB
MOV 34H,B
MOV A,30H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A
MOV A,32H
MOVC A,@A+DPTR
MOV 32H,A
MOV A,33H
MOVC A,@A+DPTR
MOV 33H,A
MOV A,34H
MOVC A,@A+DPTR
MOV 34H,A
RET
TAB: DB "0123456789"
;*****************************************
;****LCD間接控制方式下的初始化子程序******
;*****************************************
INT:
LCALL DELAY
MOV COM,#38H ;設置工作方式
LCALL PR1
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#0CH
LCALL PR1
RET

DELAY: ;延時子程序
MOV R6,#0FH
MOV R7,#00H
DELAY1:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET

DELAY00: ;延時子程序
MOV R6,#0FFH
MOV R7,#0FFH
DELAY0:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;*********************************************
;*******LCD間接控制方式下的驅動子程序*********
;*********************************************
;2 寫指令代碼子程序
PRX:
PUSH ACC
CLR RS
SETB RW
PR110:
MOV P0,#0FFH
SETB E
LCALL DELAY00
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET

PR1:
PUSH ACC
CLR RS
SETB RW
PR11:
MOV P0,#0FFH
SETB E
LCALL DELAY
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;3 寫顯示數據子程序

PR2:
PUSH ACC
CLR RS
SETB RW
PR21:
MOV P0,#0FFH
SETB E
LCALL DELAY
MOV A,P0
CLR E
JB ACC.7,PR21
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
END

閱讀全文

與單片機數字電壓表的設計相關的資料

熱點內容
壓縮比115 瀏覽:558
pdf怎麼摳圖 瀏覽:864
霍妮pdf 瀏覽:808
反編譯VMP 瀏覽:46
hello編譯器 瀏覽:771
apk程序加密 瀏覽:595
如何給app重命名 瀏覽:603
怎麼幽默調侃程序員 瀏覽:285
忘記密碼解壓視頻 瀏覽:911
運城機場春運加密 瀏覽:287
安卓手機如何關閉app後台 瀏覽:154
安卓數字密碼忘記怎麼破解 瀏覽:252
pythonzmq模式 瀏覽:181
linux運行php網站 瀏覽:865
實驗室無油壓縮機 瀏覽:805
哪裡可以免費看動畫app 瀏覽:53
文本加密咋解 瀏覽:486
tomcat做伺服器怎麼設置 瀏覽:252
非對稱加密會增大網路包嗎 瀏覽:703
為什麼不能編譯c 瀏覽:262