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

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

?? lcd.c

?? 程序概述: 這是個具體產品程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
// Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
/*----------------------------------------------------------------------------+
|  File Name:  LCD.c, v1.0.1                                                  |
|  Author:     安徽雷森電子有限公司合肥研發中心                               |
|  Date:       2005年08月01日                                                 |
+-----------------------------------------------------------------------------+
|  Description: 聯網型智能樓宇對講系統 -- 管理中心機LCD顯示屏驅動程序         |
|               器件選擇 -- STC89C58RD+, PQFP-44                              |
|               時鐘頻率 -- 24.000 MHz                                        |
+-----------------------------------------------------------------------------+

/*----------------------------------------------------------------------------+
| Include files                                                               |
+----------------------------------------------------------------------------*/
#include "Main.h"
#include "LCD.h"
#include "Timer.h"
#include "KeyProcess.h"
#include <stdio.h>

/*----------------------------------------------------------------------------+
| Type Definition & Macro                                                     |
+----------------------------------------------------------------------------*/
#define LcdCLK   P1_2
#define LcdSDI   P1_3
#define LcdCS    P1_4

/*----------------------------------------------------------------------------+
| Global Variables                                                            |
+----------------------------------------------------------------------------*/
// 顯示緩沖,第一個字節最低位表示是否需要刷新顯示,最高位表示是否反白顯示
idata BYTE DispBuffer[2][DISP_BUF_LENGTH+1];

xdata BYTE MainLogo[DISP_BUF_LENGTH];

/*----------------------------------------------------------------------------+
| Internal Variables                                                          |
+----------------------------------------------------------------------------*/
bit FirstLineReverseDisp;       // 第一行是否反白顯示
bit SecondLineReverseDisp;      // 第二行是否反白顯示

code BYTE BlankLine[16] = "                ";

// 設置菜單
code t_Menu SetupMenu[16] =
{
//      Caption,NextMenu,Parent,Child,MenuFunction
// 通過父菜單來指示各個不級的菜單,使之能夠在同一級菜單中上下翻頁
// 數組的第一項菜單為總菜單,用來指示菜單項的第一行,實際上并不顯示
/* 0 */ "                ",  0, 0, 1, NULL,
/* 1 */	"1.設置系統時間  ",  2, 0, 0, EnterSetupSystemTime,
/* 2 */	"2.設置管理員密碼",  3, 0, 0, EnterSetupSystemPassword,
/* 3 */	"3.增加刷卡用戶 >",  4, 0, 7, NULL,
/* 4 */	"4.刪除刷卡用戶 >",  5, 0, 9, NULL,
/* 5 */	"5.系統參數設置 >",  6, 0,12, NULL,
/* 6 */	"6.返回          ",  1, 0, 0, ReturnIdle,

// 增加刷卡用戶的子菜單
/* 7 */	"1.通過刷卡      ",  8, 3, 0, EnterAddTempCardByCard,
/* 8 */	"2.通過輸入卡號  ",  7, 3, 0, EnterAddTempCardByNum,

// 刪除刷卡用戶的子菜單
/* 9 */	"1.通過刷卡      ", 10, 4, 0, EnterDelTempCardByCard,
/*10 */	"2.通過輸入卡號  ", 11, 4, 0, EnterDelTempCardByNum,
/*11 */ "3.刪除所有過期卡",  9, 4, 0, EnterDelTimeoutCard,

// 系統參數設置
/*12 */ "1.設置雙擊間隔  ", 13, 5, 0, EnterSetupDoubleClickTime,
/*13 */ "2.設置輪詢時間  ", 14, 5, 0, EnterSetupCheckIntervalTime,
/*14 */ "3.與計算機同步  ", 12, 5, 0, NULL,
/*15 */ "                ",  0, 0, 0, NULL,
};

/*----------------------------------------------------------------------------+
| General Subroutines                                                         |
+----------------------------------------------------------------------------*/
// 
// 初始化LCD顯示器,配置相應的寄存器
void InitLCD(void)
{
	FirstLineReverseDisp = FALSE;
	SecondLineReverseDisp = FALSE;

	LcdWriteControlData(0x30);			// 功能設定為擴充指令集  0x30
    LcdWriteControlData(0x06);			// 設定光標移動方向
    LcdWriteControlData(0x0D);			// 顯示狀態開關, 不顯示光標
	LcdWriteControlData(0x14);			// 設定游標的移動與顯示的移位控制位元,右移
	LcdWriteControlData(0x01);			// 清除顯示
	LcdWriteControlData(0x02);			// 顯示位置清零
}

// 
// 初始化顯示緩沖,根據當前不同的狀態而顯示不同的內容
// bForce: 是否需要更新第一行的內容
void InitDispBuffer(BOOL bForce)
{
	BYTE i;
//*/
	switch (SystemStatus.Status)
	{
	case Status_Init:					// 系統正在初始化
	{
		memcpy(&DispBuffer[0][1], "正在啟動        ", DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "請稍侯...       ", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_Idle:					// 平常情況
	{
		if (bForce)
		{
			DispBuffer[0][0] = 0x01;
			memcpy(&DispBuffer[0][1], MainLogo, DISP_BUF_LENGTH);  // 顯示公司標志
		}
		if (KeyBuffer[0] == 0x00)		// 按鍵緩沖區為空,則顯示當前時間
		{
			// 顯示時間
			UpdateTimeBuffer(&DispBuffer[1][1]);
			DispBuffer[1][0] = 0x01;
		}
		else							// 按鍵緩沖區非空,則顯示按鍵緩沖區的內容
		{
			memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);
			// 更新顯示緩沖
			for (i=1; i<=KeyBuffer[0]; i++)
			{
				DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = KeyBuffer[i]+0x30;
			}
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_ViewBefore: 			// 按下監視鍵之后的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入單元號碼:", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], "監視:__棟__單元", DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將按鍵的值顯示在屏幕上
		{
			DispBuffer[1][ViewBeforeDispOrder[i]] = KeyBuffer[i]+0x30;
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_ViewSendingRequest:
	{
		memcpy(&DispBuffer[0][1], &DispBuffer[1][1], DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "等待對方應答... ", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_Viewing:
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "正在監視:      ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], "      __棟__單元", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_CallBefore:     // 按下"呼叫"鍵之后的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入房間號碼:", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], "呼叫:__棟____房", DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將按鍵的值顯示在屏幕上
		{
			DispBuffer[1][CallBeforeDispOrder[i]] = KeyBuffer[i]+0x30;
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_CallSendingRequest:
	{
		memcpy(&DispBuffer[0][1], &DispBuffer[1][1], DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "等待對方應答... ", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_Talking:                // 正在通話
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "正在通話:      ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		if (ConnectingAddr[3] == 0x00)  // 正在和門口機進行通話
		{
			memcpy(&DispBuffer[1][1], "      __棟__單元", DISP_BUF_LENGTH);
			DispBuffer[1][0] = 0x01;
		}
		else                            // 正在和室內分機進行通話
		{
			memcpy(&DispBuffer[1][1], "      __棟____房", DISP_BUF_LENGTH);
			DispBuffer[1][0] = 0x01;
		}
		break;
	}
	case Status_Calling:        // 正在呼叫分機
	{
		memcpy(&DispBuffer[0][1], "正在呼叫:      ", DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "      __棟____房", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_bCallingIn_F:   // 正在被室內機呼叫
	{
		memcpy(&DispBuffer[0][1], "用戶呼叫:      ", DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "來自:__棟____房", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_bCallingIn_M:   // 正在被門口機呼叫
	{
		memcpy(&DispBuffer[0][1], "單元門口呼叫:  ", DISP_BUF_LENGTH);
		DispBuffer[0][0] = 0x01;
		memcpy(&DispBuffer[1][1], "來自:__棟__單元", DISP_BUF_LENGTH);
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupEnterPassword:
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入密碼:     ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將之前輸入的密碼,用'*'表示具體的數字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupMenu:      // 設置菜單界面
	{
		if (SystemStatus.lParam == 0)
		{
			SystemStatus.lParam = SetupMenu[0].Child;
		}
		i = SystemStatus.lParam;
		memcpy(&DispBuffer[0][1], SetupMenu[i].Caption, DISP_BUF_LENGTH);
		i = SetupMenu[i].NextMenu;
		memcpy(&DispBuffer[1][1], SetupMenu[i].Caption, DISP_BUF_LENGTH);

		// 決定哪一行需要反白顯示
		if (SystemStatus.wParam == 0x01)        // 選中第一行
		{
			DispBuffer[0][0] = 0x81;
			DispBuffer[1][0] = 0x01;
		}
		else if (SystemStatus.wParam == 0x02)   // 選中第二行
		{
			DispBuffer[0][0] = 0x01;
			DispBuffer[1][0] = 0x81;
		}
		else                                    // 都沒有選中,意外情況
		{
			SystemStatus.wParam = 0x00;
			DispBuffer[0][0] = 0x01;
			DispBuffer[1][0] = 0x01;
		}
		break;
	}
	case Status_SetupTime:      // 設置時間的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "修改時間:      ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], "20__-__-__ __:__", DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將按鍵的值顯示在屏幕上
		{
			DispBuffer[1][SetupTimeDispOrder[i]] = KeyBuffer[i]+0x30;
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupPasswordBefore:    // 設置密碼前面的輸入管理員密碼,正確之后才可以設置新的密碼
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入當前密碼: ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將之前輸入的密碼,用'*'表示具體的數字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupPasswordFirst:     // 設置密碼時第一次輸入的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入新密碼:   ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將之前輸入的密碼,用'*'表示具體的數字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupPasswordVerify:    // 設置密碼時第二次輸入的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請確認新密碼:   ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);
		for (i=1; i<=KeyBuffer[0]; i++) // 將之前輸入的密碼,用'*'表示具體的數字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupAddTempCardByCard:     // 通過刷卡增加刷卡用戶
	case Status_SetupDelTempCardByCard:     // 通過刷卡刪除用戶/////////////////////////////////////////////////
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請刷卡:         ", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], &BlankLine, DISP_BUF_LENGTH);//	
		for (i=1; i<=KeyBuffer[0]; i++)
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = KeyBuffer[i]+0x30;
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupAddTempCardByNum:      // 通過輸入卡號增加刷卡用戶///////////////////////////////////
	case Status_SetupDelTempCardByNum:      // 通過輸入卡號刪除刷卡用戶
	{
		if (bForce)
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲一区二区三区四区| 欧美日韩一卡二卡三卡| 日一区二区三区| 亚洲午夜一区二区| 亚洲一级二级三级在线免费观看| 亚洲精品你懂的| 亚洲综合在线观看视频| 亚洲成人综合在线| 图片区日韩欧美亚洲| 蜜桃av一区二区在线观看| 久草这里只有精品视频| 国产一区美女在线| av亚洲精华国产精华| 色悠久久久久综合欧美99| 欧美色视频在线观看| 6080亚洲精品一区二区| 久久综合精品国产一区二区三区| 国产亚洲精品7777| 亚洲免费色视频| 日韩高清不卡一区二区| 久久成人av少妇免费| 国产成人在线视频免费播放| 972aa.com艺术欧美| 欧美日韩久久一区| 精品久久免费看| 国产精品不卡视频| 亚洲.国产.中文慕字在线| 久久激情综合网| 国产+成+人+亚洲欧洲自线| 色婷婷精品大在线视频| 欧美一区二区三区系列电影| 国产亚洲欧洲一区高清在线观看| 亚洲免费视频中文字幕| 久久99国内精品| 欧美吞精做爰啪啪高潮| 91精品午夜视频| 国产精品日日摸夜夜摸av| 亚洲一区二区三区小说| 国产一区二区视频在线播放| 日本精品裸体写真集在线观看| 欧美一区二区三区视频在线观看| 中文字幕成人在线观看| 日韩不卡免费视频| 91麻豆精品一区二区三区| 91精品蜜臀在线一区尤物| 中文字幕一区二区三区不卡| 麻豆成人综合网| 在线看国产一区| 国产精品乱人伦中文| 奇米亚洲午夜久久精品| 欧美亚洲综合网| 国产精品美女久久久久久久久| 日韩电影免费一区| 在线免费观看日韩欧美| 国产日韩欧美激情| 久久草av在线| 欧美精品日日鲁夜夜添| 亚洲天堂福利av| 国产成人av一区| 久久综合一区二区| 天天综合色天天| 欧美日韩精品电影| 一区二区三区欧美日| 99视频有精品| 国产精品家庭影院| 成人一区二区视频| 国产欧美视频在线观看| 精品一区二区免费| 精品欧美乱码久久久久久1区2区| 午夜精品久久久久久久久久久| 色就色 综合激情| 成人欧美一区二区三区在线播放| 国产成人亚洲精品狼色在线| 久久嫩草精品久久久精品一| 精品一区二区三区香蕉蜜桃 | 亚洲自拍与偷拍| 91网站在线观看视频| 中文字幕日韩av资源站| 99国产精品一区| 亚洲综合色网站| 欧美色网站导航| 天天av天天翘天天综合网 | 日日夜夜精品免费视频| 欧美曰成人黄网| 午夜精品久久久| 欧美一级夜夜爽| 久久99精品国产麻豆婷婷| 欧美成人伊人久久综合网| 精品综合久久久久久8888| 精品国产一区二区在线观看| 国产成人三级在线观看| ㊣最新国产の精品bt伙计久久| 99久久免费精品| 天堂影院一区二区| 精品国产一区二区三区忘忧草| 国产精品综合在线视频| 中文字幕亚洲成人| 欧美日韩成人综合天天影院| 全国精品久久少妇| 久久久激情视频| 色猫猫国产区一区二在线视频| 性做久久久久久免费观看欧美| 日韩一区二区三区在线观看| 国产成人精品www牛牛影视| ●精品国产综合乱码久久久久| 欧美视频三区在线播放| 久久精品99国产精品| 国产精品三级电影| 欧美一区二区三区视频免费| 国产成人av电影在线观看| 亚洲午夜久久久久久久久电影院| 日韩欧美亚洲国产精品字幕久久久| 国产精品88888| 爽好多水快深点欧美视频| 久久久亚洲综合| 欧美性xxxxxxxx| 成人深夜福利app| 日韩高清不卡在线| 亚洲欧美一区二区三区国产精品 | 一区二区三区中文免费| 精品欧美乱码久久久久久| 色哟哟精品一区| 国内精品久久久久影院薰衣草| 一区二区视频免费在线观看| 久久久久国产精品厨房| 欧美一区二区三区在线视频| 欧美人与z0zoxxxx视频| 国产成人欧美日韩在线电影| 午夜av电影一区| 亚洲精选视频在线| 久久精品水蜜桃av综合天堂| 欧美高清视频在线高清观看mv色露露十八 | 日日噜噜夜夜狠狠视频欧美人| 中文字幕不卡在线观看| 2021中文字幕一区亚洲| 日韩一级黄色大片| 欧美精品在线一区二区三区| 91丨九色丨蝌蚪富婆spa| 国产在线精品一区二区夜色 | 亚洲黄网站在线观看| 国产欧美精品日韩区二区麻豆天美| 欧美一区中文字幕| 欧美日韩极品在线观看一区| 日本韩国欧美三级| 色8久久精品久久久久久蜜 | 欧美日精品一区视频| thepron国产精品| aaa亚洲精品一二三区| 成人久久视频在线观看| 国产精品一区二区久久精品爱涩| 久久99久久久久| 国产真实乱偷精品视频免| 精品在线亚洲视频| 狠狠色丁香婷综合久久| 国内不卡的二区三区中文字幕| 国产原创一区二区| 国产精品综合视频| 丰满放荡岳乱妇91ww| 成人免费看的视频| 99久久亚洲一区二区三区青草| 成人免费毛片app| 色综合久久88色综合天天6| 在线一区二区三区做爰视频网站| 色婷婷综合久久久中文一区二区 | 在线不卡a资源高清| 欧美日韩免费视频| 日韩午夜三级在线| 精品国产精品一区二区夜夜嗨| 久久久亚洲国产美女国产盗摄 | 久热成人在线视频| 国产一区二区女| 高清成人免费视频| 欧美专区日韩专区| 日韩午夜中文字幕| 国产精品久久三| 亚洲一区二区三区爽爽爽爽爽| 视频一区国产视频| 欧美亚洲另类激情小说| 欧美喷潮久久久xxxxx| 精品久久久久久最新网址| 欧美高清在线一区二区| 亚洲午夜影视影院在线观看| 国内精品嫩模私拍在线| 91极品美女在线| 欧美va亚洲va在线观看蝴蝶网| 国产精品另类一区| 天天色天天操综合| 成人精品一区二区三区中文字幕| 在线观看国产精品网站| 欧美刺激午夜性久久久久久久 | 一区二区三区欧美久久| 久久国产人妖系列| 91麻豆蜜桃一区二区三区| 日韩无一区二区| 亚洲免费三区一区二区| 久久aⅴ国产欧美74aaa| 91精品91久久久中77777| 国产欧美一区二区三区沐欲 | 精品国一区二区三区| 亚洲黄色在线视频|