雪花太 发表于 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,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。 |