ADC0808
引脚功能各引脚功能如下:
1~5和26~28(IN0~IN7):8路模拟量输入端
8、14、15和17~21:8位数字量输出端
22(ALE):地址锁存允许信号,输入,高电平有效。
6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9(OE):数据输出允许信号,输入,高电平有效。 当A/D转换结束时,此端输入一个高电平,输出数字量。
10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。
12(VREF(+))和16(VREF(-)):参考电压输入端
23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路
仿真图:
上图计算公式:
3.45/5= X / 255 那么 X=175.95 也就是 176 (对应 LED 1011 0000 ) ,实验正确
参考程序代码:
1 #include<reg52.h> 2 #define uchar8 unsigned char 3 #define uint16 unsigned int 4 #define LED P0 5 #define out P1 6 sbit start = P2^1 ; 7 sbit OE = P2^7; // 当A/D转换结束时,此端输入一个高电平,输出数字量。OE=0,关闭输出,不准输出到单片机 8 sbit EOC = P2^3; // A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 9 sbit CLOCK = P2^0; // 时钟脉冲输入端 10 11 sbit add_a = P2^4; // abc 用来选择 ADC芯片的通道, 12 sbit add_b = P2^5; 13 sbit add_c = P2^6; 14 15 void main(void) 16 { 17 18 uchar8 temp ; 19 20 add_a=0; add_b=0; add_c=1; // 选择 ADC0809 芯片的通道 4 对应 100 21 22 while(1) 23 { 24 start=0; 25 start=1; // 上升沿使得 0809 复位 26 start=0; // 下降沿 启动AD 转换 27 28 while(1) 29 { 30 CLOCK = ! CLOCK ; if( EOC == 1) break ; // 等待转换结束,跳出循环 31 } 32 33 OE=1; 34 35 temp = out ; // 暂存转换结果 36 OE = 0; // 关闭输出 37 38 LED=~temp; // 这里取反,是因为自己把 电路图 线接反了 39 //所以通过软件修改,使得LED 亮的 为 1,灭的为 0 40 // 采样结果通过 P0 口 输出到 LED 灯 41 } 42 43 }
总结: 拓展 怎样才能把 要显示的 在 数码管 或者 LCD 屏幕上显示出来呢??????有点困难,想不出,有没有专门的译码器????
时间: 2024-09-29 02:00:56