⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20cewen.c

📁 C51 程序练习
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^7;
sbit smg1=P0^0;
sbit smg2=P0^1;
sbit smg3=P0^2;


uchar temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//0到F表格
void delay(uint z);
void init();
void write_byte(uchar dat);
uchar read_byte(void);
uchar readtemperature(void);//读出温度函数
void display(void);
void main()
{
	while(1)
	{
		temp=readtemperature();
		display();
	}	
}

void delay(uint z)//延时子程序
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

void init()
{
	uchar n;
	DQ=1;
	delay(8);
	DQ=0;
	delay(80);
	DQ=1;
	delay(8);
	n=DQ;
	delay(4);
	
}

void write_byte(uchar dat)//低位在前
{
	uchar i;
	for(i=0;i<8;i++)
	{
		DQ=0;
		DQ=dat&0x01;
		delay(4);
		DQ=1;
		dat>>=1;//右移一位

	}
	delay(4);
}

uchar read_byte()
{
	uchar i,value;
	for(i=0;i<8;i++)
	{
		DQ=0;
		value>>=1;
		DQ=1;
		if(DQ)
		value=0x80;
		delay(4);
		
	}
	return value;
}

uchar readtemperature(void)
{
	uchar a,b;
	init();
	write_byte(0xcc);//跳过ROM
	write_byte(0x44);	//启动温度检测
	delay(300);
	
	init();
	write_byte(0xcc);
	write_byte(0xbe);//读取	
	a=read_byte();
	b=read_byte();//按顺序读取
	b<<=4;
	b+=(a&0xf0)>>4;//a&0xf0屏蔽第四位
	return b;//除了小数的都在B里
}

void display(void)
{
	smg3=0;
	smg2=0;
	smg1=0;
	P1=table[temp%10];
	delay(20);
	smg2=0;
	smg1=1;
	P1=table[temp/10];
	delay(20);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -