数码管显示DS18B20温度

 时间:2024-10-11 20:51:40

1、#include "includes.h"#include "ds18b20.h"#include "Delay_time.h"#define FOSC 11059200 /********段选IO口**********/sbit SMG1=P3^4;sbit SMG2=P3^5;sbit SMG3=P3^6;sbit SMG4=P3^7;INT16U a,b,time,flag = 0; INT16U a,b,c,temp;unsigned char code tab[]={0x3f,0x05,0x5b,0x4f,0x65,0x6e,0x7e,0x07,0x7f,0x6f}; //显示0-9 void delay(unsigned int n){ unsigned char i,j; for(i=n;i>0;i--) for(j=0;j<110;j++);}/*--------------------------------------------------------*///void Usart_Init( INT16U Baud)//{ // SCON |= 0x50; //SM0=0,SM1=1 ,???????? REN=1?// PCON &= 0x7f;// AUXR |= 0x40;// AUXR &= 0xFE;// TMOD |= 0x21; // TH1 = 256-FOSC/Baud/32;// TL1 = TH1;// TR1 = 1; // ET1 = 0;// ES = 1; // EA = 1;//} /**********************函数名称:TEMP_show****函数描述:温湿度显示函数****返回值:******************/void TEMP_show(){ SMG4 = 1; //显示'C' P1 = 0x3a; delay(5); SMG4 = 0; SMG1 = 1; P1 = tab[a]; delay(5); SMG1 = 0; SMG2 = 1; P1 = tab[b] | 0x80; delay(5); SMG2 = 0; SMG3 = 1; P1 = tab[c]; delay(5); SMG3 = 0;}void main(){ int i; P3=0xff; //Usart_Init(9600); while(1) { sendChangeCmd(); temp = getTmpValue(); a = temp/100; //显示十位 b = temp%100/10; //显示个位 c = temp%100%10; //显示小数位 SBUF = a; delay(15); SBUF = b; delay(15); SBUF = c; delay(15); for(i=0;i<3000;i++) //大约3s动态刷新一次 { TEMP_show(); } }}

2、#include "includes.h"#include "ds18b20.h"#include "Delay_Time.h"sbit ds = P2^2;INT16U value; //存放读取的温度值/***********************函数名称: ds_Init***函数描述:初始化函数让DS18B20在一段时间内低电平,然后一段相对短时间内高电平即可启动********************/INT8U ds_Init(){ INT8U error=0; ds=1; Delay_50us(); ds=0; Delay_500us(); ds=1; Delay_50us(); error=ds; Delay_Ms(1); return error;}/***********************函数名称:readBit***函数描述:读一位数据函数读取一位,让DS18b20一个周期内低电平,然后两个周期内高电平********************/bit readBit(){ bit b; ds=0; Delay_15us(); ds=1; Delay_15us(); b=ds; Delay_70us(); return b;}/***********************函数名称: readByte***函数描述: 读取一字节数据函数********************/INT8U readByte(){ INT16U i; INT8U j,dat; dat=0; for(i=0;i<8;i++) { j=readBit(); //最先读出最低位数据 dat=(j<<7)|(dat>>1); } return dat;}/***********************函数名称:writeByte***函数描述:写一字节数据函数********************/void writeByte(INT8U dat){ INT8U j; bit b; for(j=0;j<8;j++) { b=dat&0x01; dat>>=1; //写“1”,低电平保持2个周期,高电平保持8个周期 if(b) { Delay_70us(); ds=0; Delay_15us(); ds=1; Delay_70us(); } else //写"0",低电平保持8个周期,高电平保持2个周期 { ds=0; Delay_70us(); ds=1; Delay_15us(); } }}/***********************函数名称:sendChangeCmd***函数描述: 向DS18B20发送温度转换命令********************/void sendChangeCmd(){ INT8U error; error=ds_Init(); //初始化DS18B20 Delay_Ms(10); //延时10ms writeByte(0xcc); //写入跳过序列号命令 writeByte(0x44); //写入温度转换命令}/***********************函数名称:sendReadCmd***函数描述:向DS18B20发送读取数据命令********************/void sendReadCmd(){ INT8U error; error=ds_Init(); // SBUF=error; Delay_Ms(10); writeByte(0xcc); //写入跳过序列号命令 writeByte(0xbe); //写入温度转换命令}/***********************函数名称:getTmpValue***函数描述: 获取当前温度值********************/INT16U getTmpValue(){ float t; INT8U low,high; sendReadCmd(); //连续读取两个字节数据 low=readByte(); high=readByte(); value=high; value<<=8; value|=low; //DS18B20的精确度为0.0625度,即读回的数据最低位代表0.0625度 t=value*0.0625; //将读数扩大10倍,显示小数点后一位,并对其小数位进行四舍五入 value=t*10+0.5; return value;}

3、#include "includes.h"#include "Delay_Time.h"/*******************************************************函数名称:Delay_Ms函数描述:毫秒级延时函数 1T 模式********************************************************/void Delay_Ms(INT16U ms) { INT16U i,j; for(i=ms;i>0;i--) for(j=125;j>0;j--);}///*******************************************************//函数名称:Delay_Us//函数描述:微秒级延时函数//********************************************************///void Delay_Us(INT8U us)//{// while(us--); //}//void Delay_7us_1T()//{// unsigned char i;// _nop_();// i = 16;// while (--i);//}//// /*****************************************//***函数名: Delay_10Us()//***函数描述:延时//***返回值: NULL//*****************************************///void Delay_10us_1T() //延时10us左右//{// unsigned char i;// _nop_();// _nop_();// _nop_();// i = 24;// while (--i);//}////void Delay18Ms_1T() //n = 3t -3//{// INT8U i,j,k;// _nop_();// _nop_();// i = 1;// j = 194;// k = 159;// do// {// do// {// while(--k);// }while(--j); // }while(--i);//}/*******************************************************函数名称:Delay_15us函数描述:微秒级延时函数********************************************************/void Delay_15us() //@11.0592MHz{ unsigned char i; _nop_(); _nop_(); i = 38; while (--i);}/*******************************************************函数名称:Delay_50us函数描述:微秒级延时函数********************************************************/void Delay_50us() //@11.0592MHz{ unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 1; j = 133; do { while (--j); } while (--i);}/*******************************************************函数名称:Delay_70us函数描述:微秒级延时函数********************************************************/void Delay_70us() //@11.0592MHz{ unsigned char i, j; i = 1; j = 189; do { while (--j); } while (--i);}/*******************************************************函数名称:Delay_500us函数描述:微秒级延时函数********************************************************/void Delay_500us() //@11.0592MHz{ unsigned char i, j; i = 6; j = 93; do { while (--j); } while (--i);}

  • 74ls138扩展为4线-16线译码器
  • 74LS00怎么接
  • 信号发生器的使用方法
  • Z变换定义以及怎样进行Z变换?
  • 74ls20的逻辑功能是什么
  • 热门搜索
    我爱足球手抄报 感恩节手抄报图片 关于科技节的手抄报 多彩的民族文化手抄报 法在我心中手抄报 数学家的故事手抄报 清明节文明祭祀手抄报 窗边的小豆豆手抄报 数学手抄报六年级 手抄报a4版面设计图