门口机程序.docx
- 文档编号:29850815
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:44
- 大小:21.36KB
门口机程序.docx
《门口机程序.docx》由会员分享,可在线阅读,更多相关《门口机程序.docx(44页珍藏版)》请在冰豆网上搜索。
门口机程序
//门口机程序
//已经过uvision2调试
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineHIGH1
#defineLOW0
#defineFALSE0
#defineTRUE1
#defineWRITE0xA0
#defineREAD0xA1
#defineCR_12M0
#ifCR_12M==1
#definetime0h0x3c
#definetime0l0xb0
#definetimer10xfa
#definedelay_para120
#else
#definetime0h0xbe
#definetime0l0xe4
#definetimer10xa1//0xa1
#definedelay_para34
#endif
#defineKey_c10
#defineKey_trap11
#definecomlong6
#defineBUZZER_1S20
#defineBUZZER_2S50
#defineKEY_TIME100
#defineCodeAddress0x60
#defineCallAdd0x50
#defineDLY0100
#defineDLY1100
#defineDial_time600
#definetalk_time2400
#defineother_time2400
#definemonitor_time600
#defineGETE_CALL0x11
#defineGETE_CANCEL0x12
#defineGATE_MONTTOR10x13
#defineHI_CANCEL0x18
#defineALARM_C0x19
#defineT_CALLCENT0x31
#defineT_callgate0x32
#defineT_reply0x33
#defineT_cancelmonitor0x34
#defineT_dial0x35
#defineT_hangup0x36
#defineT_openlock0x37
#defineT_replycen0x38
#defineNOTALK_ST0x00
#defineCALL_ST10x01
#defineTALK_ST0x02
#defineOTHER_ST0x03
#defineMONITOR_ST0x04
//bitsound;
bitmessagefg;
bitMON;
bitKEYREAD;
bitRELEASE;
bitPASSWORD;
bitTCALL;
bitTCANCEL;
bitTMONITOR;
bitTSEND;
bitTOPENLOCK;
bitTSOUND;
bitCODEFLG1;
bitCODEFLG2;
bitCODEFLG3;
bitCODEFLG4;
bitCODEFLG5;
bithideshow;
bitTXDFLG;
bitRXDFLG;
bitSENDFLG;
sbitSCL=P3^6;//I2C
sbitSDA=P3^7;
sbitWATCHDOG1=P3^3;
sbitBUZZER1=P2^4;//蜂鸣器
sbitOPENLOCK1=P2^3;
sbitLED1=P3^4;
sbitSPEAK_OUT1=P2^5;
sbitSWITCH1=P3^5;
sbitSPEAK_IN1=P2^6;
sbitVEDIO1=P2^7;
sbitSELECTEEP=P2^0;
ucharWSEND1;
ucharWALARM1;
ucharGTXDP1;
ucharCCOUNT1;
ucharPKEYTIME;
ucharPWALK;
ucharKEYCODE1;
ucharKEYNUM1;
ucharbuffer[4];
ucharNUMBER[4];
ucharReceive[6];
ucharTransmit[5];
ucharT_ADD0,T_ADD1,T_ADD2;
uintTALKTIME1;
voidinit();
voidKey_clear();
voidReadKey();
voidKeytrap();
voidNumKey();
voidSendcall();
voidResend();
voidCANCELNK1();
voidKeytimeout();
voidCodeopen();
voidCODEWORK1();
voidOpenlock();
voidDelaydo();
voidMonitordo();
voidDSPGATE1();
voidSERCOM1();
voidwait_1ms(uinttimes);
voidSCOM(ucharcommand);
voidComdial();
voidSRIGHT1();
voidSERROR();
bitE_read(ucharaddr,uchar*p,uchardatalong);
bitE_write(ucharaddr,uchar*p,uchardatalong);
voidDSPNUM1(void);
voidDSPOFF1(void);
voidDSPGATE1(void);
codeucharCS[]={0xe0,0xd0,0xc0,0xb0};
codeCRC_table[]=
{
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7
};
//*************************************************************
main()
{
init();
while
(1)
{
WATCHDOG1=1;
_nop_();
_nop_();
_nop_();
WATCHDOG1=0;
if(KEYREAD)
{
PKEYTIME=0;
ReadKey();
switch(KEYCODE1)
{
caseKey_c:
Key_clear();
break;
caseKey_trap:
Keytrap();
break;
default:
if(KEYNUM1==0)
DSPOFF1();
if(KEYCODE1<10)
NumKey();
DSPGATE1();
if(KEYNUM1!
=0)
DSPNUM1();
break;
}
if(KEYNUM1>4)
{
KEYNUM1=0x00;
DSPOFF1();
}
KEYREAD=0;
KEYCODE1=0xFF;
}
//密码开锁
Codeopen();
Comdial();
//建立通讯请求
Sendcall();
//重发处理
Resend();
//取消连接
CANCELNK1();
//按键超时处理
Keytimeout();
//密码修改
CODEWORK1();
//开锁处理
Openlock();
//拨号与通讯延时处理
Delaydo();
//监视处理
Monitordo();
}
}
//*********************************************************
voidinit()
{
messagefg=0;
CCOUNT1=0;
WATCHDOG1=1;
_nop_();
_nop_();
WATCHDOG1=0;
BUZZER1=1;//关响铃
LED1=1;
OPENLOCK1=1;
SPEAK_IN1=1;
SWITCH1=1;
SPEAK_OUT1=1;
VEDIO1=1;
RELEASE=1;
DSPOFF1();
TMOD=0x21;
TH0=time0h;
TL0=time0l;
ET0=1;
TR0=1;
PCON=0x00;
SCON=0x50;
TH1=timer1;//1.2KBAUDRATEff-f3=12
TL1=timer1;
TR1=1;
IP=0x10;//serialinterruptfirst
EA=1;
ES=1;
}
//清除键
voidKey_clear()
{
CODEFLG2=0;
CODEFLG3=0;
CODEFLG4=0;
CODEFLG5=0;
hideshow=0;
PASSWORD=0;
if((PWALK!
=MONITOR_ST)&&(PWALK!
=OTHER_ST))
TCANCEL=1;
if(CODEFLG1)
CODEFLG1=0;
if(KEYNUM1==4)
if((NUMBER[0]==9)&&(NUMBER[1]==9)&&(NUMBER[2]==9)&&(NUMBER[3]==9))
CODEFLG1=1;
DSPOFF1();
KEYNUM1=0;
}
//按确认键
voidKeytrap()
{
if((CODEFLG5)||(CODEFLG2)||(CODEFLG3)||(CODEFLG4))
return;
switch(KEYNUM1)
{
case0:
if(CODEFLG1)
{
CODEFLG1=0;
CODEFLG2=1;
hideshow=1;
break;
}
PASSWORD=TRUE;
hideshow=1;
DSPOFF1();
P0=0xBa;
P0=0xFF;
break;
case1:
break;
case2:
if(PWALK!
=NOTALK_ST)
break;
if(!
SELECTEEP)
{
buffer[0]=NUMBER[0];
buffer[1]=NUMBER[1];
if(!
E_write(CallAdd,buffer,2))
E_write(CallAdd,buffer,2);
wait_1ms(500);
E_read(CallAdd,&buffer[2],2);
if((buffer[0]==buffer[2])&&(buffer[1]==buffer[3]))
SRIGHT1();
else
SERROR();
KEYNUM1=0x00;
DSPOFF1();
}
break;
case3:
if(PWALK!
=NOTALK_ST)
break;
if(hideshow)
break;
if(!
SELECTEEP)
{
buffer[0]=NUMBER[0]*10+NUMBER[1];
buffer[1]=NUMBER[2];
if(!
E_write(CallAdd,buffer,2))
E_write(CallAdd,buffer,2);
wait_1ms(500);
E_read(CallAdd,&buffer[2],2);
if((buffer[0]==buffer[2])&&(buffer[1]==buffer[3]))
SRIGHT1();
else
SERROR();
KEYNUM1=0x00;
DSPOFF1();
break;
}
if(NUMBER[1]!
=0)
{
KEYNUM1=0x00;
DSPOFF1();
break;
}
if(!
E_read(CallAdd,buffer,2))
E_read(CallAdd,buffer,2);
T_ADD0=buffer[0];
T_ADD1=NUMBER[0];
T_ADD2=(buffer[1]<<4)|NUMBER[2];
TCALL=TRUE;
break;
case4:
if(PWALK!
=NOTALK_ST)
break;
if(hideshow)
break;
if(NUMBER[2]!
=0)
{
KEYNUM1=0x00;
DSPOFF1();
break;
}
if(!
E_read(CallAdd,buffer,2))
E_read(CallAdd,buffer,2);
T_ADD0=buffer[0];
T_ADD1=NUMBER[0]*10+NUMBER[1];
T_ADD2=(buffer[1]<<4)|NUMBER[3];
TCALL=TRUE;
default:
break;
}
}
//*****************************************
voidsendcall()
{
if(!
TCALL)
return;
SPEAK_OUT1=0;
LED1=0;
VEDIO1=0;
SCOM(GETE_CALL);
TSEND=TRUE;
WSEND1=0;
PWALK=CALL_ST1;
KEYNUM1=0;
TALKTIME1=0;
TCALL=0;
}
//重发处理
voidResend()
{
if(!
TSEND)
return;
if(WSEND1==60)
{
SCOM(GETE_CALL);
}
elseif(WSEND1==120)
{
SCOM(GETE_CALL);
}
elseif(WSEND1>=180)
{
TSEND=FALSE;
DSPOFF1();
KEYNUM1=0;
TCANCEL=1;
}
}
//取消连接
voidCANCELNK1()
{
if(!
TCANCEL)
return;
PWALK=NOTALK_ST;
LED1=1;
SPEAK_IN1=1;
VEDIO1=1;
SCOM(GETE_CANCEL);
SPEAK_OUT1=1;
BUZZER1=1;//关响铃
TCALL=0;
TCANCEL=0;
TMONITOR=0;
TSEND=0;
TSOUND=0;
MON=0;
}
//超时取消
voidKeytimeout()
{
if((CODEFLG4)||(CODEFLG5))
return;
if(PKEYTIME>=KEY_TIME)
{
if((PWALK==NOTALK_ST)||(PWALK==OTHER_ST))
{
CODEFLG1=0;
CODEFLG2=0;
CODEFLG3=0;
hideshow=0;
PASSWORD=0;
KEYNUM1=0;
DSPOFF1();
}
PKEYTIME=0;
}
}
bitcompare()
{
if((NUMBER[0]==0)
&&(NUMBER[1]==2)
&&(NUMBER[2]==1)
&&(NUMBER[3]==2))
return
(1);
if((NUMBER[0]==buffer[0])
&&(NUMBER[1]==buffer[1])
&&(NUMBER[2]==buffer[2])
&&(NUMBER[3]==buffer[3]))
return
(1);
return(0);
}
//密码开锁
voidCodeopen()
{
if(PASSWORD)
{
if(KEYNUM1==4)
{
E_read(CodeAddress,buffer,4);
DSPOFF1();
PASSWORD=0;
hideshow=0;
KEYNUM1=0;
if(compare())
TOPENLOCK=1;
}
}
}
//--------------------------------------------
//密码修改
voidCODEWORK1()
{
if(CODEFLG2)
if(KEYNUM1==4)
{
if((NUMBER[0]==3)&&(NUMBER[1]==4)&&(NUMBER[2]==8)&&(NUMBER[3]==9))
{
DSPOFF1();
CODEFLG2=0;
P0=0xBb;
P0=0xff;
KEYNUM1=0;
CODEFLG3=1;
}
else
{
DSPOFF1();
CODEFLG2=0;
KEYNUM1=0;
hideshow=0;
}
}
if(CODEFLG3)
if(KEYNUM1==4)
{
E_read(CodeAddress,buffer,4);
if(compare())
{
CODEFLG3=0;
CODEFLG4=1;
DSPOFF1();
KEYNUM1=0;
P0=0xBc;
P0=0xff;
}
else
{
DSPOFF1();
CODEFLG3=0;
KEYNUM1=0;
hideshow=0;
}
}
if(CODEFLG4)
if(KEYNUM1==4)
{
CODEFLG4=0;
CODEFLG5=1;
buffer[0]=NUMBER[0];
buffer[1]=NUMBER[1];
buffer[2]=NUMBER[2];
buffer[3]=NUMBER[3];
KEYNUM1=0;
DSPOFF1();
P0=0xBd;
P0=0xff;
}
if(CODEFLG5)
if(KEYNUM1==4)
{
if((NUMBER[0]==buffer[0])&&(NUMBER[1]==buffer[1])&&(NUMBER[2]==buffer[2])&&(NUMBER[3]==buffer[3]))
{
E_write(CodeAddress,buffer,4);
wait_1ms(500);
buffer[0]=0xff;
E_read(CodeAddress,buffer,4);
if((NUMBER[0]==buffer[0])&&(NUMBER[1]==buffer[1])&&(NUMBER[2]==buffer[2])&&(NUMBER[3]==buffer[3]))
SRIGHT1();
else
SERROR();
KEYNUM1=0;
DSPOFF1();
CODEFLG5=0;
hideshow=0;
}
else
{
KEYNUM1=0;
DSPOFF1();
CODEFLG5=0;
CODEFLG4=1;
P0=0xBc;
P0=0xff;
}
}
}
voidSRIGHT1()
{
BUZZER1=0;
wait_1ms(1000);
BUZZER1=1;
}
voidSERROR()
{
BUZZER1=0;
wait_1ms(300);
BUZZER1=1;
wait_1ms(600);
BUZZER1=0;
wait_1ms(300);
BUZZER1=1;
}
//开锁
voidOpenlock()
{
if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 门口 程序