?? main.c
字號:
#include "public.h"
void main(void)
{
//MCU初始化
P3_1=1;
init();
//讀5045(得到的5種數(shù)據(jù),將在can初始化時使用)
read5states();
//can初始化
can_init();
//數(shù)據(jù)初始化
init_data();
P3_1=0;
while(1){
if(m_set5045flg==0){
write5045();
m_set5045flg=1;
}
if(time_nocan_flg==1){
can_init();
time_nocan_count=TIMER_400ms;
time_nocan_flg=0;
}
//can發(fā)送接收
receivedata();
senddata();
//功能設(shè)置
setfunc();
//顯示當前應(yīng)該顯示的內(nèi)容
display();
led();
advanceoutput();
// m_cMakeNewFlg=0;
watchdog();
}
}
//功能設(shè)置(F0-F4切換時,設(shè)置各種功能)
void setfunc(void)
{
//"跳線+上呼或下呼按鈕按下",進入子功能設(shè)置狀態(tài)
//"跳線+上呼或下呼按鈕未按下+脫離子功能設(shè)定超3s",進入父功能設(shè)置狀態(tài)
if(P1_7==0){
if(P1_0==0){ //上呼按鈕按下
m_cSettingFuncFlg=0;
m_cSettingSubFuncFlg=1;
m_cSubToParLess2sFlg=1;
}else if(P1_2==0){ //下呼按鈕按下
m_cSettingFuncFlg=0;
m_cSettingSubFuncFlg=1;
m_cSubToParLess2sFlg=1;
}else if(m_cSubToParLess2sFlg==1){
m_cSettingFuncFlg=0;
m_cSettingSubFuncFlg=1;
}else if(m_cSubToParLess2sFlg==0){
m_cSettingFuncFlg=1;
m_cSettingSubFuncFlg=0;
}
}
if(P1_7==0) //功能切換
if((m_cSettingFuncFlg==1) && (m_cSettingSubFuncFlg==0))
if(m_cNewFuncFlg==1){
// if((m_cFuncTimer--)==0){ //2004.08.31 14:21 LHM
if(m_cFuncCnt!=4)
m_cFuncCnt++;
else
m_cFuncCnt=0;
if(m_cFuncCnt==0){
m_cSubFuncCnt=data5045.cF0;
}else if(m_cFuncCnt==1){
m_cSubFuncCnt=data5045.cF1;
}else if(m_cFuncCnt==2){
m_cSubFuncCnt=data5045.cF2;
}else if(m_cFuncCnt==3){
m_cSubFuncCnt=data5045.cF3;
}else if(m_cFuncCnt==4){
m_cSubFuncCnt=data5045.cF4;
}
m_cNewFuncFlg=0;
m_cFuncTimer=TIMER_FUNC_NUM;
}
if(P1_7==0) //子功能切換
if((m_cSettingFuncFlg==0) && (m_cSettingSubFuncFlg==1))
if(m_cNewSubFuncFlg==1){
//最大取值
if(m_cFuncCnt==0){
m_cMaxSubNum=7;
}else if(m_cFuncCnt==1){
// m_cMaxSubNum=47;
m_cMaxSubNum=m_RecData.cMaxFloor;
}else if(m_cFuncCnt==2){
m_cMaxSubNum=2;
}else if(m_cFuncCnt==3){
m_cMaxSubNum=1;
}else if(m_cFuncCnt==4){
m_cMaxSubNum=1;
}
//范圍檢查
if(m_cSubFuncCnt>m_cMaxSubNum)
m_cSubFuncCnt=m_cMaxSubNum;
if(P1_0==0){ //上呼按鈕按下
// if((m_cSubFuncTimer--)==0){
if(m_cSubFuncCnt<m_cMaxSubNum)
m_cSubFuncCnt++;
else
m_cSubFuncCnt=0;
m_cNewSubFuncFlg=0;
m_cSubFuncTimer=TIMER_SUBFUNC_NUM;
// }
}else if(P1_2==0){ //下呼按鈕按下
// if((m_cSubFuncTimer--)==0){
if(m_cSubFuncCnt!=0)
m_cSubFuncCnt--;
else
m_cSubFuncCnt=m_cMaxSubNum;
m_cNewSubFuncFlg=0;
m_cSubFuncTimer=TIMER_SUBFUNC_NUM;
// }
}
if(m_cFuncCnt==0){
data5045.cF0=m_cSubFuncCnt;
m_set5045flg=0;
/*在給SJA1000進行初始化時,發(fā)現(xiàn)有這樣一個問題,當SJA1000工作之后,就沒辦法將其進行初始化了。
除非將其硬件復位。為了改正這個狀況,現(xiàn)在的解決辦法是,當設(shè)置發(fā)生變化時,進行寫5045操作:s5045();
在寫操作后,將sja1000復位管腳復位,然后重新調(diào)用sja1000初始化程序。
此時將重新進行SJA1000的初始化工作
最初執(zhí)行的操作為:在重新寫設(shè)置數(shù)據(jù)到4045后,執(zhí)行死循環(huán).此時將導致CPU復位.程序?qū)⒅匦碌拈_始,但現(xiàn)在
可通過對sja1000的復位腳進行操作對其硬件復位。
*/
/*
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
*/
can_init();
}else if(m_cFuncCnt==1){
data5045.cF1=m_cSubFuncCnt;
m_set5045flg=0;
/*
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
*/
can_init();
}else if(m_cFuncCnt==2){
data5045.cF2=m_cSubFuncCnt;
m_set5045flg=0;
}else if(m_cFuncCnt==3){
data5045.cF3=m_cSubFuncCnt;
m_set5045flg=0;
}else if(m_cFuncCnt==4){
data5045.cF4=m_cSubFuncCnt;
m_set5045flg=0;
}
}
}
/*
time_stop_count=TIMER_STOP_NUM; //到站動作計數(shù)
time_stop_flg=0; //到站動作標志
time_stop2s_flg=0; //到站動作計時到標志
*/
void advanceoutput(void)
{
// uchar cOutput=0xFF;
uchar cOutput=0xF0;
//消防基站
if(m_cFireBaseFlg==1){
// cOutput=cOutput&0xF7;
cOutput=cOutput|0xF8;
}else{
// cOutput=cOutput&0xFF;
cOutput=cOutput&0xF7;
}
//到站動作(點燈,鳴鐘)
if(m_cStopFlg==1){
//到站動作開始
if(m_RecData.cDirect==0){ //下
// cOutput=cOutput&0xF9;
cOutput=cOutput|0xF6;
}else if(m_RecData.cDirect==1){ //上
// cOutput=cOutput&0xFA;
cOutput=cOutput|0xF5;
}else if(m_RecData.cDirect==0xFF){ //無(確保無到站動作即可)
// cOutput=cOutput&0xFF;
cOutput=cOutput&0xF8;
}
// m_cStopFlg=0;
time_stop_flg=1;
}else{
//確保無到站動作
// cOutput=cOutput&0xFF;
cOutput=cOutput&0xF8;
}
if(time_stop2s_flg==1){ //2秒時間到
// cOutput=cOutput&0xFF;
cOutput=cOutput&0xF8;
m_cStopFlg=0; //取消
time_stop_count=TIMER_STOP_NUM; //到站動作計數(shù)
time_stop_flg=0; //到站動作標志
time_stop2s_flg=0; //到站動作計時到標志
}
PD377=cOutput;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -