急求教大哥大姐们基于51单片机的数字温度计设计

[复制链接]
查看11 | 回复4 | 2010-3-17 11:48:29 | 显示全部楼层 |阅读模式
我主页上有 18B20的程序
回复

使用道具 举报

千问 | 2010-3-17 11:48:29 | 显示全部楼层
这个不是一句做好,说一句谢谢就能给你的,除非是现成的.......
回复

使用道具 举报

千问 | 2010-3-17 11:48:29 | 显示全部楼层
区区20分,小气得很。发到你邮箱,懒得很。
回复

使用道具 举报

千问 | 2010-3-17 11:48:29 | 显示全部楼层
我有一个精度到0.1℃的程序可以给你参考下 /****************************************//DS18B20温度传感器//****************************************//*****************************************************///包含头文件#include#include/*****************************************************/typedef unsigned char uint8;
//定义8位无符号变量typedef unsigned intuint16; //定义16位无符号变量/*****************************************************///定义引脚(根据硬件改变)sbit BCD4 = P2^7;sbit BCD3 = P2^6;sbit BCD2 = P2^5;sbit BCD1 = P2^4;sbit DQ = P1^3; //温度传感器数据引脚通信定义sbit BEEP = P1^4; //蜂鸣器信号引脚/**********************************************************************************************/const uint8 Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//定义数字显示数组为常量
//0,
1, 2 3
4
5
6
7
8
9 #define C 0xc6
//显示'C', 表示温度符号/************************************************************///全局变量uint16 Htemperature = 0;uint16 Ltemperature = 0;uint8 setupflag = 0; /************************************************************///定义ds18b20,数码管延时子函数void mDelay(uint8 Delay){
while(Delay--);}//定义按键延时子程序void Delay(uint8 Delay){ uint8 i;
for(;Delay>0;Delay--)
{
for(i=0;i0;i--)
{
DQ = 0; //低电平脉冲信号
dat>>=1;//dat右移一位
DQ = 1; //高低平脉冲信号
if(DQ)
{
dat |= 0x80;
}
mDelay(10);//延时
}
return(dat);//返回dat值}/************************************************************///写一个字节void WriteOneChar(uint8 dat){
uint8 i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
DQ = dat&0x01;
mDelay(10);//延时
DQ = 1; //高电平脉冲信号
dat >>= 1;//dat右移一位
}
mDelay(4);}/************************************************************///读取温度uint16 ReadTemperature(void){
uint8 ltemp = 0;
//定义温度高八位
uint8 htemp = 0;
//定义温度低八位
float temp = 0;
mDelay(255);
Init_DS18B20();
//温度传感器DS18B20初始化
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
ltemp = ReadOneChar();//读取温度值低位
htemp = ReadOneChar();//读取温度值高位
temp = htemp;
temp = (htemp Htemperature)
//当温度高于预设最高温度,报警
{
BEEP = 0;
Delay(10);
BEEP = 1;
}
if(CurrentTemp < Ltemperature)
//当温度低于预设最低温度,报警
{
BEEP = 0;
Delay(10);
BEEP = 1;
}
}}
回复

使用道具 举报

千问 | 2010-3-17 11:48:29 | 显示全部楼层
匿名回答 你经典的很
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行