校园在线网站怎么做,已有网站备案,成全高清免费观看mv,百度投诉中心人工电话目录
1、项目功能
2、仿真图
3、程序
资料下载地址#xff1a;ATmaga8单片机Pt100温度计源程序Proteus仿真设计
1、项目功能 设计Pt100铂电阻测量温度的电路#xff0c;温度测量范围是0-100摄氏度#xff0c;要求LCD显示。画出电路图#xff0c;标注元器件参数ATmaga8单片机Pt100温度计源程序Proteus仿真设计
1、项目功能 设计Pt100铂电阻测量温度的电路温度测量范围是0-100摄氏度要求LCD显示。画出电路图标注元器件参数简单说明测量原理和调节方式。根据要求本设计的测温模拟电路使用热电阻Pt100温度传感器利用其感温效应,热电阻随环境温度的变化而变化在电路图中将电阻值的变化转换成电压的变化再将电压值作为输入信号输入至AD转换器中进行模拟信号到数字信号的转换其输出端接单片机向单片机内依据公式写入源程序将被测温度在显示器上显示出来: 测量温度范围0℃~100℃ 分辨率为0.1℃ LCD数码直读显示。 本设计系统包括了温度测量单元信号处理单元A/D 转换模块数据处理与控制模块温度显示五个部分。
2、仿真图 3、程序 #include lcd.h#include delay.h#define ADC_VREF_TYPE 0xC0
#define MCPCS PORTD.0
#define MCPSCK PORTD.1
#define MCPDATA PIND.2
#define A 3.9083e-3
#define B -5.775e-7
#define C -4.183e-12
unsigned long read_spi(void);
float CalTem(float PT100R)
{
double fT,fR,fT0;
char i0;
fRPT100R;
fT0(fR/100-1)/A;return fT0;
};
unsigned long read_mcp(void)
{
long a[]{0,0,0,0,0};
long x0;
char i0;
char k5; // 数组大小 -1
for (i0;i5;i)
{
a[i]read_spi(); // 连续3次读出数据
delay_us(5);
}
//中值滤波
while (k0)
{
for (i0;(i(k-1));i) // 从低到高排序
{if (a[i]a[i1]){xa[i1];a[i1]a[i];a[i]x;};
};
k--;
};
return a[2]; // 舍弃最大数据和最小数据。
}unsigned long read_spi(void)
{
volatile char i0;
volatile long int result0,x0;
MCPCS0;// CS 先一个100us 低电平脉冲
delay_us(100);
MCPCS1;
delay_ms(80); // 高电平等待80ms 等待转换完成
MCPCS0; // 置 CS 低电平 开始发生 sck 脉冲
for (i0; i24;i) // 24 位数据
{MCPSCK0; // sck 脉冲下降沿delay_us(1); // 等5us 等待稳定//resultresult1;xMCPDATA; // 读出一位while (MCPDATA!x) // 抖动处理 2次读出电平相同说明数据稳定{delay_us(1);xMCPDATA;};result1; result|x;//(x(23-i));delay_us(5);MCPSCK1; // 发送sck 上升沿delay_us(10);
};
MCPCS1; // cs1
return result6;
}
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUXadc_input | (ADC_VREF_TYPE 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|0x40;
// Wait for the AD conversion to complete
while ((ADCSRA 0x10)0);
ADCSRA|0x10;
return ADCW;
}// 校准温度计查表 没20度一个校准
// -50 -30 -10 10 30 50 70 90 110 130 150
const float CAL_Tem[]{4.7 ,4.65,4.65,4.6,4.6 ,4.55,4.55,4.50,4.45,4.45,4.45};
const int ADCSTEP[]{ 1 ,96 ,189 ,282, 374,466 ,557 ,648,738,827 ,916};float CalcuTem(int ADC) // 温度校准计算 没有使用
{
int i0;
float r;
for (i0; i10;i)
{if ((ADCADCSTEP[i1])(ADCADCSTEP[i])) break;
};
r(ADC-ADCSTEP[i]);
rr/CAL_Tem[i];
rr-50;///CAL_Tem[i]-50i*20;
rri*20.0;
return r;
}
volatile char stradc[15]\0;
void main(void)
{
// Declare your local variables here
volatile long int MCPADC0;
volatile unsigned int adc0;
volatile float fadc0;// Input/Output Ports initialization
// Port B initialization
// Func7In Func6In Func5In Func4In Func3In Func2In Func1In Func0In
// State7T State6T State5T State4T State3T State2T State1T State0T
PORTB0x00;
DDRB0x00;// Port C initialization
// Func6In Func5In Func4In Func3In Func2In Func1In Func0In
// State6T State5T State4T State3T State2T State1T State0T
PORTC0x00;
DDRC0x00;// Port D initialization
// Func7out Func6out Func5out Func4out Func3out Func2int Func1out Func0out
// State7T State6T State5T State4T State3T State2T State1T State01
PORTD0x07;
DDRD0xFB;// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR00x00;
TCNT00x00;// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal topFFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A0x00;
TCCR1B0x00;
TCNT1H0x00;
TCNT1L0x00;
ICR1H0x00;
ICR1L0x00;
OCR1AH0x00;
OCR1AL0x00;
OCR1BH0x00;