📄 practise1.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit feng=P2^3;
sbit dq=P2^2;
sbit led=P1^0;
sbit dula=P2^6;
sbit wela=P2^7;
float f_temp;
uint C_temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar code table2[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf
};
/******************延时***************************/
void delay_ms(uint z)
{
uint ii,jj;
for(ii=z;ii>0;ii--)
for(jj=110;jj>0;jj--){}
}
/****************复位与存在***********************/
void reset()
{
uchar tt=00;
dq=0;
tt=250;
while( tt>0 ) tt--;
dq=1;
tt++;tt++;
}
/*
void exist()
{
uchar tt=20;
while(dq==0||tt<0) tt--;//延时或者是检测到了存在信号
if(dq==0)
//delay_us(500);
tt=100;
while( tt>0 ) tt--;
dq=1;
//delay_us(2);
}
*/
/*************************************************/
//写入字节
void write_byte(uchar xx)
{
bit bb;
uchar test=0x01;//*********************************这里可能有问题?
uchar date=xx;
uchar ii=0;
uchar tt=0;
while(ii < 8)
{
bb=test&date;
if(bb)
{
dq=0;
tt=3;
while(tt>0) tt--; //delay_us(8);
dq=1;
tt=30;
while( tt>0 ) tt--; //delay_us(60);
}
else
{
dq=0;
tt=30;
while( tt>0 ) tt--; //delay_us(60);
dq=1;
tt++; tt++; //delay_us(2);
}
++ii;
}
}
bit read_bit()
{
bit bb;
uchar tt=0;
dq=1;
tt++;
dq=0;
tt++; tt++; //delay_us(2);
dq=1;
tt=3;
while(tt>0) tt--; //delay_us(4);
bb=dq;
tt=20;
while(tt>0) tt--; //delay_us(40);
return bb;
}
//读字节
uchar read_byte()
{
uchar byte=0x00;
uchar ii=0;
uchar temp;
uchar tt=0;
//uchar tt=0x01;
while(ii < 8)
{
tt++;
//delay_us(2);
temp=read_bit();
byte=(byte>>1)|(temp<<7);
++ii;
/*
delay_us(2);
temp=read_bit();
byte=byte+temp&tt;
tt<<1;
*/
}
return(byte);
}
/**********************温度************************/
void convert_temper()
{
uchar tt;
reset();
tt=100;
while(tt>0) tt--;
//exist();
write_byte(0xCC); //跳过读ROM操作
write_byte(0x44);//温度转换命令
}
/*uint read_temper()
{
uchar tt;
uchar LSB_temper=0x00;
uchar MSB_temper=0x00;
reset();
//exist();
tt=100;
while(tt>0) tt--;
write_byte(0xCC);
write_byte(0xBE);
LSB_temper=read_byte();
MSB_temper=read_byte();
C_temper=MSB_temper;
C_temper=(C_temper<<8)|LSB_temper;
C_temper=C_temper*0.0625*10;
return C_temper;
}
*/
uint read_temper()
{
uchar a,b;
reset();
delay_ms(1);
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
C_temp=b;
C_temp<<=8;
C_temp=C_temp|a;
f_temp=C_temp*0.0625;
C_temp=f_temp*10+0.5;
f_temp=f_temp+0.05;
return C_temp;
}
/******************响应******************************/
/*void display_temper()
{
uchar xx,yy,zz;
xx=C_temp/100;
yy=C_temp/10%10;
zz=C_temp%10;
wela=1;
P0=table2[0];
wela=0;
//delay_ms(2);
P0=0x00;
dula=1;
P0=table[xx];
dula=0;
delay_ms(5);
P0=0xff;
wela=1;
P0=table2[1];
wela=0;
//delay_ms(2);
P0=0x00;
dula=1;
P0=(table[yy]+0x80);
dula=0;
delay_ms(5);
P0=0xff;
wela=1;
P0=table2[2];
wela=0;
//delay_ms(2);
P0=0x00;
dula=1;
P0=table[zz];
dula=0;
delay_ms(5);
}
*/
void display(uchar num,uchar dat)
{
uchar i;
dula=0;
P0=table[dat];
dula=1;
dula=0;
wela=0;
i=0xFF;
i=i&(~((0x01)<<(num)));
P0=i;
wela=1;
wela=0;
delay_ms(1);
}
void dis_temp(uint t)
{
uchar i;
i=t/100;
display(0,i);
i=t%100/10;
display(1,i);
i=t%100%10;
display(2,i);
}
/*******************************************/
void main()
{
uchar ii;
while(1)
{
convert_temper();
read_temper();
for(ii=0;ii<5;ii++)
{
dis_temp(read_temper);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -