?? user.c
字號(hào):
//user.c
#include "pic18.h"
#include "os\os.h"
#include "user\user.h"
#include "user\pcb.h"
static unsigned char CommRxCnt,CommRxOld;
static union
{
unsigned char Buff[32];
struct
{
unsigned int MyAddr;
unsigned int SourceAddr;
unsigned int FuctCode;
unsigned char dLen;
unsigned char Data [];
unsigned char Sum;
}Frame;
}Comm;
unsigned char LockState; //鎖狀態(tài),0=閉鎖,1=開(kāi)鎖
unsigned char DoorState; //門狀態(tài),0=關(guān)門,1=開(kāi)門
unsigned char DoorOldState; //門上次的狀態(tài),0=關(guān)門,1=開(kāi)門
unsigned char OpenSwState; //出門按鈕的狀態(tài),0=按下,1=放開(kāi)
unsigned char OpenSwOldState; //出門按鈕上次的狀態(tài),1=按下
unsigned char DoorSw; //安裝門磁的端口
unsigned char TmrUnLock[PORTS]; //開(kāi)鎖保持時(shí)間
unsigned char DoorOpenTime[PORTS]; //門開(kāi)計(jì)時(shí)
void userinit(void)
{
}
void WgReader(void)
{
}
void CommCmd(unsigned int cmd) //命令解釋
{
switch (cmd)
{
case 0x0101:
{
break;
}
case 0x0102:
{
break;
}
}
}
void CommRxProtocol(void) // 通信接收協(xié)議解釋任務(wù)
{
unsigned char rx;
while(1)
{
while (!osGetCommBuff(1,&rx))
{
DelayOsTicks(1);
}
if (rx==0x7e)
{
if ((CommRxCnt>8)&&(Comm.Frame.Sum==Comm.Buff[CommRxCnt]))
{
CommCmd(Comm.Frame.FuctCode);
}
CommRxCnt=0;
Comm.Frame.Sum=0;
osQuit();
}
else if (CommRxOld==0x7f)
{
if (rx==0x01)
{
rx=0x7e;
CommRxOld=0x01;
}
else if (rx==0x02)
{
rx=0x7f;
CommRxOld=0x02;
}
else //錯(cuò)誤
{
CommRxCnt=0;
Comm.Frame.Sum=0;
osQuit();
}
}
else
{
CommRxOld=rx;
}
Comm.Buff[CommRxCnt]=rx;
CommRxCnt ++;
if (CommRxCnt<Comm.Frame.dLen+8)
{
Comm.Frame.Sum += rx;
}
}
}
void CardTask(void)
{
osQuit();
}
void UnLock(unsigned char port)//開(kāi)鎖功能
{
// 從存儲(chǔ)器讀取開(kāi)鎖保持時(shí)間
LockState |= 1<<port ;// 開(kāi)鎖
}
void CloseLockTask(void)//閉鎖任務(wù)
{
unsigned char port;
while (1)
{
DelayOsTicks(100); //延時(shí)1秒
for (port=0;port<PORTS;port++)
{
if (TmrUnLock[port])
{
TmrUnLock[port] --;
if (TmrUnLock[port]==0)
{
;// 如果不在禁止閉鎖時(shí)間段,則閉鎖
}
}
} //for ()
;//刷新繼電器狀態(tài)
} // while (1)
}
void ChkOpenSw(void)//檢測(cè)出門按鈕開(kāi)關(guān)
{
unsigned char port;
while (1)
{
OpenSwOldState=0;
for (port=0;port<PORTS;port++)
{
if (OpenSwState&1<<port)
{
OpenSwOldState |= 1<<port;
}
}
DelayOsTicks(10); //0.1s
for (port=0;port<PORTS;port++)
{
if ((OpenSwState&1<<port)&&(OpenSwOldState&1<<port))
{
UnLock(port);// 開(kāi)門
}
}
}
}
void ChkDoorSw(void) //門狀態(tài)檢測(cè)
{
unsigned char port;
while (1)
{
DelayOsTicks(20); //0.2s
for (port=0;port<PORTS;port++)
{
if (DoorSw&1<<port) //如果安裝門磁
{
if (DoorState & (1<<port)) //門開(kāi)
{
if ((DoorOldState &= 1<<port)&&(LockState | !(1<<port))) // 如果不是開(kāi)鎖狀態(tài)
{
;//破門報(bào)警
}
DoorOldState |= 1<<port;
if (DoorOpenTime[port])
{
DoorOpenTime[port]--;
if (DoorOpenTime[port]==0)
{
; //關(guān)門提醒
}
}
}
else
{
DoorOpenTime[port]=200; //0.2*200=40s
DoorOldState &= ~(1<<port);
}
}
}
}
}
void LEDTask(void)
{
}
void BeepTask(void)
{
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -