这个电路很简单,我说一下就可以了。数字式温度传感器用最常用的DS18B20,它只有3个管脚,一个接电源,一个接地,另一个接8051单片机就可以了。温度值用数码管显示。这样整个电路就接好了。如果楼主觉得我回答的可以别忘了给我加分哦,为了你的问题我花费了半天的时间啊。程序如下:
#include<reg52h>
#include <intrinsh>
#define uchar unsigned char
#define uint unsigned int
#define Self_Define_ISP_Download_Command 0x3D
sfr IAP_CONTR=0xE7;
sbit DQ = P3^5; //DS18B20接入口
uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90} ;
char bai,shi,ge; //定义变量
void Init_Com(void)
{
TMOD = 0x20;
SM0=0;
SM1=1;
REN=1;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
EA=1;
ES=1;
}
/延时子函数/
void delay(uint num)
{
while(num--) ;
}
/DS18b20温度传感器函数/
Init_DS18B20(void) //传感器初始化
{
uchar x=0;
DQ = 1; //DQ复位
delay(10); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us //450
DQ= 1; //拉高总线
delay(20);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(30);
}
//读一个字节
ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay(8);
}
return(dat);
}
//写一个字节
WriteOneChar(unsigned char dat)
{
uchar i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(10);
DQ = 1;
dat>>=1;
}
delay(8);
}
//读取温度
int ReadTemperature(void)
{
uchar a,b;
uint t;
float tt;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的 *** 作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的 *** 作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
tt=(b256+a)00625100;//2个8位合成16位
t=(int)tt;
/t=b;
t<<=8;
t=t|a;
tt=t00625;
t= tt10+05; /
return(t);
}
/显示子函数/
void display(int bai,int shi,int ge)
{
int temp;
temp=ReadTemperature();//读温度
bai=temp/1000;//显示百位
shi=temp%1000/100;//显示十位
ge=temp%100/10;//显示个位
//xiao=temp%10;
P2=0xfd; //位选
P0=0X7f; //显示小数点
delay(500);
P2=0xfe;
P0=table[bai];//显示千位
delay(500);//一小段延时动态显示
P2=0xfd;
P0=table[shi];//显示百位
delay(500);
P2=0xfb;
P0=table[ge];//显示十位
delay(500);
P2=0xf7;// 显示°
P0=0x9c;
// delay(50);
}
void main()
{
Init_Com();
while(1)
{
display(bai,shi,ge);//显示函数
}
}
void UART_Interrupt_Receive(void) interrupt 4
{
unsigned char k=0;
unsigned int a,b;
if(RI==1)
{
RI=0;
k=SBUF;
if(k==Self_Define_ISP_Download_Command)
{
for(a=1000;a>0;a--)
for(b=100;b>0;b--); //延时约1S
IAP_CONTR = 0x60;
}
}
else
{
TI=0;
}
}
前言
第1章绪论
11单片机的发展
1280C51单片机分类
13单片机应用领域和发展趋势
131单片机的应用领域
132单片机的发展趋势
第2章80C51单片机硬件结构和原理
2180C51的基本结构
21180C51的基本结构框图
212芯片的内部结构特点
2280C51的引脚及其功能
221电源引脚V和Vss
222时钟电路引脚XTALl和XTAL2
223控制信号引脚ALE、PSEN、EA和RST
224输入/输出引脚
2380C51CPU结构和时序
231运算器
232控制器
23380C51时钟系统
234CPU时序
24存储器结构和地址空间分配
241程序存储器地址空间分配
242数据存储器地址空间分配
2580C51工作方式
251复位方式
252程序执行方式
253节电工作方式
254掉电保护方式
第3章80C51指令系统
31指令与汇编语言
311指令与程序设计语言
312指令格式及系统中使用的符号意义
32寻址方式
321寻址方式
322寻址空间
33指令系统
331数据传送指令
332算术运算指令
333逻辑运算指令
334程序控制转移指令
335位 *** 作(Bool类型)指令
第4章80C51单片机的功能资源
41并行I/O接口
411P0口
412P1口
413P2口
414P3口
42定时器/计数器
421概述
422定时器T0和T1的结构和功能
423定时器的工作方式及应用
424定时器/计数器T2
425定时器,计数器的编程和使用
43串行接口
431串行口结构和工作模式
432串行口的编程和举例
44中断系统
441中断基本概念
442中断响应及处理过程
443中断程序举例
第5章单片机C51程序设计基础
51程序设计语言概述
511汇编语言
512C51语言
52C51标识符和关键字
521标识符
522关键字
53C51基本数据类型和运算符
531基本数据类型
532运算符
54数组
541一维数组
542多维数组
543字符数组
55指针
551指针与地址
552指针变量的定义
553指针变量引用
554数组的指针
555函数的指针
556指针数组
56结构体和联合体
561结构体概念和定义
562结构体的引用
563联合体概念和定义
564联合体的引用
565枚举
57型定义和预处理
571类型定义
572预处理
58语句和程序设计基本结构
581语句
582顺序结构
583选择结构
584循环结构
59函数
591函数定义
592函数调用
593中断服务函数
594局部变量与全局变量
595变量的存储种类
第6章典型外围接口设计
61键盘与单片机接口设计
611独立式键盘
612行列式键盘
62显示器接口
621LED显示器
622LED显示器接口实例
623LCD显示器
624LCD显示器接口实例
63显示接口芯片MAX8279
6318279内部结构及基本工作原理
6328279引脚功能
6338279工作方式
6348279命令字
6358279状态字
6368279应用举例
64D/A/AD芯片与单片机接口设计
641D/A转换接口电路
642A/D转换接口电路
第7章80C51单片机系统扩展
7180C51系统扩展概述
71180C:51最小应用系统
712片外总线结构
713片选
714地址锁存
715扩展存储器时应考虑的几个问题
72外部存储器扩展
721程序存储器的扩展
722数据存储器的扩展
723多片存储器的扩展
73并行I/O接口的扩展
731简单并行I/O接口扩展
7328255A可编程并行I/0接口扩展
74串行接口的扩展
7418251串行口扩展芯片
742825l应用实例
第8章80C51单片机应用系统的抗干扰技术
81可靠性与抗干扰技术概述
811干扰窜入单片机系统的主要途径
812干扰形成的基本要素
813干扰的耦合方式
82硬件抗干扰技术
821抑制干扰源
822切断干扰传播路径
823提高敏感器件的抗干扰性能
824其他常用抗干扰措施
83软件抗干扰技术
831指令冗余
832软件“陷阱”
833软件“看门狗”技术
834设置程序运行标志,拦截“跑飞”程序
第9章ProteIDXP电路板设计软件
第10章KeilC51单片机开发软件入门
第11章基于80C51的计量泵流量控制系统设计
第12章80C51单片机在电液位置伺服系统上的应用
附录AMCS-51指令表
附录B
TEMP DATA 30H ;定义一个临时数据
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#NUMB ;将数据存放在表中
MOV R3,#6
MOV R4,#0
LOOP: MOV A,R4
MOVC A,@A+DPTR ;从表中取数
MOV TEMP,A ;将数据放入temp,此时
;第一个数的低位在temp的低三位
INC R4
MOV A,R4
MOVC A,@A+DPTR ;从表中取下一个数据
RR A
RR A
RR A
RR A ;循环移位,将这个数据的
;有效三位放到一个byte的456bit位
ORL A,TEMP ;生成符合数据
MOV P0,A ;将数据放到p0口,其中P00~P02接一个
;译码器,P04~P06接另一个译码器
INC R4
MOV R7,#0FFH
BACK: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,BACK ;产生延时,具体时间需要
;结合自己单片机的机械周期进行改动
DJNZ R3,LOOP
SJMP MAIN
NUMB:
DB 00H,0AH,00H,0AH,00H,0AH,00H,04H,00H,04H,00H,04H
END
unsigned
char
n;
sbit
gate1=p1^0;
sbit
gate2=p1^1;
main()
{
n=0;
th1=0xff;
tl1=0x05;
//定时器250us产生一次中断
mod
=
0x10;
//定时器1工作于模式1,(用工作于模式2也可以,而且更
简便)
tr1=1;
//使能定时器1
et0=1;
//开中断
ea=1;
//开全局中断
while(1)
{;}
}
void
timer(void)
interrupt
3
{
th1=0xff;
tl1=0x05;
//定时器250us产生一次中断
gate2=!gate2;
//产生500us方波
n++;
if(n==4)
{
n=0;
gate1=!gate1;
//产生2ms方波
}
}
以上就是关于用8051单片机设计一数字式温度计 的电路图 有程序的最好 谢了全部的内容,包括:用8051单片机设计一数字式温度计 的电路图 有程序的最好 谢了、80C51单片机原理、开发与应用实例的目录_80c51单片机内部结构的组成、关于一个8051单片机的编程~求大神指导!!跪求!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)