📄 热敏电阻温度计.c
字号:
sfr ADC_CONTR = 0xc5;
sfr ADC_DATA = 0xc6;
sfr P1M0 = 0x93;
sfr P1M1 = 0x94;
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#include <math.h>
#include <stdio.h>
/***************************/
/* 延时 */
/***************************/
void delayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=0;temp<124;temp++)
;
}
}
/*****************************/
/* 串口发送程序,9600bps */
/*****************************/
void str(void)
{
PCON=0X00;
TL1=0XFD;
TH1=0XFD;
TMOD=0X20;
TR1=1;
SCON=0X50;
}
/*****************************/
/* 主程序 */
/*****************************/
void main(void)
{
uchar i;
float v;
float R;
uint T;
float ADC_DATA_SUM ;
float ADC_DATA_AVG;
str();
for(i=0;i<8;i++)
{
ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
P1M0 = 0x80; //0000,1000用于A/D转换的P1.7口,先设为开漏
P1M1 = 0x80; //0000,1000P1.7先设为开漏。断开内部上拉电阻
delayMs(); //20
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
ADC_CONTR = ADC_CONTR|0x07; //设置当前通道号P1.7delay(1); //延时使输入电压达到稳定
ADC_DATA = 0; //清A/D转换结果寄存器
ADC_CONTR = ADC_CONTR|0x88; //0000,1000ADCS = 1,启动转换
do { ; }
while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
ADC_CONTR &=0xe7;
ADC_DATA_SUM+=ADC_DATA;
}
ADC_DATA_AVG=ADC_DATA_SUM/8;
v=5*(ADC_DATA_AVG/256.0); //AD转换出电压
R=v/((5-v)/10000); //求出热敏电阻的阻值
if(R=12535)
T=20;
else if(R=11974)
T=21;
else if(R=11441)
T=22;
else if(R=10935)
T=23;
else if (R=10455)
T=24;
else if(R=10000)
T=25;
else if(R=9566)
T=26;
else if(R=9155)
T=27;
else if(R=8763)
T=28;
else if(R=8391)
T=29;
else if(R=8037)
T=30;
SBUF=T; //串口输出
while(TI==0);
TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -