导航:首页 > 操作系统 > 温度设计单片机

温度设计单片机

发布时间:2022-06-15 20:02:29

‘壹’ 单片机课程设计 单片机温度的检测与显示的设计

用18b20做很简单啊。
温度的子程序给你,,你重定义一下接口,主程序已经调用出温度了,你送到显示就行了。。

/* 延时t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}

/* 产生复位脉冲初始化DS18B20 */
void TxReset(void)
{
uint i;
DQ = 0;

/* 拉低约900us */
i = 100;
while (i>0) i--;

DQ = 1; // 产生上升沿
i = 4;
while (i>0) i--;
}

/* 等待应答脉冲 */
void RxWait(void)
{
uint i;
while(DQ);
while(~DQ); // 检测到应答脉冲
i = 4;
while (i>0) i--;
}

/* 读取数据的一位,满足读时隙要求 */
bit RdBit(void)
{
uint i;
bit b;
DQ = 0;
i++;
DQ = 1;
i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
b = DQ;
i = 8;
while(i>0) i--;
return (b);
}

/* 读取数据的一个字节 */
uchar RdByte(void)
{
uchar i,j,b;
b = 0;
for (i=1;i<=8;i++)
{
j = RdBit();
b = (j<<7)|(b>>1);
}
return(b);
}

/* 写数据的一个字节,满足写1和写0的时隙要求 */
void WrByte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp = b&0x01;
b = b>>1; // 取下一位(由低位向高位)
if (btmp)
{
/* 写1 */
DQ = 0;
i++;i++; // 延时,使得15us以内拉高
DQ = 1;
i = 8;
while(i>0) i--; // 整个写1时隙不低于60us
}
else
{
/* 写0 */
DQ = 0;
i = 8;
while(i>0) i--; // 保持低在60us到120us之间
DQ = 1;
i++;
i++;
}
}
}

/* 启动温度转换 */
void convert(void)
{
TxReset(); // 产生复位脉冲,初始化DS18B20
RxWait(); // 等待DS18B20给出应答脉冲
delay(1); // 延时
WrByte(0xcc); // skip rom 命令
WrByte(0x44); // convert T 命令
}

/* 读取温度值 */
void RdTemp(void)
{
TxReset(); // 产生复位脉冲,初始化DS18B20
RxWait(); // 等待DS18B20给出应答脉冲
delay(1); // 延时
WrByte(0xcc); // skip rom 命令
WrByte(0xbe); // read scratchpad 命令
tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)
tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位)
}

void main(void)
{
do
{
delay(1); // 延时1ms
convert(); // 启动温度转换,需要750ms
delay(1000); // 延时1s
RdTemp(); // 读取温度
}
while(1);
}

‘贰’ 单片机数字温度计设计用C语言写程序

#include <reg51.h>
#define uchar unsigned char
sbit BEEP=P3^7;
//接控制继电器
sbit DQ = P3^6;
//接温度传感器18B20
uchar t[2],number=0,*pt;
//温度值
uchar TempBuffer1[4]={0,0,0,0};
uchar Tmax=50,Tmin=10;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar currtemp;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
P2=1<<number;
if(number==2)P0=distab[TempBuffer1[0]]&0x7f;
else P0=distab[TempBuffer1[0]];
number++;
if(number>3)number=0;
}
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
bit x=0;
do{
DQ=1;
delay_18B20(8);
DQ = 0; //单片机将DQ拉低
delay_18B20(90); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化
}while(x);
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(4);
}

return(dat);
}
/*************ds18b20写一个字节****************/
void WriteOneChar(unsigned char dat)
{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;
delay_18B20(5);

DQ = 1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度
tt[0]=ReadOneChar(); //读取温度值低位
tt[1]=ReadOneChar(); //读取温度值高位
return(tt);
}
void covert1(void)
//将温度转换为LED显示的数据
{
uchar x=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080) //判断正负温度
{
TempBuffer1[0]=0x0c;
//c代表负
t[1]=~t[1];
/*下面几句把负数的补码*/
t[0]=~t[0];
/*换算成绝对值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
else TempBuffer1[0]=0x0a;
//A代表正
t[1]<<=4;
//将高字节左移4位
t[1]=t[1]&0xf0;
x=t[0];
//将t[0]暂存到X,因为取小数部分还要用到它
x>>=4;
//右移4位
x=x&0x0f;
//和前面两句就是取出t[0]的高四位
y=t[1]|x;
//将高低字节的有效值的整数部分拼成一个字节
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f;
//小数部分
TempBuffer1[3]=t[0]*10/16;
if(currtemp<Tmin || currtemp>Tmax)BEEP=1;
else BEEP=0;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000);
//延时等待18B20数据稳定
while(1)
{
pt=ReadTemperature(0x7f); //读取温度,温度值存放在一个两个字节的数组中
if(dismod==0)covert1();
delay_18B20(30000);
}
}

‘叁’ 单片机数字温度计设计

;调试成功,还能凑合用
;有什么具体的设计要求请说明,现场改。protues电路图,联系[email protected]
DATA_BUS BIT P1.2
FLAG BIT 00H
NEG BIT 01H
TURN BIT 02H
TEMP_L EQU 30H
TEMP_H EQU 31H
TEMP_DP EQU 32H
TEMP_INT EQU 33H
TEMP_BAI EQU 34H
TEMP_SHI EQU 35H
TEMP_GE EQU 36H
T_UP EQU 37H
T_DOWN EQU 38H
MARK EQU 39H
DIS_DP EQU 3AH
DIS_ADD EQU 3BH
KEY_HUAN BIT P3.0
KEY_A BIT P3.1
KEY_D BIT P3.2

ORG 0000H
AJMP START

ORG 0040H
START:
MOV SP, #50H
MOV P2,#00H; 先关闭所有数码管 共阴则 MOV P2, #0FFH
CLR FLAG
CLR NEG
CLR TURN ;按键转换标志,只有转换按键按过,再按其他的键才能调整温度。
MOV T_UP,#60H ;初始化温度上限
MOV T_DOWN,#30H ;初始化温度下限
MOV MARK,#00H ;当前显示数值的标志。0显示当前温度,1显示并调节最高温度,2显示并调节最低温度。
MOV TEMP_DP, #08H
MOV TEMP_BAI, #08H
MOV TEMP_SHI, #08H
MOV TEMP_GE, #08H
LCALL DISPLAY
MAIN:
LCALL READ_TEMP
LCALL PROCESS
LCALL KEYSCAN
LJMP MAIN

;读温度程序
READ_TEMP:
LCALL RESET_PULSE ;18B20初始化,对18B20的每一个读写操作都是从初始化开始的。
MOV A, #0CCH ;指令0CCH 跳过读ROM,至于为什么看看DS18B20的中文资料就知道了。
LCALL WRITE ;往18B20写指令
MOV A, #44H ;指令44H 温度变换。
LCALL WRITE
LCALL DISPLAY ;调用显示
LCALL RESET_PULSE ;18B20初始化
MOV A, #0CCH
LCALL WRITE
MOV A, #0BEH ;0BEH 读暂存存储器
LCALL WRITE ;先写“读温度”指令
LCALL READ ;再读温度值
RET

;复位脉冲程序

;/*--------------------------------------------------------------------------------------------------------------------
; 时序:初始化时序、读时序、写时序。
;
;初始化:检测总线控制器发出的复位脉冲
;
;和ds18b20的任何通讯都要从初始化开始
;
;初始化序列包括一个由总线控制器发出的复位脉冲
;
;和跟在其后由从机发出的存在脉冲。
;
;始化:复位脉冲+存在脉冲
;
;具体操作:
;
;总线控制器发出(TX)一个复位脉冲 (一个最少保持480μs 的低电平信号),然后释放总线,
;
;进入接收状态(RX)。单线总线由5K 上拉电阻拉到高电平。探测到I/O 引脚上的上升沿后
;
;DS1820 等待15~60μs,然后发出存在脉冲(一个60~240μs 的低电平信号)。
;
;具体看" 18b20"文档里的 " 单线复位脉冲时序和1-wire presence detect "的时序图
;对着18B20的复位时序图就看明白了
;--------------------------------------------------------------------------------------------------------------------*/
;
RESET_PULSE:
RESET: SETB DATA_BUS
NOP
NOP
CLR DATA_BUS
MOV R7, #255
DJNZ R7, $
SETB DATA_BUS
MOV R7, #30
DJNZ R7, $
JNB DATA_BUS, SETB_FLAG
CLR FLAG
AJMP NEXT
SETB_FLAG:
SETB FLAG
NEXT: MOV R7, #120
DJNZ R7, $
SETB DATA_BUS
JNB FLAG, RESET
RET

;写命令 同样对着写时序图看
WRITE: SETB DATA_BUS ;数据线置1
MOV R6, #8
CLR C
WRITING:
CLR DATA_BUS
MOV R7, #5
DJNZ R7, $
RRC A
MOV DATA_BUS, C
MOV R7, #30H
DJNZ R7, $
SETB DATA_BUS
NOP
DJNZ R6, WRITING
RET

;读命令

READ: SETB DATA_BUS
MOV R0, #TEMP_L
MOV R6, #8
MOV R5, #2
CLR C
READING:
CLR DATA_BUS
NOP
NOP
SETB DATA_BUS
NOP
NOP
NOP
NOP
MOV C, DATA_BUS
RRC A
MOV R7, #30H
DJNZ R7, $
SETB DATA_BUS
DJNZ R6, READING
MOV @R0, A
INC R0
MOV R6, #8
SETB DATA_BUS
DJNZ R5, READING
RET

;循环显示段位
DISPLAY:
MOV R4, #50

DIS_LOOP:
MOV P2,#00H
MOV A, TEMP_DP
MOV DPTR, #TABLE_DP ;真不知这TABLE_DP能干什么,不显示负号时加上后还会显示255.9.
MOVC A, @A+DPTR ;现在看来必须得加上他,否则添加了负号处理并显示后会间歇性的显示-01.8. 很奇怪这是为什么
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.3
LCALL D1MS
CLR P2.3

MOV A, TEMP_GE
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
CLR P0.7
SETB P2.2
LCALL D1MS
CLR P2.2

MOV A, TEMP_SHI
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
LCALL D1MS
CLR P2.1

JNB NEG,BAI
MOV A,#0BFH
MOV P0,A
SETB P2.0
LCALL D1MS
CLR P2.0
;AJMP NEXTT

BAI: MOV A, TEMP_BAI
CJNE A, #0, SKIP
AJMP NEXTT
SKIP: MOV A, TEMP_BAI
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
LCALL D1MS
CLR P2.0
NEXTT: NOP
DJNZ R4, DIS_LOOP
RET

KEYSCAN:
JB KEY_HUAN,KEY2
LCALL D2MS
JB KEY_HUAN,KEY2
CPL TURN
INC MARK
MOV A,MARK
CJNE A,#03H,KEY2
MOV MARK,#00H

KEY2: JNB TURN, OVER

JB KEY_A,KEY3
LCALL D2MS
JB KEY_A,KEY3
MOV A,MARK
CJNE A,#01H,N1
INC T_UP
N1: MOV A,MARK
CJNE A,#02H,OVER
INC T_DOWN

KEY3: JB KEY_D,OVER
LCALL D2MS
JB KEY_D,OVER
MOV A,MARK
CJNE A,#01,N2
DEC T_UP
N2: MOV A,MARK
CJNE A,#2,OVER
DEC T_DOWN
OVER:
RET

/* ------------------------------------------------------------------------------------------
当温度转换命令发布后,经转换所得的温度值以二字节补码的形式存放在高速暂存存储器的第0、1个字节。
;单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
;对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
;数据处理
--------------------------------------------------------------------------------------------*/
PROCESS:
MOV A,MARK
CJNE A,#01H,TP1
MOV A,T_UP
AJMP SEP
TP1:MOV A,MARK
CJNE A,#02H,TP2
MOV A,T_DOWN
AJMP SEP
TP2: MOV R7, TEMP_L ;取二进制温度最低四位,即温度的小数位。
MOV A, #0FH
ANL A, R7
MOV TEMP_DP,A ;小数位存到TEMP-DP中。

MOV R7, TEMP_L ;取二进制温度整数部分低四位。
MOV A, #0F0H
ANL A, R7
SWAP A
MOV TEMP_L, A

MOV R7, TEMP_H ;取二进制温度整数部分高四位
MOV A, #0FH
ANL A, R7
SWAP A
ORL A, TEMP_L ;温度的整数位在A,
MOV TEMP_L,A ;暂存当前温度值

;比较温度是否超过报警温度。
CJNE A,T_UP,NEQ1
NEQ1: JC NUP
CLR P3.3
AJMP TP
NUP:SETB P3.3
MOV A,TEMP_L
CJNE A,T_DOWN,NEQ2
NEQ2: JNC NDOWN
CLR P3.4
AJMP TP
NDOWN:SETB P3.4

TP: MOV A,TEMP_L
MOV R7, #80H ;判断是否为负数。即温度是否为零下
ANL A, R7
CJNE A, #00H,NG
CLR NEG
MOV A,TEMP_L
AJMP SEP
NG: SETB NEG
MOV A,TEMP_L
CPL A
INC A

SEP:
MOV B, #64H
DIV AB ;
MOV TEMP_BAI,A
MOV A, #0AH
XCH A, B
DIV AB
MOV TEMP_SHI,A
MOV TEMP_GE,B

RET

D1MS:
MOV R7,#250
DJNZ R7,$
RET

D2MS:
MOV R6, #3
LOOP3: MOV R5, #250
DJNZ R5, $
DJNZ R6, LOOP3

RET

TABLE_DP:
DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB 06H,07H,08H,08H,09H,09H

TABLE_INTER:
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

END

‘肆’ 基于单片机的数字温度计设计

按你的要求设计了程序并且通过ProteUS仿真
无偿提供原理图,ProteUS仿真工程(可运行),供参考运行效果,及原理图的设计。
推荐:01 基于单片机的数字报警温度计( http://ishare.iask.sina.com.cn/f/11655563.html )

; 源程序为汇编
; 实时显示温度
; 高于高限,低于低限,进行声光报警
; 温度高低限可自由设定

; 上电显示 543210
; 读出温度后实时显示温度
; 温度高于上限温度时,显示"HH****", 并进行声光报警
; 温度低于下限温度时,显示"LL****", 并进行声光报警
; 设定键 进行高低限设定 循环为 "实时温度" “L ***” “H ***”
; 可用+ -键进行修改报警值

‘伍’ 单片机实时温度显示系统的设计

各芯片的驱动写好后,直接在LCD1602显示即可,要循环显示程序。校准时用if语句,数据类型要static

‘陆’ 单片机仿真中既能测物体温度又能测人体温度怎么设计

单片机的ad转换
用单片机做温度测试,可以用单片机的ad转换。通过感温头的电阻和上啦电阻的分压。到单片机的ad端口就可以读取。

‘柒’ 基于单片机的温度数据采集系统设计

单片机课程设计任务书

题目:基于单片机的温度数据采集系统设计
一.设计要求
1.被测量温度范围:0~500℃,温度分辨率为0.5℃。
2.被测温度点:4个,每2秒测量一次。
3.显示器要求:通道号1位,温度4位(精度到小数点后一位)。
显示方式为定点显示和轮流显示。
4.键盘要求:
(1)定点显示设定;(2)轮流显示设定;(3)其他功能键。
二.设计内容
1.单片机及电源管理模块设计。
单片机可选用AT89S51及其兼容系列,电源管理模块要实
现高精密稳压输出,为单片机及A/D转换器供电。
2.传感器及放大器设计。
传感器可以选用镍铬—镍硅热电偶(分度号K),放大器要实现热电偶输出的mV级信号到A/D输入V级信号放大。
3.多路转换开关及A/D转换器设计。
多路开关可以选用CD4052,A/D可选用MC14433等。
4.显示器设计。
可以选用LED显示或LCD显示。
5.键盘电路设计。
实现定点显示按键;轮流显示按键;其他功能键。
6.系统软件设计。
系统初始化模块,键盘扫描模块,显示模块,数据采集模块,标度变换模块等。

引言:
在生产和日常生活中,温度的测量及控制十分重要,实时温度检测系统在各个方面应用十分广泛。消防电气的非破坏性温度检测,大型电力、通讯设备过热故障预知检测,各类机械组件的过热预警,医疗相关设备的温度测试等等都离不开温度数据采集控制系统。
随着科学技术的发展,电子学技术也随之迅猛发展,同时带动了大批相关产业的发展,其应用范围也越来越广泛。近年来单片机发展也同样十分迅速,单片机已经渗透到工业、农业、国防等各个领域,单片机以其体积小,可靠性高,造价低,开发周期短的特点被广泛推广与应用。传统的温度采集不仅耗时而且精度低,远不能满足各行业对温度数据高精度,高可靠性的要求。温度的控制及测量对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到重要作用。在单片机温度测量系统中关键是测量温度,控制温度和保持温度。温度测量是工业对象的主要被控参数之一。本此题目的总体功能就是利用单片机和热敏原件实现温度的采集与读数,利用五位LED显示温度读数和所选通道号,实现热电转化,实现温度的精确测量。本设计是以Atmel公司的AT89S51单片机为控制核心,通过MC14433模数转换对所测的温度进行数字量变化,且通过数码管进行相应的温度显示。采用微机进行温度检测,数字显示,信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要作用。
目录:
一、系统总体功能及技术指标的描述........................................ 5
二、各模块电路原理描述............................................................. 5
2.1单片机及电源模块设计...................................................... 5
2.2、AT89S51引脚说明.......................................................... 7
2.3、数据采集模块设计........................................................ 11
2.4、多路开关......................................................................... 12
2.5、放大器............................................................................. 15
2.6、A/D转换器..................................................................... 16
2.7、显示器设计..................................................................... 21
2.8、键盘电路设计................................................................. 22
2.9、电路总体设计图........................................................... 22
三、软件流程图 ...................................................................... 24
四、程序清单.............................................................................. 25
五、设计总结及体会.................................................................... 31
六、参考资料................................................................................ 32

一、系统总体功能及技术指标的描述
1. 系统的总体功能:
温度数据采集系统,实现温度的采集与读书,利用五位LED显示温度读数和所选通道号,实现热电转化的原理过程。
被测量温度范围:0~500℃,温度分辨率为0.5℃。被测温度点4个,每2秒测量一次。显示器要求:通道号1位,温度4位(精度到小数点后一位)。显示方式为定点显示和轮流显示,可以通过按键改变显示方式。
2. 技术指标要求:
1.被测量温度范围:0~500℃,温度分辨率为0.5℃。
2.被测温度点:4个,每2秒测量一次。
3.显示器要求:通道号1位,温度4位(精度到小数点后一位)。
显示方式为定点显示和轮流显示。
4.键盘要求:
(1)定点显示设定;(2)轮流显示设定;(3)其他功能键。
二、各模块电路原理描述
2.1单片机及电源模块设计
如图所示为AT89S51芯片的引脚图。兼容标准MCS-51指令系统的AT89S51单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系统和引脚兼容。
AT89S51单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。AT89S51具有PDIP、TQFP和PLCC三种封装形式[8]。

图5.1-1 AT89S51引脚图

上图就是PDIP封装的引脚排列,下面介绍各引脚的功能。
2.2、AT89S51引脚说明
P0口:8位、开漏级、双向I/O口。P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。
P1口:8位、双向I/0口,内部含有上拉电阻。P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。
P2口:具有内部上拉电阻的8位双向I/O口。P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。CPU访问外部16位地址的存储器时,P2口提供高8位地址。当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。在与FLASH并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O口功能外,还有替代功能,如表5.3-1所示。

表5.3-1 P3口的替代功能

引脚

符号

说明

P3.0

RXD

串行口输入

P3.1

TXD

串行口输出

P3.2

/INT0

外部中断0

P3.3

/INT1

外部中断1

P3.4

T0

T0定时器的外部的计数输入

P3.5

T1

T1定时器的外部的计数输入

P3.6

/WR

外部数据存储器的写选通

P3.7

/RD

外部数据存储器的读选通

RST:复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。
ALE/ :当访问外部存储器时,ALE(允许地址锁存)是一个用于锁存地址的低8位字节的书粗脉冲。在Flash 编程期间,此引脚也可用于输入编程脉冲()。在正常操作情况下,ALE以振荡器频率的1/6的固定速率发出脉冲,它是用作对外输出的时钟,需要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。如果希望禁止ALE操作,可通过将特殊功能寄存器中位地址为8EH那位置的“0”来实现。该位置的“1”后。ALE仅在MOVE或MOVC指令期间激活,否则ALE引脚将被略微拉高。若微控制器在外部执行方式,ALE禁止位无效。
:外部程序存储器读选取通信号。当AT89S51在读取外部程序时, 每个机器周期 将PSEN激活两次。在此期间内,每当访问外部数据存储器时,将跳过两个信号。
/Vpp:访问外部程序存储器允许端。为了能够从外部程序存储器的0000H至FFFFH单元中取指令,必须接地,然而要注意的是,若对加密位1进行编程,则在复位时,的状态在内部被锁存。
执行内部程序应接VCC。不当选择12V编程电源时,在Flash编程期间,这个引脚可接12V编程电压。
XTAL1:振荡器反向放大器输入端和内部时钟发生器的输入端。
XTAL2:振荡器反相放大器输出端[9]。

电源模块设计
在影响单片机系统可靠性的诸多因素中,电源干扰可谓首屈一指,据统计,计算机应用系统的运行故障有90%以上是由电源噪声引起的。为了提高系统供电可靠性,交流供电应采用交流稳压器,防止电源的过压和欠压,直流电源抗干扰措施有采用高质量集成稳压电路单独供电,采用直流开关电源,采用DC-DC变换器。本次设计决定采用MAXim公司的高电压低功耗线性变换器MAX 1616作为电压变换,采用该器件将输入的24V电压变换为5V电压,给外围5V的器件供电。MAX1616具有如下特点:
1.4~28V电压输入范围。
2.最大80uA的静态工作电流。
3.3V/5V电压可选输出。
4.30mA输出电流。
5.2%的电压输出精度。
电源管理模块电路图如下:

本电路采用该器件将输入的24V电压变成5V电压,给外围5V的器件供电,其中二极管D1是保护二极管,防止输入电压接反可能带来的对电路的影响和破坏。

‘捌’ 基于单片机的温度控制系统的设计

利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理。

在LCD液晶上显示当前环境温度值、预设温度值、使用者设定的温度差以及目前风扇所处的档位。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。

同时采用PWM脉宽调制方式来改变直流风扇电机的转速。

并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。通过另一个按键控制温度差的大小。

设有红外热释传感器检测环境范围内是否有人,如果有人确定出风方向,如果无人,降低转速或一定时间内自动关闭。

回答

正如你所说的,一共用了DS18B20模块,LCD模块,红外传感模块,按键,直流电机模块,程序方面只有一个PWM。现在一一为你分析:

DS18B20模块:

下图是它的原理图,采用单总线来进行开发,不像电赛的哪个温度传感器需要AD转换,它是可以直接传出数字信号的。

阅读全文

与温度设计单片机相关的资料

热点内容
中企动力服务器与阿里云服务器 浏览:242
java调用另一个类中的方法 浏览:846
三菱空调压缩机型号 浏览:772
南诏pdf 浏览:747
windows如何代码bat启动服务器 浏览:456
软件太卡与服务器有什么关系 浏览:402
给心理治疗师pdf 浏览:222
robinhood加密交易条件 浏览:315
卫生间解压方法 浏览:454
u盘如何做加密文件放照片 浏览:331
文件夹自己加了exe 浏览:262
小猪cms直播系统源码 浏览:878
山东广电云服务器 浏览:354
javadate与mysqldate 浏览:244
javalong比较 浏览:12
加密大师看不见加密文件 浏览:307
想做一个业余程序员 浏览:793
python选出行 浏览:249
cat命令windows 浏览:910
python算术游戏 浏览:532