自己根据状态转移图的思想,花了两天时间写的程序....写程序,其实,挺好的,挺有意思,个中的感受,偶很难讲明白,一个字“爽”!!其实,这个系统也挺有前途的呵呵!!!
“讲白了”,写这个程序的目的,其实是因为,“不爽”*,总在我面前摆出一副很自信很牛的样子,看样子让人很不爽~~~亨(在程序员面前挑战技术,表面上看是在挑战技术,其实是在挑战他们的自尊!)、(其实,我觉得我很低调,很多时候都不喜欢表现自己,而且愿意倾听别人的意见,我想说的是“我低调并不代表我不行,我沉默不是我喜欢这样子的,是环境让我变成这样,正如老大说“要深入研究得耐得住寂寞!!””)为了自尊,偶决定亲自操刀~~~你懂的,难道我就不会吗?我贴出来也不给你~~~~亨!
//==================================================================
//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,以应付“领导”们~~~忙去鸟!!!