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

📄 main.c

📁 超声波程序(接收部分)
💻 C
字号:

#include <reg52.h>
#include "LCD_Dis.h" 
#include"math.h"
#include "main.h"
#include "ISD4004.c"
//#include "stdio.h"
//#include "stdlib.h"
sbit led1 = P1^7;  // 红灯
sbit led2 = P1^6;  // 黄灯
sbit led3 = P1^5;  //绿灯



uint  s = 0 ;
uint num[12] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xa0,0xb0} ; //语音报数对应低位地址0 ~ 米
uchar ad_l,ad_h ;

uchar dat=0;
uchar r_buff[9];
uchar r_in;
uchar j;
uint sum,kk;
uchar r_len;
bit	urtflag;

#include "shoufa.c"
#include "18B20.c"

//普通延时函数
void commen_delay(uint k)
{
  uint i ,j ;
  for(i = 0 ; i < k ; i ++)
   for(j = 0 ; j < 121 ; j ++)
       ;
}





//将温度转换为LCD显示的数据
void cover(signed int t)	   
{
  unsigned int  a;			   //因Proteus中18b20无小数,所以这里只作整数部分
  if(t<0)                    //判断正负温度
  {FontSet(0,0xff);
   PutString(40,6,"-");	    //+0x2d 为变"-"ASCII码
  }
  else 
  {FontSet(0,0xff);
   PutString(40,6,"+");		 //+0xfe 为变" "ASCII码
  }
  a=abs(t);	
 
  FontSet(0,0xff);
  PutChar(48,6,a%10000/1000+0x30);
  PutChar(56,6,a%1000/100+0x30);
  
  PutString(64,6,".");
  PutChar(72,6,a%100/10+0x30);
  
  PutChar(80,6,a%10+0x30);
 // PutChar(88,6,(a*1000)%10+0x30);

  
 }



//显示题目名
show_name()
{
    FontSet(2,0xff);   				//选择自定义的汉字字符		
	PutChar(16,0,0);			   //显示,超
	PutChar(32,0,1);				//显示,声
	PutChar(48,0,2);				//显示,波
	PutChar(64,0,3);				//显示,测
	PutChar(80,0,4);				//显示,距
	PutChar(96,0,5);                //显示,议 

	//PutChar(96,0,4);   
	PutChar(8,2,6);            //显示距
   	PutChar(24,2,7);           //显示离
	FontSet(0,0xff); 
	PutChar(40,2,':') ;
	PutChar(64,2,'.');	
	PutChar(96,2,'m') ;
}

//显示距离
/*void show_s(uint n)
{  s = n;
  FontSet(0,0xff); 
  PutChar(56,2,s/100+0x30);
  PutChar(72,2,(s%100)/10+0x30);
  PutChar(80,2,s%10+0x30);
}*/




//初始化程序
//初始化单片机,并等待按键按下
void in_stc()
{

 
	P0 = P1 = P2 = P3 = 0xff;//初始化
 	isd_pu();//AN键按下,isd上电并延迟50ms
 	isd_pd();
 	isd_pu();
  
}


//接收数据并处理
get_s()
{ unsigned long  int t ;
  signed int tmpvalue3;
   float j;
 
  tmpvalue3 = gettemp1();
  j = getTmpValue(tmpvalue3);
  if(urtflag==1)
	 {
	    urtflag=0;
	    putbyte(r_buff[0]);
        putbyte(r_buff[1]);
        putbyte(r_buff[2]);
        putbyte(r_buff[3]);
        putbyte(r_buff[4]);  //接发射方发过来的数据
		t = (r_buff[3] *256)+ r_buff[2] ;
       //v = (331.4 + 0.43 * j);
		//s = (t * v) /1000 ;
		//s = (t * v)/1000 ;
		//s= (331.4 + 0.43 * j)*t/1000 ;
		s = (t * 17)/1000 ;
	//	if ( s < 32) s = 10+rand()%25 ;
		if (s > 100 && s < 410)  s = s + 2 ;
		if(s > 410 )  s = s + 3 ;
 	    
		  
	 }
		//return s ;
}

//显示距离
void show_s()
{  
  FontSet(0,0xff); 
  PutChar(56,2,s/100+0x30);
  PutChar(72,2,(s%100)/10+0x30);
  PutChar(80,2,s%10+0x30);

}      

//报告危险距离
void show_word ()
{   float m;
 
   m = s*1.0/100;
   FontSet(2,0xff);
 if (m > 0.1&&m < 0.5 )  //危险距离
   {     
	 
	 led2 = 1;   
	 led3 = 1;
	 led1 = 0;
    PutChar(16,4,8);   	//选择自定义的汉字字符	
	PutChar(32,4,9);    //显示"危险距离"
	PutChar(48,4,6);
	PutChar(64,4,7);
	PutChar(80,4,14);

    //{m0 = 1 ; m1 = 1 ; m2 = 1 ; m3 = 1 ;}  //停车

   }
   
    if(m > 0.5 && m < 1.0)
   { 
     led1 = 1;   
     led3 = 1;
	 led2 = 0; 
    PutChar(16,4,10);   	//选择自定义的汉字字符	
	PutChar(32,4,11);      //显示"保持距离"
	PutChar(48,4,6);
	PutChar(64,4,7);
	PutChar(80,4,14);
   }
  if(m > 1.0 && m < 2.0)
  {
    led1 = 1 ;
	led2 = 1 ;
	led3 = 1 ;
  }

   if(m > 2.0)
  { 
     led1 = 1;    
     led2 = 1;
     led3 = 0;
	 
    PutChar(16,4,12);   	//选择自定义的汉字字符	
	PutChar(32,4,13);      //显示"安全距离"
	PutChar(48,4,6);
	PutChar(64,4,7);
	PutChar(80,4,14);
  }
}

//语音播报距离
void tell_s() 
{  
  	isd_pu();//AN键按下,isd上电并延迟50ms
 	
	isd_pd();
 	isd_pu();	

 	 play(num[s/100] , 0x00) ; //报距离的米       
 	 
	   isd_pd();
	   isd_pu();
	play(0xa0,0x00); //报点字	   
 	   
	   isd_pd();
       isd_pu();
	   
	play(num[(s%100)/10],0x00 );//报距离的分米位	   
 	   
	   isd_pd();
	   isd_pu();	   
    play(num[s%10],0x00 );//报距离的厘米位	   
 	   
	   isd_pd();
	   isd_pu();
	play(0xb0 , 0x00);//报米字      
 	   
	   isd_pd();
	   isd_pu();
}


init_timer2()
{  
 SCON=0x50;
   //0101 0000 8位可变波特率,无奇偶效验

 RCAP2H=0xff; 		// Reload value
 RCAP2L=0xdc;     //11.0592   9600
 TH2=0xff;				// Initial load value
 TL2=0xdc;  
 TR2=1;
 T2CON=0x34;  //使用T2作波特率发生器
}

//主函数
void main(void)
{   
   signed int tmpvalue1,i;
    uint  s0 = 0 ,n = 0;
//	float m;
	LCD_Init();						//初始化LCD
	FontSet(0,0xff);				//选择8X16的ASCII字符
	show_name() ;   //显示名称
	in_stc();
      init_timer2();
	  EA=1;
	  ES=1;
	  urtflag=0;
	  r_in=0;   
	  putbyte(0x55);
	  FontSet(0,0xff);
	  PutString(0,6,"TEM:");
		   
	while(1)
	{   //car_go();
	   //shan_shuo();
        tmpvalue1 = gettemp1();
        i = getTmpValue(tmpvalue1);
		commen_delay(10);
	    cover(i); 
		//get_s() ; //接收数据 
		//z = get_s() ;  //显示三段距离
	    get_s() ;  //接收数据 
	   
	    show_s();  //显示距离
		show_word();  //显示提示语
	
 		  if(s0 != s  )  
	     { 
		  s0 = s ;

		  tell_s() ;  //播报实时距离

 		 }
		
	 putbyte(0x55);
		ES=1;	 
	 }
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -