基于51单片机自动数字电压表PCF8591 TLC2543 TL548 proteus仿真汇编程序设计

硬件设计1

附:http://www.jh-tec.cn/archives/7303
基于51单片机+PCF8591 ADC的仿真电路图:
A. 基于51单片机和PCF8591的电压表,具有仿真图/源程序;
B. 由数码管作为显示器;
C.测试电压范围为0~5V,精度约为0.02
在这里插入图片描述
在这里插入图片描述

程序设计1

#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;		// 个位
	}
}

硬件设计2

基于51单片机+TLC2543 ADC的仿真电路图:
A. 基于51单片机和TLC2543的电压表,具有仿真图/源程序;
B. 由数码管作为显示器;
C.测试电压范围为0~5V,精度约为0.01
在这里插入图片描述
在这里插入图片描述

程序设计2:

#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
	   
	}

  }
 
}

硬件设计3

基于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
  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值