亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 程序概述: 這是個具體產品程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
				DoubleKeyPressTimer    = I2CBuffer[2];
				CheckDoorIntervalTimer = I2CBuffer[3];
				RouteInfoStartAddr     = *(UINT *)(&I2CBuffer[4]);
				RouteInfoLength        = *(UINT *)(&I2CBuffer[6]);
				RFCardTabStartAddr     = *(UINT *)(&I2CBuffer[8]);
				RFCardTabLength        = *(UINT *)(&I2CBuffer[10]);
				AlarmRecordStartAddr   = *(UINT *)(&I2CBuffer[12]);
				AlarmRecordLength      = *(UINT *)(&I2CBuffer[14]);

				DoorNumber = RouteInfoLength / sizeof(t_RouteInfo); // DoorNumber決定了管理機需要輪檢的門口機的數量,也就決定了數組的大小
				if (DoorNumber > MAX_DOOR_NUM)
				{
					DoorNumber = MAX_DOOR_NUM;
				}

				memcpy(MainLogo, &I2CBuffer[0x30], DISP_BUF_LENGTH);

				bTemp = TRUE;				// 初始化成功

				// 開機畫面延時
				RESET_WDT;
				Delayms(20);
				RESET_WDT;
				Delayms(20);
				RESET_WDT;
				Delayms(20);
			}
		}
		if (bTemp == FALSE)					// 如果初始化失敗,即讀I2C不成功或者I2C沒有被初始化
		{
			memcpy(&DispBuffer[0][1], "嚴重錯誤:      ", DISP_BUF_LENGTH);
			memcpy(&DispBuffer[1][1], "系統初始化失敗!", DISP_BUF_LENGTH);
			UpdateDisp(TRUE);
			BEEP = P_ON;
			while (1)						// 出現嚴重錯誤后系統將停留在初始化狀態,不再繼續工作
			{
				RESET_WDT;
				PCON |= IDL_;
				_nop_();
				_nop_();
			}
		}
	}
	
	RESET_WDT;
	// 初始化CheckDoorIntervalArray[]為默認值
	for (i=0; i<DoorNumber; i++)
	{
		if (CheckDoorIntervalTimer == 0)
		{
			CheckDoorIntervalArray[i] = 0;
		}
		else
		{
			CheckDoorIntervalArray[i] = CheckDoorIntervalTimer;
		}
	}

	InitRealTimer();

	RESET_WDT;

	SystemStatus.Status = Status_Idle;
	InitDispBuffer(TRUE);
	UpdateDisp(FALSE);

	RED_LED = P_OFF;

	ENABLE_WDT;
	EA = ENABLE;						// Enable global interrupt

	while ( 1 )
	{
		RED_LED = P_ON;

		WDT_Counter = 0x00;				// 給狗糧
		if (GetMessage(&msg))
		{
			switch (msg.Msg)
			{
			case MSG_TIMER_OVER:		// 10ms系統心跳
			{
				if (BeepTimer > 0)
				{
					BEEP = P_ON;
					BeepTimer --;
					if (BeepTimer == 0)
					{
						BEEP = P_OFF;
					}
				}

				if (SystemStatus.Status == Status_Idle)			//多余(除開鎖)
				{
					ClosePower( );								//空閑狀態關閉音視頻
				}
				if (MessageShowTimer > 0)
				{
					if (SystemStatus.Status == Status_ShowingMessage)   // 如果當前正在顯示消息
					{
						if ((--MessageShowTimer) == 0)      // 如果顯示的時間到,則退回到顯示消息之前的狀態
						{
							SystemStatus.Status = SystemStatus.PreStatus;
							SystemStatus.PreStatus = Status_Idle;
							InitDispBuffer(TRUE);
							UpdateDisp(TRUE);
						}
					}
					else
					{
						MessageShowTimer = 0;
					}
				}

				if (RingTimeCounter > 0)
				{
					if ((SystemStatus.Status == Status_Calling)         // 管理機正在呼叫室內分機
					 || (SystemStatus.Status == Status_bCallingIn_F)    // 管理機正在振鈴
					 || (SystemStatus.Status == Status_bCallingIn_M))
					{
						if ((--RingTimeCounter) == 0)
						{
							// 發送斷開連接的命令
							RS485SendCancelCommand();
							// 關閉音頻、視頻電源
							ClosePower();
							SystemStatus.Status = Status_Idle;
						}
					}
					else
					{
						RingTimeCounter = 0;
					}
				}

				if (AlarmTimeCounter > 0)
				{
					if ((SystemStatus.Status == Status_Alarming_F)      // 管理機正在報警
					 || (SystemStatus.Status == Status_Alarming_M))
					{
						if ((--AlarmTimeCounter) == 0)
						{
							ClosePower();
							SystemStatus.Status = Status_Idle;
						}
					}
					else
					{
						AlarmTimeCounter = 0;
					}
				}

				if (ViewTimeCounter > 0)    // 監視定時器減計數
				{
					if (SystemStatus.Status == Status_Viewing)
					{
						if ((--ViewTimeCounter) == 0)
						{
							// 發送取消命令
							RS485SendCancelCommand();
							SystemStatus.Status = Status_Idle;//多余,防止返回出錯
						}
					}
					else
					{
						ViewTimeCounter = 0;
					}
				}

				// 超時重發定時器減計數
				if (RS485SendWaitTimer > 0)		// 正在等待應答
				{
					if ((--RS485SendWaitTimer) == 0)	// 超過重發次數,放棄發送
					{
						memcpy(&DispBuffer[1][1], "對方沒有應答!  ", DISP_BUF_LENGTH);
						DispBuffer[1][0] = 0x01;
						if ((SystemStatus.Status == Status_Viewing)
						 || (SystemStatus.Status == Status_Talking)
						 || (SystemStatus.Status == Status_Calling)
						 || (SystemStatus.Status == Status_Alarming_F)
						 || (SystemStatus.Status == Status_Alarming_M)
						 || (SystemStatus.Status == Status_bCallingIn_F)
						 || (SystemStatus.Status == Status_bCallingIn_M))
						{
							ClosePower();
						}
						MessageShowTimer = 200;
						SystemStatus.PreStatus = Status_Idle;
						SystemStatus.Status = Status_ShowingMessage;
						UpdateDisp(FALSE);
					}
					else if ((RS485SendWaitTimer%MAX_RS485_WAIT_TIMES) == 0)    // 超時,重發
					{
						RS485SendTxFrame();
					}
				}

				if (LastKeyTimer < 0xFF)// 給兩次按鍵之間的時間間隔計數,最大為2550ms
					LastKeyTimer ++;

				TickCountAdd();			// 更新時間顯示
				break;
			}
			case MSG_TIMER_TEN_SECOND:	// 1秒鐘定時時間到,檢查整個路由表中的每一個門口機發來的數據包的時間間隔是否超過設定值
			{
/*
				for (i=0; i<DoorNumber; i++)
				{
					if (CheckDoorIntervalArray[i] > 0)
					{
						CheckDoorIntervalArray[i] --;
						if (CheckDoorIntervalArray[i] == 0)
						{
							j = RouteInfoStartAddr + i * sizeof(t_RouteInfo);
							I2CReadString(0x00, j, (BYTE *)(&RouteInfo), sizeof(t_RouteInfo));
							// 判斷當前門口機是否存在
							if (RouteInfo.User != 0)
							{
								// 以下為保存報警記錄并初始化報警顯示緩沖
								SystemStatus.Status = Status_Alarming_M;
								InitDispBuffer(TRUE);

								AlarmRecord.Addr[0] = 0x00;				// 第一個字節
								AlarmRecord.Addr[1] = RouteInfo.House;	// 樓棟號
								DispBuffer[1][7] = (RouteInfo.House >> 4) | 0x30;
								DispBuffer[1][8] = (RouteInfo.House&0x0F) | 0x30;
								
								AlarmRecord.Addr[2] = RouteInfo.Door;	// 單元號							
								DispBuffer[1][11] = (RouteInfo.Door >> 4) | 0x30;
								DispBuffer[1][12] = (RouteInfo.Door&0x0F) | 0x30;
								AlarmRecord.Addr[3] = 0x00;				// 第四個字節為0x00表示是從門口機報警而不是從分機報警
								
								// 然后發出報警聲音
								AlarmTimeCounter = MAX_ALARM_TIMES/2;	// 設定最長報警時間為分機報警時間的一半
								OpenAlarmPower();						// 打開報警音頻電路
								UpdateDisp(FALSE);
	
								memcpy((BYTE *)(&(AlarmRecord.Time)), (BYTE *)(&Time), sizeof(t_Time));// 保存時間
								SaveAlarmRecord(&AlarmRecord);			// 將報警記錄AlarmRecord結構體寫入到I2C存儲器中

								// 將I2C存儲器中該單元的路由信息更新為該門口機不存在
								RouteInfo.User = 0;
								I2CWriteString(0x00, j, (BYTE *)(&RouteInfo), sizeof(t_RouteInfo));

								// 當這次發現某一個門口機失去聯系的時候,就跳出這次的檢查,等下一個1秒鐘再來檢查其它的門口機,防止管理機不能響應其它的消息
//								break;
							}
						}
					}
				}
*/
				break;
			}
			case MSG_KEY_ROUTINE:
			{
				KeyRoutine(&msg);
				break;
			}
			case MSG_KEY_DOWN:
			{
				KeyPressHandler(&msg);
				break;
			}
			case MSG_TIME_DISPLAY:
			{
				// 更新顯示
				// 如果當前顯示的是時間, 則更新顯示, 否則不更新
				if ((KeyBuffer[0] == 0x00) && (SystemStatus.Status == Status_Idle))
				{
					InitDispBuffer(FALSE);
					UpdateDisp(FALSE);
				}
				break;
			}
			case MSG_RS485_RX_FRAME:
			{
				RS485RxFrameHandler(&msg);
				break;
			}
//			case MSG_RS232_RX:          // 從模擬串口接收到數據
//			{
//				RS232RxHandler(&msg);
//				break;
//			}
			case MSG_RX_CARDNUMBER:		// 接收到一張卡的卡號
			{
				KeyBuffer[0] = 0x00;
				BEEP = 0;
				// 轉換為12位數字
				for (i=1; i<=CardBuffer[0]; i++)
				{
					KeyBuffer[++KeyBuffer[0]] = CardBuffer[i] / 100;
					CardBuffer[i] = CardBuffer[i] % 100;
					KeyBuffer[++KeyBuffer[0]] = CardBuffer[i] / 10;
					CardBuffer[i] = CardBuffer[i] % 10;
					KeyBuffer[++KeyBuffer[0]] = CardBuffer[i];
					// 
				}
				for(i=0; i<KeyBuffer[0]; i++)
				{
					DispBuffer[1][DISP_BUF_LENGTH-i] = KeyBuffer[KeyBuffer[0]-i]+0x30;
				}
				BeepTimer = 20;			// 每按一個按鍵,蜂鳴器響100ms
				// 更新LCD顯示緩沖
				DispBuffer[1][0] = 0x01;
				UpdateDisp(FALSE);
				break;
			}
			default:
				break;
			}
		}
		else                            // 隊列中沒有消息
		{
			RED_LED = P_OFF;
			// 進入休眠狀態, 靠中斷來激活
			PCON |= IDL_;
			_nop_();
			_nop_();
		}
	}
}

/*----------------------------------------------------------------------------+
| General Subroutines                                                         |
+----------------------------------------------------------------------------*/
//
// 延時微秒
void Delayus(BYTE timer) reentrant
{
// 每微秒執行2條指令
#if (SYS_CLOCK/N_DIV) == 2000
	timer -= 4;
	while ( --timer ) ;

// 每微秒執行4條指令
#else
#if (SYS_CLOCK/N_DIV) == 4000
	timer -= 2;
	_nop_();
	do {
		_nop_();
		_nop_();
	}while (--timer);
#endif
#endif
}

//
// 延時毫秒
void Delayms(BYTE timer)
{
	do {
		Delayus(250);
		Delayus(250);
		Delayus(250);
		Delayus(248);
	}while (--timer);
}

//
// 從RS485串口接收到一幀數據
void RS485RxFrameHandler(PMSG msg)
{
	BYTE i;
	BYTE j;
//	BYTE k;
	bit bTemp;
	UINT temp;
	FRAME xdata *pRxFrame;
//	t_RouteInfo *p_temp;

	pRxFrame = (FRAME *)msg->Param;
 
	RouteInfo.RouteAddr = pRxFrame->Frame.Addr[1];// 由數據幀中的路由地址找到其對應的單元地址
	RouteInfo.DoorAddr  = pRxFrame->Frame.Addr[2];
	RouteInfo.User      = pRxFrame->Frame.Addr[3];// 用用戶的房號暫時存放分機地址,在查找對應的單元地址的時候同時把用戶的樓層和房號更新

	if (pRxFrame->Frame.Addr[3] == 0x00)          // 數據幀是從門口機發來的
	{
		if (pRxFrame->Frame.aData[0] & Command_Ack)       // 應答幀
		{
			pRxFrame->Frame.aData[0] &= ~Command_Ack;
			// 判斷數據類型
			switch (pRxFrame->Frame.aData[0])
			{
			case Command_ViewRequest:                   // 門口機應答管理機發出的監視請求命令
			{
				if (SystemStatus.Status == Status_ViewSendingRequest)   // 如果管理機正在等待門口機的返回

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久99精品国产片| 欧美日韩www| 久久99精品国产| 三级影片在线观看欧美日韩一区二区 | 国产亚洲婷婷免费| 日韩欧美国产一二三区| 日韩一级高清毛片| 精品国产伦一区二区三区观看方式| 欧美日韩一区不卡| 欧美一区二区三区性视频| 欧美一级生活片| 日韩免费性生活视频播放| 日韩精品一区二区三区四区| 久久综合色播五月| 国产欧美一区二区精品久导航| 久久久国产一区二区三区四区小说| 久久久久久久国产精品影院| 久久久久久97三级| 国产精品成人午夜| 亚洲成av人片在线观看无码| 日韩激情av在线| 激情综合色播激情啊| 国产一区二区三区电影在线观看| 国产精品1区2区| 色综合咪咪久久| 7878成人国产在线观看| www激情久久| 亚洲精品亚洲人成人网| 日本午夜精品视频在线观看 | 国内久久婷婷综合| 成人国产精品免费| 欧美无乱码久久久免费午夜一区| 91麻豆精品国产91久久久久久久久| 日韩欧美成人一区二区| 中文字幕在线一区二区三区| 亚洲国产成人va在线观看天堂| 久久福利资源站| 色综合欧美在线视频区| 精品福利在线导航| 亚洲制服丝袜一区| 国产不卡在线一区| 欧美美女视频在线观看| 国产午夜精品福利| 天天色图综合网| 成人小视频在线观看| 欧美精品色综合| 亚洲国产成人午夜在线一区| 日韩**一区毛片| 91亚洲精品乱码久久久久久蜜桃| 欧美一区2区视频在线观看| 亚洲三级在线观看| 国产乱子轮精品视频| 欧美日韩视频在线第一区 | 92精品国产成人观看免费| 日韩欧美国产精品| 婷婷国产v国产偷v亚洲高清| av高清不卡在线| 欧美xxxx老人做受| 日精品一区二区三区| 色综合咪咪久久| 国产精品家庭影院| 国产精品乡下勾搭老头1| 日韩欧美一区二区不卡| 亚洲一区二区三区四区中文字幕| 成人黄色小视频在线观看| 欧美一区二区三级| 午夜婷婷国产麻豆精品| 色婷婷一区二区三区四区| 国产精品美女一区二区在线观看| 国产自产2019最新不卡| 精品国产凹凸成av人导航| 美女视频黄频大全不卡视频在线播放| 日本福利一区二区| 亚洲欧美另类综合偷拍| 91亚洲男人天堂| 亚洲免费电影在线| 一本久久精品一区二区 | 色狠狠桃花综合| 国产精品国产三级国产| 成人激情av网| 国产精品视频看| a4yy欧美一区二区三区| 中文字幕日本不卡| 91日韩一区二区三区| 亚洲九九爱视频| 在线亚洲精品福利网址导航| 一区二区三区日韩欧美| 欧美日韩美少妇| 丝袜脚交一区二区| 日韩美女一区二区三区四区| 黄色资源网久久资源365| 久久影院电视剧免费观看| 国产乱码精品一区二区三| 国产精品欧美一级免费| 91影院在线观看| 午夜日韩在线观看| 精品久久久久久久久久久久久久久 | 91女人视频在线观看| 亚洲视频精选在线| 欧美精品日韩一区| 国产最新精品精品你懂的| 日本一区二区高清| 在线精品亚洲一区二区不卡| 日韩电影在线观看电影| 精品噜噜噜噜久久久久久久久试看| 国产又粗又猛又爽又黄91精品| 国产亚洲欧美日韩俺去了| 99视频一区二区三区| 婷婷综合另类小说色区| 久久久精品中文字幕麻豆发布| thepron国产精品| 日韩精品乱码av一区二区| 久久看人人爽人人| 色综合久久精品| 久久99九九99精品| 亚洲人精品午夜| 欧美一区二区免费观在线| 成人深夜视频在线观看| 亚洲国产精品久久一线不卡| 欧美sm极限捆绑bd| 91久久香蕉国产日韩欧美9色| 欧美aⅴ一区二区三区视频| 中文字幕不卡在线| 欧美一卡在线观看| 色哟哟一区二区三区| 国产自产高清不卡| 日韩精品五月天| 亚洲人成在线观看一区二区| 26uuu亚洲综合色| 欧美日韩国产bt| 99re热视频精品| 国产剧情av麻豆香蕉精品| 亚洲电影一区二区| 亚洲图片你懂的| 国产日产亚洲精品系列| 欧美一区欧美二区| 色欲综合视频天天天| 东方aⅴ免费观看久久av| 美国毛片一区二区| 亚洲电影在线播放| 亚洲综合无码一区二区| 日韩一区在线播放| 中文乱码免费一区二区| 日韩精品中文字幕一区| 91精品国产入口在线| 欧美理论在线播放| 欧美中文字幕一区二区三区 | 亚洲成a人在线观看| 亚洲裸体xxx| 中文字幕一区二区三区乱码在线 | 一本在线高清不卡dvd| av电影在线观看一区| 成人做爰69片免费看网站| 国产精品正在播放| 极品尤物av久久免费看| 蜜臀av性久久久久av蜜臀妖精| 无码av免费一区二区三区试看 | 欧美人动与zoxxxx乱| 欧美日韩成人综合天天影院| 欧美日韩一区在线| 欧美日韩国产一区二区三区地区| 91福利视频在线| 欧美日韩综合在线免费观看| 欧美三片在线视频观看| 6080yy午夜一二三区久久| 91麻豆精品久久久久蜜臀| 日韩欧美国产三级| 国产亚洲精品福利| 国产精品国产三级国产| 一区二区三区四区av| 天天综合色天天| 狠狠狠色丁香婷婷综合激情| 国产99久久久精品| www.66久久| 911精品产国品一二三产区| 在线观看91精品国产麻豆| 欧美一区二区三区四区五区| 欧美精品一区二区三区蜜桃视频| 久久久91精品国产一区二区精品| 国产精品视频第一区| 亚洲一区二区三区小说| 乱一区二区av| 99精品视频在线观看免费| 欧美亚洲愉拍一区二区| 日韩免费看网站| 国产精品久久久久久久久晋中| 亚洲精品视频一区| 免费高清成人在线| 91亚洲男人天堂| 日韩欧美一级二级三级| 国产精品久久久久影院色老大 | 久久色中文字幕| 亚洲欧美日韩国产中文在线| 蜜桃精品在线观看| 91麻豆swag| 久久先锋影音av鲁色资源网| 亚洲精品视频在线看| 国产呦萝稀缺另类资源| 一本久久精品一区二区| 久久久国产精品不卡|