附:http://www.jh-tec.cn/archives/7303
基于51单片机+PCF8591 ADC的仿真电路图:
A. 基于51单片机和PCF8591的电压表,具有仿真图/源程序;
B. 由数码管作为显示器;
C.测试电压范围为0~5V,精度约为0.02
#include "config.h"
#include "IIC.h"
#include "display.h"
#include "PCF8591.h"
// 初始化定时器零
void Init_Timer0() {
TMOD = 0x01;
TH0 = 0xd8;
TL0 = 0xf0; // 10ms
TR0 = 1;
ET0 = 1;
EA = 1;
}
// 定时器0中断,每10ms刷新一次数码管
void Timer0() interrupt 1 using 1 {
Data_out();
TH0 = 0xd8;
TL0 = 0xf0;
}
void main() {
uint k, temp;
Init_PCF(); // 初始化PCF8591
Init_Timer0(); // 初始化定时器0
while(1) {
temp = Read_PCF(); // 读取AD转换后的数字量
PCF_Output(temp); // DA转换,模拟量输出
//将数字量转换为十进制,*100 + 0.5将小数转换为整数,便于显示和存储
k = (float)temp * 5 / 256 * 100 + 0.5; // 将得到的结果存入数组
Data_Show[0] = k / 100; // 百位
Data_Show[1] = k % 100 / 10; // 十位
Data_Show[2] = k % 100 % 10; // 个位
}
}
基于51单片机+TLC2543 ADC的仿真电路图:
A. 基于51单片机和TLC2543的电压表,具有仿真图/源程序;
B. 由数码管作为显示器;
C.测试电压范围为0~5V,精度约为0.01
#include "led.h"
#include "TLC2543.h"
const uchar code displayMode=0x0f;
uchar displayBuff[4]={0x7e,0x7e,0x7e,0x7e}; //数码管显示缓冲区,低两位为时间,最高位为抢答号
const uchar code digitalNumber[10]={0x7e,0x06,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
void main()
{
uint voltageReadTemp;
uint voltageRead;
uchar temp;
uchar i,j;
init_led();
while(1)
{
ledSweepDisplay(displayBuff,displayMode,4);
voltageRead=read_TLC2543(0x05);
voltageRead=voltageRead*0x05;
for(i=4;i>0;i--)
{
temp=(uchar)(voltageRead/0x0fff);
if(i==4)
displayBuff[i-1]=digitalNumber[temp]|0x80;
else
displayBuff[i-1]=digitalNumber[temp];
voltageRead=voltageRead%0x0fff;
voltageReadTemp=voltageRead<<1;
voltageRead=0x0000;
for(j=0;j<5;j++)
voltageRead+=voltageReadTemp;//voltageRead=voltageRead*10
}
}
}
基于51单片机+TL548 ADC的仿真电路图:
A. 该资源为基于51单片机和TLC548的电压表,具有仿真图/源程序;
B. 使用汇编语言,由数码管作为显示器;
C.测试电压范围为0~5V,精度约为0.02
BCD_100 EQU 30H
BCD_10 EQU 31H
BCD_1 EQU 32H
T050MS_NUM EQU 33H
DLYMS_NUM EQU 34H
TLC_DATA EQU 35H
ND_ADC BIT 00H
DIS_ON BIT P3.4
TLC_CLR BIT P1.0
TLC_CS BIT P1.1
TLC_DAT BIT P1.2
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_ISR
ORG 0100H
MAIN:
MOV SP,#6FH
MOV BCD_100,#0
MOV BCD_10,#0
MOV BCD_1,#0
CLR DIS_ON
MOV T050MS_NUM,#5
CLR ND_ADC
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
CLR TF0
SETB ET0
SETB EA
SETB TR0
MAIN_LOOP:
LCALL LED_DIS_3BIT
JNB ND_ADC,MAIN_LOOP
LCALL TLC_ADC
CLR ND_ADC
LJMP MAIN_LOOP
LED_DIS_3BIT:
MOV DPTR,#LED_TAB
CLR DIS_ON
MOV A,BCD_100
MOVC A,@A+DPTR
ANL A,#07FH
MOV P0,A
ANL P3,#1FH
ORL P3,#5FH
SETB DIS_ON
MOV DLYMS_NUM,#2
LCALL DELAYMS
CLR DIS_ON
MOV A,BCD_10
MOVC A,@A+DPTR
MOV P0,A
ANL P3,#1FH
ORL P3,#3FH
SETB DIS_ON
MOV DLYMS_NUM,#2
LCALL DELAYMS
CLR DIS_ON
MOV A,BCD_1
MOVC A,@A+DPTR
MOV P0,A
ANL P3,#1FH
ORL P3,#1FH
SETB DIS_ON
MOV DLYMS_NUM,#2
LCALL DELAYMS
RET