📄 csb.c
字号:
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define ulint unsigned int
sfr WDTRST=0xA6;
unsigned int temp;
sbit DQ=P1^7;
void init();
void trans();
void trans_pro();
void display_s();
int ReadTemperature();
void display_temp() ;
void account();
void rec_pro();
void delay_pro();
sbit P10=P1^0;
sbit keystart=P1^4;
unsigned int temp;
bit trans_flag ,rec_flag,trans_delay=0;
uchar code disptab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ulint s=9999;
ulint distance;
void main()
{
unsigned int k=10;
while(k--)
{
temp=ReadTemperature();
display_temp();
}
init();
while(1)
{
trans_flag=!keystart;
if(trans_flag)
trans_pro();
if(rec_flag)
rec_pro();
if(TH0>=0x90)
delay_pro();
display_s();
WDTRST=0x1e; /*清看门狗*/
WDTRST=0xe1;
}
}
void delay(unsigned int i)
{
while(i--);
}
bit Init_DS18B20(void)
{
volatile unsigned char xflag=0;
DQ = 1;
delay(6);
DQ = 0;
delay(56);
DQ = 1;
delay(8);
xflag = DQ;
delay(14);
return(xflag);
}
ReadOneChar(void)
{
unsigned char i = 0;
unsigned char datb = 0;
for (i=8;i>0;i--)
{
DQ = 0;
datb>>=1;
DQ = 1;
if(DQ)
datb|=0x80;
delay(3);
}
return(datb);
}
WriteOneChar(unsigned char datbc)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = datbc&0x01;
delay(4);
DQ = 1;
datbc>>=1;
}
delay(3);
}
ReadTemperature(void)
{
unsigned char tmp_low=0;
unsigned char tmp_high=0;
unsigned char temper=0;
if(Init_DS18B20())
return;
WriteOneChar(0xCC);
WriteOneChar(0x44);
if(Init_DS18B20())
return;
WriteOneChar(0xCC);
WriteOneChar(0xBE);
tmp_low=ReadOneChar();
tmp_high=ReadOneChar();
tmp_low=tmp_low>>4;
temper=tmp_high<<4;
temper=temper|tmp_low;
return(temper);
}
void display_temp()
{uchar g,i,bse22=0;
unsigned int k=100;
while(k--)
{
i=3;
while(i--)
{
g=125;
switch(bse22)
{
case 0:
P2=0xff;
P0=disptab[temp%10];
P2=0x7f;
break;
case 1:
P2=0xff;
P0=disptab[temp%100/10];
P2=0xbf;
break;
case 2:
P2=0xff;
P0=disptab[temp/100];
P2=0xdf;
break;
}
if(++bse22==3) bse22=0;
while(g--);
}
}
}
void init()
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
// trans_flag=1;
keystart=1;
WDTRST=0x1e; /*开启看门狗*/
WDTRST=0xe1;
}
void trans(){
uchar j=6;
while(j--)
{
_nop_();
_nop_();
_nop_();
_nop_();
P10=~P10;
TR0=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P10=~P10;
}
delay(10); /*延迟0.1ms*/
}
void trans_pro()
{
trans_flag=0;
trans();
EX0=1;
rec_flag=0;
trans_delay=0;
}
void recevie() interrupt 0
{
TR0=0;
EX0=0;
rec_flag=1;
}
void account()
{
ulint time,c;
time=TH0*256+TL0;
if(temp<0x0a)
c=320;
if(temp>=0x0a&&temp<0x14)
c=330;
if(temp>=0x14&&temp<0x1e)
c=340;
if(temp>=0x1e&&temp<0x28)
c=350;
if(temp>=0x28)
c=360;
s=time*c/2000;
}
void rec_pro()
{
account();
rec_flag=0;
trans_delay=1;
TH0=0;
TL0=0;
// TR0=1;
}
void delay_pro()
{
TR0=0;
TH0=0;
TL0=0;
EX0=0;
trans_flag=1;
if(!trans_delay)
s=999;
}
void display_s()
{
uchar k,i,bsel=0;
i=4;
distance=s;
while(i--)
{
k=125;
switch(bsel)
{
case 0:
P2=0xff;
P0=disptab[distance%10];
P2=0x7f;
break;
case 1:
P2=0xff;
P0=disptab[distance%100/10];
P2=0xbf;
break;
case 2:
P2=0xff;
P0=disptab[distance%1000/100];
P2=0xdf;
break;
case 3:
P2=0xff;
P0=disptab[distance/1000];
P2=0xef;
break;
}
if(++bsel==4) bsel=0;
while(k--); /*延迟1ms*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -