開盒函數和關箱那一串運算不太能理解,求指點一下是什么意思。有點不知道為啥要這樣弄。
單片機源程序如下:
- #include "STC12C5A60S2.h"
- #include <intrins.h>
- #include <stdio.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define RdCommand 0x01
- #define PrgCommand 0x02
- #define EraseCommand 0x03
- #define ENABLE_IAP 0x83
- sbit KEY_OPEN=P3^6;
- sbit KEY_CLOSE=P3^7;
- sbit GYQ_CLOSE=P1^0;
- sbit GYQ_OPEN=P1^1;
- sbit XG_KAI=P0^1;
- sbit XG_GUAN=P0^0;
- sbit DCF1=P0^2;Ë
- sbit DCF2=P0^3;
- sbit DCF3=P0^4;
- sbit LED_GREEN=P0^6;
- sbit LED_RED=P0^7;
- uchar flag_ck=0;
- uchar flag_int=0;
- uchar flag_lock=0;
- uchar flag_click;
- uchar flag_open_fail=0;
- uchar flag_close_fail=0;
- uchar flag_value;
- uchar str[]={'0','0','0','0','0','0','0','0','0','0','0','0'};
- uchar flag_auto = 0;
- void delay_ms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=880;j>0;j--);
- }
- void SendByte(uchar dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
- void SendStr(uchar *s)
- {
- ES=0;
-
- while(*s!='\0')
- {
- SendByte(*s);
- s++;
- }
- ES=1;
- }
- //打開盒子函數
- void boxopen()
- {
- uchar i;
- flag_open_fail=0;
- XG_GUAN=1;
- delay_ms(10);
- XG_KAI=0;
- // delay_ms(1500);
- for(i=0;i<25;i++)
- {
- delay_ms(200);
- if(GYQ_OPEN==0)
- break;
- }
- if(i>24)
- {
- XG_GUAN=1;
- delay_ms(10);
- XG_KAI=0;
- flag_open_fail=1;
- }
- if(flag_open_fail==0)
- {
- SendStr("OK\r\n");
- }
- }
- //******************************************************************************
- //
- //******************************************************************************
- void boxclose_key()
- {
- flag_close_fail=0;
- flag_int=0;
- LED_GREEN=1;
- LED_RED=1;
- IE0=0;
- EX0=1;
- while((KEY_CLOSE==0)&&(flag_int==0))
- {
- XG_KAI=1;
- delay_ms(10);
- XG_GUAN=0;
- }
- if(GYQ_CLOSE==0)
- {
- EX0=0;
- SendStr("READY\r\n");
- }
- else
- {
- EX0=0;
- XG_GUAN=1;
- delay_ms(10);
- XG_KAI=0;
- flag_close_fail=1;
- }
- }
- //******************************************************************************
- void boxclose_ck()
- {
- uchar i;
- flag_close_fail=0;
- flag_int=0;
- LED_GREEN=1;
- LED_RED=1;
- IE0=0;
- EX0=1;
- XG_KAI=1;
- delay_ms(10);
- XG_GUAN=0;
- delay_ms(1000);
- for(i=0;((i<30)&&(flag_int==0));i++)
- {
- delay_ms(200);
- if(GYQ_CLOSE==0)
- break;
- }
- if((i>29)||(flag_int==1))
- {
- EX0=0;
- XG_GUAN=1;
- delay_ms(10);
- XG_KAI=0;
- flag_close_fail=1;
- }
- if(flag_close_fail==0)
- {
- EX0=0;
- SendStr("READY\r\n");
- }
- }
復制代碼
|