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

📄 car.c

📁 小车具有测距防撞计时记速等功能
💻 C
📖 第 1 页 / 共 2 页
字号:
	  delay(1); 
	  i=(quan_l%100)/10; 
      lcd_dat(string[i]);
	  delay(1);
	  lcd_dat(string[11]);   //小数点
	  delay(1);
      i=quan_l%10;
      lcd_dat(string[i]);
	  delay(1);
	  lcd_dat(string[12]);  // m
	  delay(1);
	  EX0=1;
   }

void interrupt_init()         //中断实始化程序 
     {        
         TMOD=0x01;           //设置T0为16位
         TH0=-50000/256;      //50MS初值
         TL0=-50000%256;
		 ET0=1;               //允许T0中断
		 EX0=1;               //允许EX0中断
		 IT0=1;               //EX0为边沿触发,下降沿有效
		 PX0=1;               //EX0为高优先级中断
         TR0=1;               //T0开始运行
		 EA=1;                //开总中断
     }

void quan_1()      //前进子程序
     {
		 quan=0;
		 hou=1; 
	 }
void hou_1()       //后退子程序
     {
	     
		 hou=0;
		 quan=1;
	 }
void right_1()     //右转子程序
     {
	     leght=0;
	     right=1;
	 }
void leght_1()     //左转子程序
     {
	     right=0;
		 leght=1;
	 }
void zhxian()     //直线前进子程序
     {
	     right=0;
		 leght=0;
	 }

void sudu_0()      //0档速度子程序,低速
     {
	     sudu2=0;
	     sudu1=0;
	 }

void sudu_1()      //1档速度子程序,中速
     {
	     sudu2=0;
	     sudu1=1;
	 }
void sudu_2()     //2档速度子程序,高速
     {
	     sudu1=1;
		 sudu2=1;
	 }

void stop()          //小车停止
     {
	     quan=0;
		 hou=0;
		 right=0;
		 leght=0;
	 }

void start()    //用于开始始就完成制作要求的动作
     {
	     sudu_0();     //低速
		 leght_1();    //左转
         hou_1();      //后退
         delay(500);
		 sudu_0();     //低速
		 right_1();    //右转
         quan_1();     //前进
		 delay(500);
		 zhxian();  //直线前进
		 sudu_1();     //完成制作要求的动作后开始中速前进,设置刚开始的速度
		 quan_1();     //前进
		 delay(1000);
	 }

main()                       //主函数
     {
	     int j;
		 stop();
         delay(1000);
         lcd_init();         //液晶初始化
         interrupt_init();   //中断初始化
		 start();      //完成制作要求的动作之后直线前进
         while(1)
		   {
		      dang=0;  //先拉低P3。0口的电平
			  for(j=0;j<10;j++);  //延时一会 
		      if(dang)     //是否检测到障碍物
			    {  
				    for(j=0;j<100;j++);  //延时一会,去干扰
					if(dang)     //重新判断是否检测到障碍物
					  {
				          sudu_0();     //低速,遇到障碍物时置小车为低速
				          leght_1();    //左转
                          hou_1();      //后退
                          delay(500);
					      sudu_0();     //低速
					      right_1();    //右转
					      quan_1();     //前进
					      delay(500);
					  }
				}
			  else     //没有遇到障碍物且时间末到时,高速前进
			    {
                 if(second<30)
                   {
				      zhxian();   //直线前进
				      sudu_2();     //高速
                      quan_1();     //前进
                   }
				 }
			  if(second==30) //小车行驶时间到,则停止,并且显示时间,路程和速度
			    { 
				  stop();             //小车停止
				 
				  lcd_init();              //液晶初始化
				  delay(10);
                  lcd_pos(0x03);           //设置液晶第一行显示数据的位置
				  delay(1);
                  i=hour/10;               //小时高位
                  lcd_dat(string[i]);      //显示
             	  delay(1);
                  i=hour%10;               //小时低位
                  lcd_dat(string[i]);
     			  delay(1);                //延时
                  lcd_dat(string[10]);     //显示 :
  				  delay(1);
                  i=min/10;                //分高位
                  lcd_dat(string[i]);
				  delay(1);
                  i=min%10;                //分低位
                  lcd_dat(string[i]);
                  delay(1);
                  lcd_dat(string[10]);     //显示 :
				  delay(1);
                  i=second/10;             //秒高位
                  lcd_dat(string[i]);
				  delay(1);
                  i=second%10;             //秒低位
                  lcd_dat(string[i]);
                  delay(1);

				 lcd_pos(0x40);            //设置液晶第二行数据显示的位置
	             i=quan_h%10;
	             if(i)                      //如果里程高位为0则隐藏
                    lcd_dat(string[i]);
                 else 
	                lcd_dat(string[13]);
	             delay(1);
                 i=quan_l/100;
	             if(quan_h%10==0)           //如果里程高位为0,且次高位为零则隐藏
                   {                           
                      if(i)
                         lcd_dat(string[i]);
                      else 
	                     lcd_dat(string[13]);
		            }
	              else
	                 lcd_dat(string[i]);
	              delay(1); 
	              i=(quan_l%100)/10; 
                  lcd_dat(string[i]);
	              delay(1);
	              lcd_dat(string[11]);   //小数点
	              delay(1);
                  i=quan_l%10;
                  lcd_dat(string[i]);
	              delay(1);
	              lcd_dat(string[12]);  // m
	              delay(1);

				  lcd_pos(0x49);
                  k=s/100;                       //速度高位
                  if(k)                          //如果里程高位为0则隐藏
                     lcd_dat(string[k]);
                  else 
	                 lcd_dat(string[13]);
	              delay(1);
			      k=(s%100)/10;                  //速度次高位
			      if(s/100==0)                   //如果里程高位为0,且次高位为零则隐藏
			        {
				       if(k)                      
                         lcd_dat(string[k]);
                       else 
	                     lcd_dat(string[13]);
				     }
                  else
			        lcd_dat(string[k]);
			      delay(1);
			      k=s%10;                       //速度低位
                  lcd_dat(string[k]);
			      delay(1);
				  lcd_dat(string[16]);  // c
			      delay(1);
			      lcd_dat(string[12]);  // m
			      delay(1);
			      lcd_dat(string[14]);  // /
			      delay(1);
			      lcd_dat(string[15]);  // s
			      delay(1);
				  second=31;
				  sudu_0();
				}
		   }
     }

⌨️ 快捷键说明

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