本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字多用表。
proteus仿真图:
1)ADC0809内部逻辑结构:
2)图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码,如表所示。
C(ADDC) |
B(ADDB) |
A(ADDA) |
选择的通道 |
0 |
0 |
0 |
IN0 |
0 |
0 |
1 |
IN1 |
0 |
1 |
0 |
IN2 |
0 |
1 |
1 |
IN3 |
1 |
0 |
0 |
IN4 |
1 |
0 |
1 |
IN5 |
1 |
1 |
0 |
IN6 |
1 |
1 |
1 |
IN7 |
3)上仿真结果图
一、电压的测量
电压转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result(uchar d_1)
{
//int d=d_1*500.0/255.0;
//d= ((5.0/255) * d_1) * 100;
//d=d_1;
P2=0xf7; //1111 0111
P0=0x3e; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfe; //1111 1110
P0=DSY_CODE[d/100]|0x80;
DelayMS(5);
}
二、电流的测量
电流转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result_2(uchar e_1)
{
//int e=e_1*1.0/255*200;
//int e=(e_1*100.0/255.0)*5/p/0.1;
P2=0xf7; //1111 0111
P0=0x77; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[e%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[e%100/10]|0x80;
DelayMS(5);
P2=0xfe; //1111 1110
P0=0x3f|0x80; //0101 1011
P0=DSY_CODE[e/100];
DelayMS(5);
}
三、电阻的测量
电阻转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result_3(uchar f_1)
{
//int f_2=f_1 *1.0/255*500;
//int f_3=(150*f_2)/(500-f_2);
//int f=f_3*100/3;
//int f=f_1*1.0/255*100;
P2=0xf7; //1111 0111
P0=0x75; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[f%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[f%100/10];
DelayMS(5);
P2=0xfe; //1111 1110
P0=DSY_CODE[f/100]|0x80;
DelayMS(5);
}
注:本文章只提供ADC转换公式及整体思路,完整工程已打包,如需直接使用可查阅:
proteus仿真80C52+ADC0809(测电压电流电阻)工程仿真+C代码.rar-嵌入式文档类资源-CSDN下载
版权声明:本文为CSDN博主「肚子饿扁了啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ysjlew/article/details/121712684
本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字多用表。
proteus仿真图:
1)ADC0809内部逻辑结构:
2)图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码,如表所示。
C(ADDC) |
B(ADDB) |
A(ADDA) |
选择的通道 |
0 |
0 |
0 |
IN0 |
0 |
0 |
1 |
IN1 |
0 |
1 |
0 |
IN2 |
0 |
1 |
1 |
IN3 |
1 |
0 |
0 |
IN4 |
1 |
0 |
1 |
IN5 |
1 |
1 |
0 |
IN6 |
1 |
1 |
1 |
IN7 |
3)上仿真结果图
一、电压的测量
电压转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result(uchar d_1)
{
//int d=d_1*500.0/255.0;
//d= ((5.0/255) * d_1) * 100;
//d=d_1;
P2=0xf7; //1111 0111
P0=0x3e; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfe; //1111 1110
P0=DSY_CODE[d/100]|0x80;
DelayMS(5);
}
二、电流的测量
电流转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result_2(uchar e_1)
{
//int e=e_1*1.0/255*200;
//int e=(e_1*100.0/255.0)*5/p/0.1;
P2=0xf7; //1111 0111
P0=0x77; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[e%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[e%100/10]|0x80;
DelayMS(5);
P2=0xfe; //1111 1110
P0=0x3f|0x80; //0101 1011
P0=DSY_CODE[e/100];
DelayMS(5);
}
三、电阻的测量
电阻转化显示主要代码(注释项为不同数码管位数对于的ADC转换公式,按需删减):
void Display_Result_3(uchar f_1)
{
//int f_2=f_1 *1.0/255*500;
//int f_3=(150*f_2)/(500-f_2);
//int f=f_3*100/3;
//int f=f_1*1.0/255*100;
P2=0xf7; //1111 0111
P0=0x75; //0101 1011
DelayMS(5);
P2=0xfb; //1111 1011
P0=DSY_CODE[f%10];
DelayMS(5);
P2=0xfd; //1111 1101
P0=DSY_CODE[f%100/10];
DelayMS(5);
P2=0xfe; //1111 1110
P0=DSY_CODE[f/100]|0x80;
DelayMS(5);
}
注:本文章只提供ADC转换公式及整体思路,完整工程已打包,如需直接使用可查阅:
proteus仿真80C52+ADC0809(测电压电流电阻)工程仿真+C代码.rar-嵌入式文档类资源-CSDN下载
版权声明:本文为CSDN博主「肚子饿扁了啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ysjlew/article/details/121712684
暂无评论