📄 zuosi.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 c_temper;
float f_temper;
uint L_temper;
uint H_temper;
//uchar code configer_reg[]={0x1f,0x3f,0x5f,0x7f};
/*
struct ic_code
{
uchar romcode[8];
}ic_code;
ic_code cc[2];
*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};
/*******************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 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);
}
void write_cmd(uchar z)//写命令
{
uchar t,i;
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);
}
}
void convert_t()//温度转变
{
dq_reset();
write_cmd(0xcc);
write_cmd(0x44);
}
uint get_temper()//从暂存器中获取温度
{
uchar LSB_temper;
uchar MSB_temper;
dq_reset();
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;
}
/**********************dealtemperature*****************************/
void init()//初始化
{
L_temper=100;
H_temper=320;
c_temper=200;
dula=0;
wela=0;
}
void display_temper(uint wengdu)//显示当前温度值
{
uchar xx,yy,zz;
uint temper;
temper=wengdu;
xx=temper/100;
yy=temper%100/10;
zz=temper%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);
}
void warn_temper()//温度告警
{
uchar t;
uchar flag=1;
while(flag)
{
for(t=0;t<10;t++)
{
feng=0;
display_temper(get_temper());
}
convert_t();
c_temper=get_temper();
if((c_temper<=H_temper)&&(c_temper>L_temper))
{
flag=0;
feng=1;
}
}
}
void deal_temper()//温度处理函数
{
uchar t;
while(1)
{
convert_t();
for(t=0;t<10;t++)
{
display_temper(get_temper());
}
if((c_temper>H_temper)||(c_temper<L_temper)) warn_temper();
}
}
void main()
{
init();
while(1)
{
deal_temper();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -