//实验用程序 测试通过 STC15F2K60S2 @110592MHZ
#include "reg51h"
#include "intrinsh"
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);
}
为什么要用单片机设计电压表
电流表:并联多个阻值不相同的电阻。
电压表:串联多个阻值不相同的电阻。
欧姆表:串联多个不同的滑动变阻器。
注意,要用单刀多掷开关,来决定串并联入电路中的阻值大小。
然后根据书上的电路通进行改装。
基于AT89C51单片机的数字电压表的设计,不能使用AD转换芯片,AD转换电路只能自己搭。
单片机本身并不能做电压表,但是一个数字电压表需要电压值采集,AD转换,数据处理,显示或者打包传送上位机这些功能,就必须要一个“管事的”协调大家做这些事,比如控制AD转换芯片采样并读取原始数据,加工处理后控制数码管显示数据或者通过串口发送走。
有些单片机自己就带AD转换功能,可以直接把0-5v的模拟电压值输入到IO口上。
不用单片机的话,可以用一些专门的数字电压表芯片,它把测量电压并显示的工作都集成在一起了。甚至你还能用FPGA,DSP什么的。。。不过。。。看你能问出这样的问题。。。还是老老实实看单片机吧。
AT89C51单片机内部没有AD转换模块,可以通过IO口扩展AD转换芯片现在市面上很多这种芯片比如TLC2543、ads1204就是,如果电压表精度要求不高,用后出来的单片机内部就集成了AD转换芯片比如avr、PIC等。
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报