基于热敏电阻的数字温度计

基于热敏电阻的数字温度计


前言

单片机初学者大多都是从51开始的,普通的89C51/52并没有集成ADC,只能通过外接AD芯片进行AD转换,这里用ADC0804对PT100热敏电阻进行AD采样,单片机控制数码管显示采样结果。


一、Proteus仿真电路

![Alt]在这里插入图片描述

二、c代码

#include <reg52.h>
#include <intrins.h>

unsigned char code dxcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
unsigned char dispbuf[4];

sbit cs = P2^4;
sbit intr = P2^7;
sbit wr = P2^6;
sbit rd = P2^5;
sbit P37=P3^7;

void Delay(unsigned int i);
void Display();

void main()
{
float temp = 0; //温度
int T=0;
unsigned char x = 0; //存储P1口的数值
while(1)
{
cs = 0;
wr = 0;
nop();
wr = 1; //高电平变低电平触发一次ADC转换
while(intr); // ADC转换完成后intr = 0
P1 = 0xff;
cs = 0;
rd = 0;
nop();
x = P1; //读取结果
rd = 1;

	temp = x*(50000/2560)/25 - 100;
	T= temp/0.385 * 10;
	
	dispbuf[0]=T%10;
	dispbuf[1]=T/10%10;
	dispbuf[2]=T/100%10;
	if(temp<0)
	{
		if(T<=-100)
		{
			dispbuf[0]=-T%(10);
			dispbuf[1]=T/(-10)%10;
			dispbuf[2]=T/(-100)%10;
			dispbuf[3]=10;
		}
		else 
		{
			dispbuf[0]=-T%10;
			dispbuf[1]=T/(-10)%10;
			dispbuf[2]=10;
			dispbuf[3]=11;
		}
	}
	else if(T<100)
	{
		dispbuf[3]=11;
		dispbuf[2]=11;
	}
	else if(T<1000)
	{
		dispbuf[3]=11;
	}
	else
	{
		dispbuf[3]=T/1000%10;
	}
	Display();
}

}

void Display()
{
P3 = dxcode[dispbuf[3]];
P0=0xfe;
Delay(10);
P3 = 0x00;
P3 = dxcode[dispbuf[2]];
P0=0xfd;
Delay(10);
P3=0x00;
P3 = dxcode[dispbuf[1]] | 0x80;
P0=0xfb;
Delay(10);
P3=0x00;
P3 = dxcode[dispbuf[0]];
P0=0xf7;
Delay(10);
P3=0x00;
}

void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i–)
{
for(j=0;j<125;j++)
{;}
}
}

代码没有优化,需要注意的地方是adc0804的基准电压是5v ,采样是8位,这里的转化问题要搞明白。

下面是包含仿真文件和程序的下载链接

链接: https://download.csdn.net/download/weixin_40752176/13452793

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值