![]() |
發布時間: 2017-4-7 21:53
正文摘要:我用ADC0804測量電壓,轉換的數字量是(0~255),但是在變換電壓時,這個數字量不是按線性變換的,變換沒有規律,如果我把電壓設為2.5V,輸出位001,而不是177啊,這是怎么回事,我用的是郭天祥的那個程序,一模一樣 ... |
雪花太 發表于 2017-4-8 23:02 木有,只有ADC0832的程序 |
imxuheng 發表于 2017-4-8 19:21 那你有沒有一個正確的程序。能給我看哈嗎?謝謝了 |
雪花太 發表于 2017-4-8 15:14 沒有,程序似乎不行 |
imxuheng 發表于 2017-4-8 09:04 這個電路有沒有錯啊 |
1300584512 發表于 2017-4-8 09:27 這個應該沒有,都能顯示了 |
imxuheng 發表于 2017-4-8 09:04 #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit duan=P2^0; sbit wei=P2^1; sbit wr=P3^0; sbit rd=P3^1; sbit cs=P3^2; sbit intr=P3^3; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay1ms(uint t) { uint i,j; for(i=0;i<t;i++) for(j=0;j<110;j++); } void display(uchar bai,uchar shi,uchar ge) { wei=1; P0=0x7e; wei=0; P0=0xff; duan=1; P0=table[bai]; duan=0; delay1ms(5); wei=1; P0=0x7d; wei=0; P0=0xff; duan=1; P0=table[shi]; duan=0; delay1ms(5); wei=1; P0=0x7b; wei=0; P0=0xff; duan=1; P0=table[ge]; duan=0; delay1ms(5); } void main() { uchar a,A1,A2,A3,adval; cs=0; wei=1; P0=0x7f; wei=0; while(1) { wr=1; _nop_(); wr=0; _nop_(); wr=1; while(intr); for(a=10;a>0;a--) { display(A1,A2,A3); } P1=0xff; rd=1; _nop_(); rd=0; _nop_(); adval=P1; rd=1; A1=adval/100; A2=adval%100/10; A3=adval%100%10; display(A1,A2,A3); } } |
附上程序看看 |
本帖最后由 zl2168 于 2017-4-9 09:48 編輯 從數字量換算成模擬量的過程有問題。 在顯示數轉換為顯示數字子程序中,滿量程A-D值FFH(255)對應UREF+(5V),顯示時需將A-D值按比例變換:255→500。變換方法為:(A-D值÷255)×500=(A-D值÷51)×100V。在變換過程中,數值會超出一字節(大于255)。 先Proteus仿真一下,確認有效。 實例81 ADC0808中斷方式A-D(ALE輸出CLK) ![]() ![]() 實例84 ADC0808并行A-D(虛擬CLK) ![]() ![]() 實例85 ADC0832串行A-D(TXD輸出CLK) ![]() ![]() 實例86 ADC0832串行A-D(虛擬CLK) ![]() ![]() 以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版.。書中電路和程序設計有詳細說明,程序語句條條有注解。 |