📄 succeed.c
字号:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit dq=P2^2;
sbit feng=P2^3;
uint c1_temper,c2_temper;
float f1_temper,f2_temper;
uint L_temper;
uint H_temper;
uchar iccode[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};
void delay_ms(uint z);
void delay_us();
void dq_reset();
void write_cmd(uchar z);
uchar read_temper();
uint get_temper();
uchar read_bit();
void get_firstid();
void get_seconedid();
void write_date(uchar z);
uchar read_date();
void write_bit(uchar dd);
void convert();
void deal_temper();
void deal_ds1();
void deal_ds2();
void display_temper(uint wengdu,uchar fc);
void init1();
void init2();
void warn_temper(uchar dj);
/*******************delaytime********************/
void delay_ms(uint z)//毫秒级的延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_us()//延时微秒
{
_nop_();
}
/********************dqreset**************************/
void dq_reset()//复位
{
uchar t;
dq=0;
for(t=250;t>0;t--);
dq=1;
for(t=100;t>0;t--);
}
/***********************temper*********************/
uchar read_temper()//读温度
{
uchar i;
uchar temp;
uchar dd;
temp=0x00;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
dd=read_bit();
if(dd==1)
{
temp=temp|0x80;
}
else
{
temp=temp|0x00;
}
}
return(temp);
}
uint get_temper()//get centigrad for the ram
{
uchar LSB_temper;
uchar MSB_temper;
uint c_temper=0;
float f_temper=0;
//dq_reset();
//write_cmd(0xcc);
//write_cmd(0xcc);
write_cmd(0xbe);
LSB_temper=read_temper();
MSB_temper=read_temper();
c_temper=MSB_temper;
c_temper=c_temper<<8;
c_temper=c_temper|LSB_temper;
f_temper=c_temper*0.0625;
c_temper=f_temper*10+0.5;
return c_temper;
}
void write_cmd(uchar z)//写命令
{
uchar i,t;
uchar temper;
uchar cmd=z;
for(i=0;i<8;i++)
{
temper=cmd&0x01;
if(temper)
{
dq=0;
delay_us();
delay_us();
dq=1;
for(t=30;t>0;t--);
}
else
{
dq=0;
for(t=50;t>0;t--);
dq=1;
delay_us(); delay_us();
}
cmd=_cror_(cmd,1);
}
}
/************************writeorreadbit********************************/
uchar read_bit()
{
uchar dd;
uchar t;
dq=0;
delay_us();
dq=1;
for(t=2;t>0;t--);
dd=dq;//get the signal
for(t=20;t>0;t--);
return(dd);
}
void write_bit(uchar dd)
{
uchar t;
if(dd==1)
{
dq=0;
delay_us();
dq=1;
for(t=30;t>0;t--);
}
else
{
dq=0;
for(t=20;t>0;t--);
dq=1;
delay_us();
delay_us();
}
}
/*************************getid*************************/
void get_firstid()
{
uchar t;
uchar w=0;
uchar d1,d2;
dq_reset();
write_cmd(0xf0);
for(t=0;t<64;t++)
{
d1=read_bit();
d2=read_bit();
if((t>0)&&(t%8==0)) ++w;
iccode[w]=_cror_(iccode[w],1);
if( (d1==1) && (d2==0) )
{
iccode[w]=(iccode[w])|0x80;
write_bit(1);
}
else if( (d1==0) && (d2==1))
{
iccode[w]=(iccode[w])|0x00;
write_bit(0);
}
else if( (d1==0) && (d2==0) )
{
iccode[w]=(iccode[w])|0x00;
write_bit(0);
}
}
}
void get_seconedid()
{
uchar t;
uchar w=8;
uchar d1,d2;
dq_reset();
write_cmd(0xf0);
for(t=0;t<64;t++)
{
d1=read_bit();
d2=read_bit();
if( (t>0) && (t%8==0) ) ++w;
iccode[w]=_cror_(iccode[w],1);
if( (d1==1) && (d2==0) )
{
write_bit(1);
iccode[w]=(iccode[w])|0x80;
}
else if( (d1==0) && (d2==1) )
{
iccode[w]=(iccode[w])|0x00;
write_bit(0);
}
else if( (d1==0) && (d2==0) )
{
iccode[w]=(iccode[w])|0x00;
write_bit(1);
}
}
}
/************************writeorreaddata************************/
void write_date(uchar z)
{
uchar t,i;
uchar temper;
uchar dat=z;
for(i=0;i<8;i++)
{
temper=dat&0x01;
if(temper)
{
dq=0;
delay_us();
delay_us();
dq=1;
for(t=30;t>0;t--);
}
else
{
dq=0;
for(t=50;t>0;t--);
dq=1;
delay_us(); delay_us();
}
dat=_cror_(dat,1);
}
}
/*
uchar read_date()
{
uchar t;
uchar i;
uchar temper;
temper=0x00;
for(i=0;i<8;i++)
{
temper=_cror_(temper,1);
dq=0;
delay_us();
delay_us();
dq=1;
delay_us();delay_us();
if(dq==1)
{
temper=temper | 0x80;
}
else
{
temper=temper | 0x00;
}
for(t=20;t>0;t--);
}
return(temper);
} */
/*************************ramfuntion********************************/
void convert_t()//温度转变
{
write_cmd(0x44);
}
/****************************temperdeal***********************************/
void deal_temper()
{
while(1)
{
deal_ds1();
deal_ds2();
}
}
void deal_ds1()
{
uchar t1;
uchar i;
dq_reset();
write_cmd(0x55);
for(i=0;i<8;i++)
{
write_date(iccode[i]);
}
while(1){
convert_t();
c1_temper=get_temper();
for(t1=0;t1<20;t1++)
{
display_temper(get_temper,1);
if((c1_temper>H_temper)||(c1_temper<L_temper)) warn_temper(1);
}
}
}
void deal_ds2()
{
uchar t1;
uchar i;
dq_reset();
write_cmd(0x55);
for(i=8;i<16;i++)
{
write_date(iccode[i]);
}
convert_t();
for(t1=0;t1<20;t1++)
{
c2_temper=get_temper();
display_temper(c2_temper,1);
// if(c2_temper>H_temper||c2_temper<L_temper) warn_temper(2);
}
}
void warn_temper(uchar dj)//温度告警
{
uchar t;
uchar flag=1;
uchar c_temp;
while(flag)
{
for(t=0;t<10;t++)
{
feng=0;
display_temper(get_temper(),dj);
}
convert_t();
c_temp=get_temper();
if((c_temp<=H_temper)&&(c_temp>L_temper))
{
flag=0;
feng=1;
}
}
}
void display_temper(uint wengdu,uchar fc)//显示当前温度值
{
uchar xx,yy,zz;
uint temp;
temp=wengdu;
xx=temp/100;
yy=temp%100/10;
zz=temp%10;
wela=1;
P0=0xfe;
wela=0;
P0=0x00;
dula=1;
P0=table[xx];
dula=0;
delay_ms(2);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
P0=0x00;
dula=1;
P0=(table[yy]+0x80);
dula=0;
delay_ms(2);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
P0=0x00;
dula=1;
P0=table[zz];
dula=0;
delay_ms(1);
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
P0=0x00;
dula=1;
P0=table[fc];
dula=0;
delay_ms(1);
}
/**********************init()andmain()******************************/
void init2()//初始化
{
L_temper=100;
H_temper=320;
c1_temper=200;
c2_temper=200;
dula=0;
wela=0;
}
void main()
{
init2();
while(1)
{
get_firstid();
get_seconedid();
deal_temper();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -