《Parking system》

 

           自己根据状态转移图的思想,花了两天时间写的程序....写程序,其实,挺好的,挺有意思,个中的感受,偶很难讲明白,一个字“爽”!!其实,这个系统也挺有前途的呵呵!!!

 “讲白了”,写这个程序的目的,其实是因为,“不爽”*,总在我面前摆出一副很自信很牛的样子,看样子让人很不爽~~~亨(在程序员面前挑战技术,表面上看是在挑战技术,其实是在挑战他们的自尊!)、(其实,我觉得我很低调,很多时候都不喜欢表现自己,而且愿意倾听别人的意见,我想说的是“我低调并不代表我不行,我沉默不是我喜欢这样子的,是环境让我变成这样,正如老大说“要深入研究得耐得住寂寞!!””)为了自尊,偶决定亲自操刀~~~你懂的,难道我就不会吗?我贴出来也不给你~~~~亨!

 

//==================================================================
//document's instruction
//Project Name:Parking system
// Author: MicroAC
// Date:  2011.07.13


//C  P  U :
//时钟频率:11.0592MHz

//          I(输入)           /          O(输出)分配表

//   1/2#停止按钮   X0   P0.0       警示灯         Y0   P1.0  
//   1#启动按钮     X1   P0.1  防坠落得电    Y1   P1.1
//   2#启动按钮     X2   P0.2  受阻语音    Y2   P1.2
//   1/2#出车按钮   X3   P0.3  启动语音    Y3   P1.3
//   1/2#入车按钮   X4   P0.4  1#电源     Y4   P1.4
//   1/2#上限     X5   P0.5  2#电源     Y5   P1.5
//   1/2#下限     X6   P0.6  1/2#前移电机   Y6   P1.6
//   1/2#前限     X7   P0.7  1/2#后移电机   Y7   P1.7

//   1#后限      X10  P2.7    1#上升电机    Y10  P3.2
//   2#后限   X11  P2.6  1#下降电机    Y11  P3.3
//   允许下降  X12  P2.5  2#上升电机    Y12  P3.4
//                                  2#下降电机    Y13  P3.5
//   1#上限   X14  P2.3  停止灯     Y14  P3.6
//   2#上限   X15  P2.2  出车指示灯    Y15  P3.7
//                                  入车指示灯    Y16  P3.0
//                                  到位语音    Y17  P3.1

//==================================================================
//Source Code

#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

//=====================================================
//Definnation WDT_CONTR AND Time-"?"(CRYSTA 11.0592MHZ)
//STC12 Serials
//00111 000 : 71.1ms  -0x38
//00111 001 : 142.2ms  -0x39
//00111 010 : 284.4ms  -0x3A
//00111 011 : 568.8ms  -0x3B
//00111 100 : 1.1377s  -0x3C
//00111 101 : 2.27555s -0x3D
//00111 110 : 4.5511s  -0x3E
//00111 111 : 9.1022s  -0x3F

sfr WDT_CONTR=0xC1;
//add your necessary time here.
#define WDT_EAT 0x3D    

//=====================================================
#define N_T0_FRE 10    //T0_FRE's times.

//初始化操作

void Init_MCU(void);
void Init_Set_T0(void);
void Reset_T0(void);
//void Check_System_Wrong(void);

//语音处理函数

void Start_Voice(void);
void Block_Voice(void);
void Inplace_Voice(void);

//LED of Singal processor

void Stop_LED(void);
void OutCar_LED(void);
void InCar_LED(void);

//DELAY FUNCTIONS.

void Delay(void);
void Delay500ms(void);

//STATUS FUNCTIONS.

void State0(void);
void State20(void);
void State21(void);
void State27(void);
void State22(void);
void State23(void);
void State24(void);
void State25(void);
void State26(void);

sfr AUXR=0x8e;

//I(输入)口位定义

sbit X0=P0^0;
sbit X1=P0^1;
sbit X2=P0^2;
sbit X3=P0^3;
sbit X4=P0^4;
sbit X5=P0^5;
sbit X6=P0^6;
sbit X7=P0^7;

sbit X10=P2^7;
sbit X11=P2^6;
sbit X12=P2^5;
sbit X14=P2^3;
sbit X15=P2^2;

//O(输出)口位定义

sbit Y0=P1^0;
sbit Y1=P1^1;
sbit Y2=P1^2;
sbit Y3=P1^3;
sbit Y4=P1^4;
sbit Y5=P1^5;
sbit Y6=P1^6;
sbit Y7=P1^7;

sbit Y10=P3^2;
sbit Y11=P3^3;
sbit Y12=P3^4;
sbit Y13=P3^5;
sbit Y14=P3^6;
sbit Y15=P3^7;
sbit Y16=P3^0;
sbit Y17=P3^1;

//STATUS:状态寄存器

uchar data STATUS=0;

//标志flag

uchar data flag=0;
uchar data Off_On_Led=0;
uchar data Counter=0;
void main(void)
{
 Init_MCU();
    Check_System_Wrong();
 while(1)
 {
  WDT_CONTR=WDT_EAT;  //feed up the dog
  switch(STATUS)
  { 
    case 0:  State0() ;break;
   case 20: State20();break;
   case 21: State21();break;
   case 27: State27();break;
   case 22: State22();break;
   case 23: State23();break;
   case 24: State24();break;
   case 25: State25();break;
   case 26: State26();break;
   while(1);  //capture trap
   
  }
 }

}

//Init MCU

void Init_MCU(void)
{
 //add your code here.
 uchar i=0;
 for(i=0;i<3;i )
 {
  B=0;
  SP=0x07;
  P0=0xff;
  P1=0xff;
  P2=0xff;
  P3=0xff;
  IE=0x00;
  TCON=0x00;
  TH0=0x00;
  TL0=0x00;
  TH1=0x00;
  TL1=0x00;
  ACC=0x00;
  PSW=0x00;
  IP=0x00;
  TMOD=0x00;
  SCON=0x00;
  PCON=0x00;
  AUXR=0x00;
 }
}

//Check System'Fault.
/*
void Check_System_Wrong(void)
{
   //add your code here.

}
*/

//Delay Function.

void Delay()
{
 uchar i=0;
 i=200;
 for(;i>0;i--);
}

void Delay500ms(void)             
{
    uchar i,j,k;
    for(i=15;i>0;i--)
       for(j=202;j>0;j--)
           for(k=81;k>0;k--);
   
}

//状态0

void State0(void)
{
 //车位选择
 if(X1==0&&X2==1)
 {
  Delay();
  if(X1==0&&X2==1)
  {
   STATUS=20;
  }
 
 }
 else if(X2==0&&X1==1)
 {
  Delay();
  if(X2==0&&X1==1)
  {
   STATUS=30;
  }
 
 }
 else
  STATUS=0;
}

 //状态20
void State20()
{
 Y4=0;
 if(X0==0)
 {
  Delay();
  if(X0==0)
  {
   Block_Voice();
   STATUS=0; 
  } 
 }
 else if(X3==0)
 {
  Delay();
  if(X3==0)
  {
   STATUS=21;
  }
 }

}
 //状态21
void State21()
{
 Y4=0;
 if(X0==0||flag==1)
 {
  Delay();
  if(X0==0||flag==1)
  {
   Block_Voice();
   flag=1;
   Y6=1;    //stop process
   Off_On_Led=0;  //没有指示灯
   OutCar_LED();

   //没有启动语音
   Off_On_Led=1;  //停止灯亮!
   Stop_LED();  
  }
 }
 else
 {
  Y6=0;    //start process
  Off_On_Led=1;    //出车指示灯!
  OutCar_LED();
  Start_Voice();  //启动语音!  
 }
 if(X3==0)
 {
  Delay();
  if(X3==0)
  {
   flag=0;
  }
  
 }
 else if(X4==0&&flag==1)
 {
  Delay();
  if(X4==0&&flag==1)
  {
   flag=0;
   Off_On_Led=0; //停止灯灭
   Stop_LED();
   STATUS=25; 
  }  
 }
 else if(X7==0)
 {
  Delay();
  if(X7==0)
  {
   Y6=1;    //关闭前行电机
   STATUS=27;
  } 
 } 
}
 //状态27
void State27()
{
 uchar i=0;
 Y4=0;
 if(X0==0||flag==1)
 {
  Delay();
  if(X0==0||flag==1)
  {
   Block_Voice();
   flag=1;
   Off_On_Led=0; //没有出车指示灯  
   OutCar_LED(); 
   Y1=1;
   Off_On_Led=1; //停止灯亮!
   Stop_LED();
  } 
 }
 else
 {
  //出车指示灯!
  Off_On_Led=1;
  OutCar_LED();
  //Delay 2.5 second!
  for(i=5;i>0;i--)
  {
   Delay500ms();
  } 
  Y1=0; 
 }
 if(X3==0)
 {
  if(X3==0)
  {
   flag=0;
  }
  
 }
 else if(X12==0)
 {
  Delay();
  if(X12==0)
  {
   Y1=1;
   STATUS=22;
  }
 }

}
 //状态22
void State22()
{
 Y4=0;
 if(X0==0||flag==1)
 {
  Delay();
  if(X0==0||flag==1)
  {
   Block_Voice();
   flag=1;
   Y11=1;   //stop process
      //没有出车指示灯
   Off_On_Led=0;
   OutCar_LED();
   Y1=1;
   //停止灯亮
   Off_On_Led=1;
   Stop_LED();
  } 
 }
 else
 {
  //Delay 0.5 second!
  Delay500ms();
  Y11=0;     //start process
  //出车指示灯!
  Off_On_Led=1;
  OutCar_LED();
  Y1=0;
 }
 if(X3==0)
 {
  if(X3==0)
  {
   flag=0;
  }
  
 }
 else if(X4==0&&flag==1)
 {
   Delay();
  if(X4==0&&flag==1)
  {
   flag=0;
   //停止灯灭!
   Off_On_Led=0;
   Stop_LED();
   STATUS=24;  
  }
 }
 else if(X6==0)
 {
  Delay();
  if(X6==0)
  {
   Y11=1;
   Y1=1;
   STATUS=23;
  }
 }  

}
 //状态23
void State23()
{
 Y4=0;
 Inplace_Voice();  //下降到位语音!
 if(X4==0)
 {
  Delay();
  if(X4==0)
  {
   STATUS=24;
  }
 }

}
 //状态24
void State24()
{
 Y4=0;
 if(X0==0||flag==1)
 {
  Delay();
  if(X0==0||flag==1)
  {
   Block_Voice();
   flag=1;
   Y10=1;
   //没有入车指示灯
   Off_On_Led=0;
   OutCar_LED();
   //停止灯亮
   Off_On_Led=1;
   Stop_LED();
  } 
 }
 else
 {
  Y10=0;
  //入车指示灯!
  Off_On_Led=1;
  InCar_LED();    
 }
 if(X4==0)
 {
  if(X4==0)
  {
   flag=0;
  }
   
 }
 else if(X3==0&&flag==1)
 {
  Delay();
  if(X3==0&&flag==1)
  {
   flag=0;
   //停止灯关闭!
   Off_On_Led=0;
   Stop_LED();
   STATUS=22; 
  }
 }
 else if(X5==0)
 {
  Delay();
  if(X5==0)
  {
   Y10=1;   //上升电机关
   STATUS=25;
  }
 } 
}
 //状态25
void State25()
{
 Y4=0;
 if(X0==0||flag==1)
 {
  Delay();
  if(X0==0||flag==1)
  {
   Block_Voice();
   flag=1;
   //停止灯亮
   Off_On_Led=1;
   Stop_LED();
   //没有入车指示灯
   Off_On_Led=0;
   InCar_LED();
   //没有延时
   Y7=1;
  } 
 }
 else
 {
  //入车指示灯!
  Off_On_Led=1;
  InCar_LED();
  //Delay 0.5 second!
  Delay500ms();
  Y7=0; 
 }
 if(X4==0)
 {
  Delay();
  if(X4==0)
  {
   flag=0;
  }
   
 }
 else if(X3==0&&flag==1)
 {
  Delay();
  if(X3==0&&flag==1)
  {
   flag=0;
   //停止灯关闭!
      Off_On_Led=0;
   Stop_LED();
   STATUS=21; 
  }
 }
 else if(X10==0)
 {
  Delay();
  if(X10==0)
  {
   Y7=1;   //关闭后移电机
   STATUS=26;
  }
 
 }   

}
 //状态26
void State26()
{
 uchar i=0;
 Y4=0;
 //Delay 2.5 second!
 for(i=5;i>0;i--)
  {
   Delay500ms();
  }
 Inplace_Voice();    //后行到位语音
 //Delay 1.5 second!
 for(i=3;i>0;i--)
  {
   Delay500ms();
  }
 STATUS=0;
}

//VOICE PROCESS

void Start_Voice(void)
{
 Y3=1;
 _nop_();
 _nop_();
 _nop_();
 Y3=0;
}
void Block_Voice(void)
{
 Y2=1;
 _nop_();
 _nop_();
 _nop_();
 Y2=0;
}
void Inplace_Voice(void)
{
 Y17=1;
 _nop_();
 _nop_();
 _nop_();
 Y17=0;
}
//LED PROCESS

void Stop_LED(void)
{
 if(Off_On_Led)
 {
     Off_On_Led=0;
  Init_Set_T0();
 }
 else
 {
   Reset_T0();
 
 }
}
void OutCar_LED(void)
{
 if(Off_On_Led)
 {
   Off_On_Led=0;
  Init_Set_T0();
 }
 else
 {
  Reset_T0();
 
 }
}
void InCar_LED(void)
{
 if(Off_On_Led)
 {
   Off_On_Led=0;
  Init_Set_T0();
 }
 else
 {
  Reset_T0();
 }
}

//T0's Configuration.

void Init_Set_T0(void)
{
 //add your code here-T0 Setting.
 TMOD=0x01;       //T0 Style 1
 TH0=(65536-15536)/256;  //50ms
 TL0=(65536-15536)%256;
 PT0=1;
 ET0=1;
 EA=1;
 TR0=1;
}
void Reset_T0(void)
{
 //add your code here-T0 Reset.
 EA=0;
 ET0=0;
 TR0=0;
 TMOD=0x00;       
 TH0=0x00;  
 TL0=0x00;
 PT0=0;
}

//T0中断函数

void timer0 () interrupt  1
{
 //add your T0 initial value here.
 TH0=(65536-15536)/256;  //50ms
 TL0=(65536-15536)%256;
 Counter ;
 if(Counter>N_T0_FRE)  //Setting Flash LED's Frequence.
 {             //50ms*N_T0_FRE
  Counter=0;
  Y14=~Y14;          //FLASH Stop's LED.
 }

}

 

//===========================================================================

           行了,明天有领导来视察,我不得不挑灯夜战,写好报告和PPT,以应付“领导”们~~~忙去鸟!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值