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

📄 csb.c

📁 毕业设计课题设计 51单片机测距系统全部源码
💻 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 + -