蓝桥杯ds18b20显示小数和整数
Posted 一心向月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯ds18b20显示小数和整数相关的知识,希望对你有一定的参考价值。
main.c文件
#include "stc15f2k60s2.h"
#include "onewire.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code duan[12]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0xff,0xbf;
u16 temp=0;
void delay(u16 i)
while(i--);
void Chan_hc573(chose)
switch(chose)
case 4:
P2 = ( P2 & 0x1f ) | 0x80; break;
case 5:
P2 = ( P2 & 0x1f ) | 0xa0; break;
case 6:
P2 = ( P2 & 0x1f ) | 0xc0; break;
case 7:
P2 = ( P2 & 0x1f ) | 0xe0; break;
P2 = ( P2 & 0x1f ) | 0x00;
void Smg_display(u8 com,u8 dat)
P0=0xff;
Chan_hc573(7);
P0=0x01<<com;
Chan_hc573(6);
P0=dat;
Chan_hc573(7);
void Close_smg()
P0=0x00;
Chan_hc573(6);
P0=0xff;
Chan_hc573(7);
void Display_temp()
Smg_display(0,duan[temp/1000%10]); delay(500);
Smg_display(1,duan[temp/100%10]+0x80); delay(500);
Smg_display(2,duan[temp/10%10]); delay(500);
Smg_display(3,duan[temp%10]); delay(500);
Smg_display(4,duan[10]); delay(500);
Smg_display(5,duan[10]); delay(500);
Smg_display(6,duan[temp/1000%10]); delay(500);
Smg_display(7,duan[temp/100%10]); delay(500);
Close_smg();
void Init_system()
P0=0x00;
Chan_hc573(5);
P0=0xff;
Chan_hc573(4);
void main()
Init_system();
while(1)
temp=ds18b20_read();
Display_temp();
显示小数和整数的区别就是
整数:乘0.0625
保留一位小数:乘0.625
保留两位小数:乘6.25
注意我的底层文件是用于STC89C52RC的,所以延迟函数要扩大10~12倍。
ds18b20.c文件
#include "reg52.h"
#include "onewire.h"
sbit DQ = P1^4; //µ¥×ÜÏß½Ó¿Ú
//µ¥×ÜÏßÑÓʱº¯Êý
void Delay_OneWire(unsigned int t) //STC89C52RC
t *= 12;
while(t--);
//ͨ¹ýµ¥×ÜÏßÏòDS18B20дһ¸ö×Ö½Ú
void Write_DS18B20(unsigned char dat)
unsigned char i;
for(i=0;i<8;i++)
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
Delay_OneWire(5);
//´ÓDS18B20¶ÁÈ¡Ò»¸ö×Ö½Ú
unsigned char Read_DS18B20(void)
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
Delay_OneWire(5);
return dat;
//DS18B20É豸³õʼ»¯
bit init_ds18b20(void)
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
float ds18b20_read()
unsigned char low,hig;
unsigned int temp;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay_OneWire(400);
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
low=Read_DS18B20();
hig=Read_DS18B20();
temp=(hig<<8)|low;
temp=temp*6.25;
return temp;
ds18b20.h头文件
#ifndef __ONEWIRE_H
#define __ONEWIRE_H
float ds18b20_read();
#endif
以上是关于蓝桥杯ds18b20显示小数和整数的主要内容,如果未能解决你的问题,请参考以下文章