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

📄 text1.c

📁 这是我在07年索尼杯做电动车跷跷板题目的源码
💻 C
字号:
#include <AT89X52.H>
#include <intrins.h>
#define uchar 	unsigned char
#define uint 	unsigned int

sbit A_input1 = P1^4;
sbit A_input2 = P1^5;
sbit A_enable = P1^2;//控制驱动机
sbit B_input1 = P1^6;
sbit B_input2 = P1^7;
sbit B_enable = P1^3;//控制舵动机
//sbit endd = P2^0;	//接后面的红外检测
sbit left =P0^7; 
sbit midleft=P0^6;  
sbit midrigh=P0^5;  
sbit righ=P0^4;  
sbit intrep1=P0^3;//接1中断  
sbit K1=P2^0;  //按键  
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
sbit  CLK=P0^0;
sbit  DAT=P0^1;
sbit  CS =P0^2;
sbit led =P1^1;
uint s,s1,c4,c5,c6;
uchar DATA_7SEG[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
unsigned int set,shu1,shu2,c8,c9,m,time1,time2,time3,time4,time5,time6,time7,t,t1;
int ph,ph1,we,wr,wt,wy,g1,f1,f2,f3,f4,f5,nn=8,mm,qq;
long c1,c2,c3;
long adc,w,wz,w1;

/*延时子函数*/
void delay(uint kk)
{
uint i1,j1;
for(i1=0;i1<kk;i1++)
{
for(j1=0;j1<248;j1++)
{;}
}
}

uchar TLC549ADC(void)
{
	uchar i,x;
	CLK=0;
    DAT=1;
    CS=0;
	for(i=0;i<8;i++)
	{
		CLK=1; 
		;
        ;
        x<<=1;
        if(DAT==1) x++;
        CLK=0; 
	;
      ;
	}
  
	CS=1;
	return (x);
}

void xiansishij()
{P3=DATA_7SEG[time3];P2_4=0;delay(1);
P2_4=1;
P3=DATA_7SEG[time6];P2_7=0;delay(1);
P2_7=1;
P3=DATA_7SEG[time5];P2_6=0;delay(1);
P2_6=1;
P3=DATA_7SEG[time4]&0x7f;P2_5=0;delay(1);
P2_5=1;
}

void guiji()
{int z;

if((midleft==0)&&(midrigh==0)&&(left==0)&&(righ==0))             

                  {        
                           B_input1=0;
                           B_input2=0;
                           B_enable=0;
						   A_input1 = 1;
                           A_input2 = 0;
                           A_enable = 1;
                         }

 if(midleft==1){ 
              B_input1=1;
              B_input2=0;
              B_enable = 1;
             for(z=0;z<40;z++);
			 
                 B_input1=0;
                   B_input2=1;
                    B_enable = 1;
			  for(z=0;z<20;z++);
			      
				   
				   }
 if(midrigh==1){ 
            B_input1=0;
              B_input2=1;
              B_enable=1;
             for(z=0;z<40;z++);
			 
		           B_input1=1;
                   B_input2=0;
                    B_enable = 1;
			  for(z=0;z<20;z++);
			       
				   
			  }
if(left==1){  //c8=0x02;
              //c9=0x00;
              B_input1=1;
              B_input2=0;
              B_enable = 1;
              for(z=0;z<40;z++);
			  
			B_input1=0;
              B_input2=1;
              B_enable = 1;
			  for(z=0;z<20;z++);
			      // B_input1=0;
                  // B_input2=0;
                   //B_enable=0;
				   
				   }
if(righ==1){  //c8=0x02;
              //c9=0x00;
              B_input1=0;
              B_input2=1;
              B_enable=1;
              for(z=0;z<40;z++);
			 
			 B_input1=1;
                   B_input2=0;
                    B_enable = 1;
			  for(z=0;z<20;z++);
			       //B_input1=0;
                   //B_input2=0;
                   //B_enable=0;
				   
				   }
	  } 


void xiansi()
{P3=0xc0;P2_4=0;delay(2);
P2_4=1;
P3=DATA_7SEG[c1]&0x7f;P2_7=0;delay(2);
P2_7=1;
P3=DATA_7SEG[c2];P2_6=0;delay(2);
P2_6=1;
P3=DATA_7SEG[c3];P2_5=0;delay(2);
P2_5=1;
}


void xiansi1()
{P3=0xc0;P2_4=0;delay(2);
P2_4=1;
P3=DATA_7SEG[c4];P2_7=0;delay(2);
P2_7=1;
P3=DATA_7SEG[c5];P2_6=0;delay(2);
P2_6=1;
P3=DATA_7SEG[c6]&0x7f;P2_5=0;delay(2);
P2_5=1;
}



void dianya()  //看平衡电压的函数
{ led=0;
  adc=TLC549ADC();
  w1=(adc*500)/255;
  ph1++; 
if(ph1>5)
 {
  w=w1;
  ph1=0;
  }
  c1=w%10;
  c2=(w/10)%10;
  c3=(w/100)%10;
  xiansi();
  led=0;
  }


 void xiansishu()
 {P3=0xc0;P2_4=0;delay(1);
P2_4=1;
P3=0xc0;P2_7=0;delay(1);
P2_7=1;
P3=DATA_7SEG[f3];P2_6=0;delay(1);
P2_6=1;
P3=DATA_7SEG[f4]&0x7f;P2_5=0;delay(1);
P2_5=1;
}

void xiangais()
{P3=0xc0;P2_4=0;delay(1);
P2_4=1;
P3=0xc0;P2_7=0;delay(1);
P2_7=1;
P3=DATA_7SEG[mm];P2_6=0;delay(1);
P2_6=1;
P3=DATA_7SEG[qq]&0x7f;P2_5=0;delay(1);
P2_5=1;
}

void timetiaozh(void)
{
TR1=0;
 
if(!K2) //k3按键处理 
{ 
f1++; //值加1
while(!K2); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖
} 
f2=f1*10;
f3=f2/10;
f4=f2%10;
xiansishu(); 
}

void scan_key()
{TR1=0;
if(!K1) //k3按键处理 
{ 
set++; //值加1
if(set>=5)set=0; 
while(!K1); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖 
} 
}

void  gais()
{TR1=0;
 
if(!K2) //k3按键处理 
{ 
nn++; //值加1
while(!K2); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖
} 

mm=nn/10;
qq=nn%10;
xiangais(); 
}


void time_adj()
{
TR0=0;
TR1=0;
time2=0;
time1=0;
A_input1 = 0;
A_input2 = 0;
A_enable = 0;
if(!K2) //k1按键处理 
{ 
shu1++; //值减1
if(shu1>30)shu1=0; 
while(!K2); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖 
} 
if(!K3) //k3按键处理 
{ 
shu2++; //值减1
if(shu2>9)shu1=0; 
while(!K3); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖 
} 
if(!K4) //k3按键处理 
{ 
shu1--; //值减1
if(shu2<0)shu1=30; 
while(!K4); //等待按键松开 
for(m=0;m<250;m++); //松开按键去抖 
} 
wz=shu1*10+shu2;
c4=wz%10;
c5=(wz/10)%10;
c6=(wz/100)%10;
xiansi1();
led=0;
}
void timer0() interrupt 1 using 2     //定义定时器0
{
 //  TF0=0;
   TH0=0x3c;
   TL0=0xb0;
   s++;
 }

void timer1() interrupt 3 using 3     //定义定时器1
{TH1=0xb1;
TL1=0xdf;
t1++;}


void time()
{
TR0=1;
TR1=1;
if(s<9)
 {  A_input1 = 1;
    A_input2 = 0;
    A_enable = 1;}
if(s>=9)
  {A_input1 = 0;
   A_input2 = 0;
   A_enable = 0;
      }
  if(s==24) s=0;
  adc=TLC549ADC();
  w1=(adc*500)/255;
  ph1++;
  if(ph1>2)
 {
 w=w1;
 ph1=0;
 }

 

if(t1>60){time1++;//时间
           time7++;
          t1=0; }
if(time1>59)
		  {time2++;
            time1=0;}
		 

time3=time2/10;			
time4=time2%10;
time5=time1/10;
time6=time1%10;
xiansishij();   //显示时间

guiji();

if((wz-w)<10)//||((wz-w)>-10)
  {TR0=0;
   s=10;
   A_input1 = 0;
   A_input2 = 0;
   A_enable = 0;
   
}
   if((w-wz)>10)
   {A_input1 = 0;
    A_input2 = 1;
    A_enable = 1;
	delay(8);
    A_input1 = 0;
    A_input2 = 0;
    A_enable = 0;
	}
if(time7==f2)
{led=1;}
if(time7==(f2+8))
{ TR0=1;
  s=3; 
     }	
if((left==1)&&(righ==1)&&(midrigh==1)&&(midleft==1))
{   A_input1 = 0;
    A_input2 = 1;
    A_enable = 1;
	delay(500);
	while(1);
    A_input1 = 0;
    A_input2 = 0;
    A_enable = 0;
	}
}


void main()
{

TMOD=0X11;
 //IT1=0;   //电平触发
 //EX1=1;
 //PT1=1;
 TH0=0x3c;
 TL0=0xb0;
 TH1=0xb1;
 TL1=0xdf;
 ET1=1;
 ET0=1;
 EA=1;
 TR0=1;
 led=0;
 while(1)
{
scan_key(); 

switch(set)                     /*根据set键值散转*/
{
case 0:time();break;                    /*转动程序*/
case 1:dianya();break;                 //电压调整
case 2:time_adj();break;                /*转动调整*/
case 3:timetiaozh();break;   
case 4:gais();break;            
default:break;                  	/*其它退出*/
} 
}
}
 

⌨️ 快捷键说明

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