数码管显示DS18B20温度

 时间:2024-10-26 09:22:40

四位共阴极数码管显示DS18B20温度单片机类型:STC12C5A60S2

工具/原料

keil4

单片机

方法/步骤

1、#include"includes.h"#include"ds18b20.h"#include"Delay_time.h"#defineFOSC11059200/********段选IO口**********/sbitSMG1=P3^4;sbitSMG2=P3^5;sbitSMG3=P3^6;sbitSMG4=P3^7;INT16Ua,b,time,flag=0; INT16Ua,b,c,temp;unsignedcharcodetab[]={0x3f,0x05,0x5b,0x4f,0x65,0x6e,0x7e,0x07,0x7f,0x6f}; //显示0-9voiddelay(unsignedintn){ unsignedchari,j; for(i=n;i>0;i--) for(j=0;j<110;j++);}/*--------------------------------------------------------*///voidUsart_Init(INT16UBaud)//{ // 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****函数描述:温湿度显示函数****返回值:******************/voidTEMP_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;}voidmain(){ inti; 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"sbitds=P2^2;INT16Uvalue; //存放读取的温度值/***********************函数名称: ds_Init***函数描述:初始化函数让DS18B20在一段时间内低电平,然后一段相对短时间内高电平即可启动********************/INT8Uds_Init(){INT8Uerror=0;ds=1;Delay_50us();ds=0;Delay_500us();ds=1;Delay_50us();error=ds;Delay_Ms(1);returnerror;}/***********************函数名称:readBit***函数描述:读一位数据函数读取一位,让DS18b20一个周期内低电平,然后两个周期内高电平********************/bitreadBit(){ bitb; ds=0; Delay_15us(); ds=1; Delay_15us(); b=ds; Delay_70us(); returnb;}/***********************函数名称:readByte***函数描述:读取一字节数据函数********************/INT8UreadByte(){ INT16Ui; INT8Uj,dat; dat=0; for(i=0;i<8;i++) { j=readBit(); //最先读出最低位数据 dat=(j<<7)|(dat>>1); } returndat;}/***********************函数名称:writeByte***函数描述:写一字节数据函数********************/voidwriteByte(INT8Udat){ INT8Uj; bitb; 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发送温度转换命令********************/voidsendChangeCmd(){ INT8Uerror; error=ds_Init(); //初始化DS18B20 Delay_Ms(10); //延时10ms writeByte(0xcc); //写入跳过序列号命令 writeByte(0x44); //写入温度转换命令}/***********************函数名称:sendReadCmd***函数描述:向DS18B20发送读取数据命令********************/voidsendReadCmd(){ INT8Uerror; error=ds_Init(); //SBUF=error; Delay_Ms(10); writeByte(0xcc); //写入跳过序列号命令 writeByte(0xbe); //写入温度转换命令}/***********************函数名称:getTmpValue***函数描述:获取当前温度值********************/INT16UgetTmpValue(){ floatt; INT8Ulow,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; returnvalue;}

3、#include"includes.h"#include"Delay_Time.h"/*******************************************************函数名称:Delay_Ms函数描述:毫秒级延时函数1T模式********************************************************/voidDelay_Ms(INT16Ums){ INT16Ui,j; for(i=ms;i>0;i--) for(j=125;j>0;j--);}///*******************************************************//函数名称:Delay_Us//函数描述:微秒级延时函数//********************************************************///voidDelay_Us(INT8Uus)//{// while(us--);//}//voidDelay_7us_1T()//{// unsignedchari;// _nop_();// i=16;// while(--i);//}/////*****************************************//***函数名: Delay_10Us()//***函数描述:延时//***返回值:NULL//*****************************************///voidDelay_10us_1T()//延时10us左右//{// unsignedchari;// _nop_();// _nop_();// _nop_();// i=24;// while(--i);//}////voidDelay18Ms_1T() //n=3t-3//{// INT8Ui,j,k;// _nop_();// _nop_();// i=1;// j=194;// k=159;// do// {// do// {// while(--k);// }while(--j); // }while(--i);//}/*******************************************************函数名称:Delay_15us函数描述:微秒级延时函数********************************************************/voidDelay_15us() //@11.0592MHz{ unsignedchari; _nop_(); _nop_(); i=38; while(--i);}/*******************************************************函数名称:Delay_50us函数描述:微秒级延时函数********************************************************/voidDelay_50us() //@11.0592MHz{ unsignedchari,j; _nop_(); _nop_(); _nop_(); i=1; j=133; do { while(--j); }while(--i);}/*******************************************************函数名称:Delay_70us函数描述:微秒级延时函数********************************************************/voidDelay_70us() //@11.0592MHz{ unsignedchari,j; i=1; j=189; do { while(--j); }while(--i);}/*******************************************************函数名称:Delay_500us函数描述:微秒级延时函数********************************************************/voidDelay_500us() //@11.0592MHz{ unsignedchari,j; i=6; j=93; do { while(--j); }while(--i);}

74ls138扩展为4线-16线译码器 74LS00怎么接 信号发生器的使用方法 Z变换定义以及怎样进行Z变换? 74ls20的逻辑功能是什么
热门搜索
孙骁骁图片 店铺装修图片 新房装修图片 狗肉火锅图片 另类美女图片