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

📄 main.c

📁 智能电动小车
💻 C
字号:


#include <REG52.H>
#define BYTE unsigned char  

//输入信号部分
sbit _hw_left=P1^0; //红外探测黑线信号
sbit _hw_mid=P1^1;
sbit _hw_right=P1^2;

sbit _gm0=P1^3;  //光敏探测信号
sbit _gm1=P1^4;
sbit _gm2=P1^5;
sbit _gm3=P1^6;
sbit _gm4=P1^7;
sbit _gm5=P3^6;
sbit _gm6=P3^7;

sbit _tie=P3^2; //金属探测信号

sbit _csbin=P2^0; //超声波探测信号

//输出信号部分
sbit _qzled=P0^0;
sbit _qyled=P0^1;
sbit _hzled=P0^2;
sbit _hyled=P0^3;
sbit _tieled=P0^4;
sbit _juliled=P0^5;
sbit _timeled=P0^6;
sbit _speak=P2^2;

sbit _qz=P2^3;
sbit _qy=P2^4;
sbit _hh=P2^5;
sbit _qq=P2^6;

sbit _k7seg=P2^7;
sbit _csbout=P2^1;

//全局变量
bit  direct=1; //方向默认向前
unsigned char htime=0x00;
unsigned char hdata=0x0a; //初始占空比50%

unsigned char bit0=0x00; //四个数码管显示的位数据
unsigned char bit1=0x00;
unsigned char bit2=0x00;
unsigned char bit3=0x00;

unsigned int tie0=0x0000;
unsigned int tie1=0x0000;
unsigned int tie2=0x0000;
unsigned int tie3=0x0000;
unsigned int tie4=0x0000;
unsigned int tie5=0x0000;
unsigned int tie6=0x0000;
unsigned int tie7=0x0000;

unsigned int juli=0x0000;
unsigned int time=0x0000;

unsigned int const ss0=0xffff; //AB 段的距离
unsigned int const ss1=0xffff; //AC 段的距离	

BYTE const discode0[11]={0x05,0x9f,0x23,0x0b,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//显示码1

//函数声明
void delay10ms(unsigned char n)//十毫秒延时子程序
{
  unsigned char data0=n;
  #pragma ASM  
        
        
  DEL0: MOV R6,#40
  DEL1: MOV R5,#250
        DJNZ R5,$
        DJNZ R6,DEL1
        DJNZ data0?041,DEL0   //??????????
          
  #pragma ENDASM   
}

void initial(void)
{
   P1=0xff;
   P0=0x7f;
   P2=0xff;
   IE=0x8c;  //T0不中断
   IP=0xe9;  //int0最高,T1次之
   TMOD=0x15;//T0方式1对T1脚计数,T1方式1定时中断
   SCON=0x00;//串行口方式0
   EA=1;
   TH0=0x00;
   TL0=0x00;
   TH1=0xfc; //0xffff-0x07d0;
   TL1=0X17;
   TR0=1;
   TR1=1;
}
void int_t1(void) interrupt 3//2MS定时中断,程序约执行60us
{
   time++; //总时间加1*2MS
   htime++;   
   if(direct==1)
   {
      if(htime<hdata) //hdata不得大于20
      {
         _qq=0;
         _hh=1;
      }
      else
      {
         _qq=1;
         _hh=1;
      }

      if(htime>0x14) htime=0x00;      

   }
   else
   {
     if(htime<hdata) 
      {
         _qq=1;
         _hh=0;
      }
      else
      {
         _qq=1;
         _hh=1;
      }

      if(htime>0x14) htime=0x00;      

   }
   
   TH1=0xfc; //0xffff-0x07d0;
   TL1=0X17;   
   TR1=1;
}
void display(BYTE data0,BYTE data1,BYTE data2,BYTE data3) //发送显示码子函数
{ 
   _k7seg=1;   
   SBUF=discode0[data0];
   do
   {}  
   while(TI==0);
   TI=0;
   
   SBUF=discode0[data1]; 
   do
   {} 
   while(TI==0);
   TI=0;

   SBUF=discode0[data2]; 
   do
   {} 
   while(TI==0);
   TI=0;
    
   SBUF=discode0[data3]; 
   do
   {} 
   while(TI==0);
   TI=0;

   _k7seg=0;
}
void tobcd(unsigned int xx) //不大于9999的整数去位值函数,大约用160US
{
   unsigned int temp0=0x0000,temp1=0x0000;
   if(xx<0x270f)
   {
      bit3=xx/1000;
	  temp0=xx-1000*bit3;
	  bit2=temp0/100;
	  temp1=temp0-bit2*100;
	  bit1=temp1/10;
	  bit0=temp1-bit1*10;
   }
   else return;
}

void main(void)
{    
   initial();   
   do
   {
     display(0x00,0x01,0x02,0x03);     
	 hdata=0x0a;
	 P2=0x0f;
	 P0=0x00;
	 delay10ms(0x64);	 
	 display(0x04,0x05,0x06,0x07); 
	 hdata=0x05;
	 P2=0x00;	 
	 delay10ms(0x64);
 	 display(0x08,0x09,0x0a,0x00); 
 	 hdata=0x0f;
	 P2=0x0f;
	 P0=0xff;
	 delay10ms(0x64);
   }
   while(1);
}




⌨️ 快捷键说明

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