?? main.c
字號:
#include "public.h"
void main(void)
{
P1_2=1; //確保上電時LED光耦不動作
//MCU初始化
init();
//讀5045(得到5種數據,將在can初始化時使用,實際上顯示板僅F0控制器號F2顯示方式有用)
read5states();
//can初始化
can_init();
//數據初始化
init_data();
P1_2=0; //取消上電時LED光耦不動作
while(1){
//若200ms沒有CAN數據則認為應該復位CAN
if(time_nocan200ms_flg==1){
time_nocan_count=TIMER_NOCANDATA_NUM; //無CAN數據計數
time_nocan_flg=0; //無CAN數據標志
time_nocan200ms_flg=0; //無CAN數據計時到標志
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
can_init();
}
if(m_set5045flg==0){
write5045();
m_set5045flg=1;
}
//can接收
receivedata();
//功能設置
setfunc();
//顯示當前應該顯示的內容
display();
led();
ReportStop();
watchdog();
}
}
//功能設置(F0-F4切換時,設置各種功能)
void setfunc(void)
{
//"跳線+上呼或下呼按鈕按下",進入子功能設置狀態
//"跳線+上呼或下呼按鈕未按下+脫離子功能設定超3s",進入父功能設置狀態
if(P1_7==0){
if(P1_6==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
m_cFuncCnt++;
if(m_cFuncCnt>=FUNC_NUM)
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;
}else if(m_cFuncCnt==5){
m_cSubFuncCnt=data5045.cF5;
}else if(m_cFuncCnt==6){
m_cSubFuncCnt=data5045.cF6;
}else if(m_cFuncCnt==7){
m_cSubFuncCnt=data5045.cF7;
}
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=3;
}else if(m_cFuncCnt==3){
m_cMaxSubNum=1;
}else if(m_cFuncCnt==4){
m_cMaxSubNum=1;
}else if(m_cFuncCnt==5){
m_cMaxSubNum=55;
}else if(m_cFuncCnt==6){
m_cMaxSubNum=1;
}
//范圍檢查
if(m_cSubFuncCnt>m_cMaxSubNum)
m_cSubFuncCnt=m_cMaxSubNum;
if(P1_6==0){ //功能選擇按鈕被按下(對應上呼按鈕按下,累加)
// if((m_cSubFuncTimer--)==0){
if(m_cSubFuncCnt<m_cMaxSubNum)
m_cSubFuncCnt++;
else
m_cSubFuncCnt=0;
m_cNewSubFuncFlg=0;
m_cSubFuncTimer=TIMER_SUBFUNC_NUM;
// }
}
if(m_cFuncCnt==0){
data5045.cF0=m_cSubFuncCnt;
m_set5045flg=0;
/*在給SJA1000進行初始化時,發現有這樣一個問題,當SJA1000工作之后,就沒辦法將其進行初始化了。
除非將其硬件復位。為了改正這個狀況,現在的解決辦法是,當設置發生變化時,進行寫5045操作:s5045();
在寫操作后,將sja1000復位管腳復位,然后重新調用sja1000初始化程序。
此時將重新進行SJA1000的初始化工作
最初執行的操作為:在重新寫設置數據到4045后,執行死循環.此時將導致CPU復位.程序將重新的開始,但現在
可通過對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;
}else if(m_cFuncCnt==5){
data5045.cF5=m_cSubFuncCnt;
m_set5045flg=0;
}else if(m_cFuncCnt==6){
data5045.cF6=m_cSubFuncCnt;
m_set5045flg=0;
}else if(m_cFuncCnt==7){
data5045.cF7=m_cSubFuncCnt;
m_set5045flg=0;
}
}
}
//報站(報站)
void ReportStop(void)
{
uchar cTemp=0;
m_cReportData = m_cReportIdx;
if(m_cReportFlg==1){
m_cReportingFlg = 1;
m_cReportFlg=0; //設置后,立即清標記
time_report_flg=1;
}
if(time_report2s_flg==1){ //報時2s時間到,停止報時
m_cReportData=m_cReportData&0x7F;
m_cReportingFlg=0;
time_report_count=TIMER_REPORT_NUM;
time_report_flg=0;
time_report2s_flg=0;
}
if(m_cReportingFlg==1){
m_cReportData = 0x80|m_cReportIdx;
}else if(m_cReportingFlg==0){
m_cReportData = m_cReportData&0x7F;
}
if(data5045.cF7==1){ //報站輸出高有效
cTemp = m_cReportData;
}else if(data5045.cF7==0){ //報站輸出低有效
cTemp = ~m_cReportData;
}
// PF377 = m_cReportData;
PF377 = cTemp;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -