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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lcd.c

?? 程序概述: 這是個具體產(chǎn)品程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
// Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
/*----------------------------------------------------------------------------+
|  File Name:  LCD.c, v1.0.1                                                  |
|  Author:     安徽雷森電子有限公司合肥研發(fā)中心                               |
|  Date:       2005年08月01日                                                 |
+-----------------------------------------------------------------------------+
|  Description: 聯(lián)網(wǎng)型智能樓宇對講系統(tǒng) -- 管理中心機LCD顯示屏驅(qū)動程序         |
|               器件選擇 -- 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                                                            |
+----------------------------------------------------------------------------*/
// 顯示緩沖,第一個字節(jié)最低位表示是否需要刷新顯示,最高位表示是否反白顯示
idata BYTE DispBuffer[2][DISP_BUF_LENGTH+1];

xdata BYTE MainLogo[DISP_BUF_LENGTH];

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

code BYTE BlankLine[16] = "                ";

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

// 系統(tǒng)參數(shù)設(shè)置
/*12 */ "1.設(shè)置雙擊間隔  ", 13, 5, 0, EnterSetupDoubleClickTime,
/*13 */ "2.設(shè)置輪詢時間  ", 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);			// 功能設(shè)定為擴充指令集  0x30
    LcdWriteControlData(0x06);			// 設(shè)定光標移動方向
    LcdWriteControlData(0x0D);			// 顯示狀態(tài)開關(guān), 不顯示光標
	LcdWriteControlData(0x14);			// 設(shè)定游標的移動與顯示的移位控制位元,右移
	LcdWriteControlData(0x01);			// 清除顯示
	LcdWriteControlData(0x02);			// 顯示位置清零
}

// 
// 初始化顯示緩沖,根據(jù)當前不同的狀態(tài)而顯示不同的內(nèi)容
// bForce: 是否需要更新第一行的內(nèi)容
void InitDispBuffer(BOOL bForce)
{
	BYTE i;
//*/
	switch (SystemStatus.Status)
	{
	case Status_Init:					// 系統(tǒng)正在初始化
	{
		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)		// 按鍵緩沖區(qū)為空,則顯示當前時間
		{
			// 顯示時間
			UpdateTimeBuffer(&DispBuffer[1][1]);
			DispBuffer[1][0] = 0x01;
		}
		else							// 按鍵緩沖區(qū)非空,則顯示按鍵緩沖區(qū)的內(nèi)容
		{
			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: 			// 按下監(jiān)視鍵之后的界面
	{
		if (bForce)
		{
			memcpy(&DispBuffer[0][1], "請輸入單元號碼:", DISP_BUF_LENGTH);
			DispBuffer[0][0] = 0x01;
		}
		memcpy(&DispBuffer[1][1], "監(jiān)視:__棟__單元", 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], "正在監(jiān)視:      ", 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                            // 正在和室內(nèi)分機進行通話
		{
			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:   // 正在被室內(nèi)機呼叫
	{
		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++) // 將之前輸入的密碼,用'*'表示具體的數(shù)字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupMenu:      // 設(shè)置菜單界面
	{
		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:      // 設(shè)置時間的界面
	{
		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:    // 設(shè)置密碼前面的輸入管理員密碼,正確之后才可以設(shè)置新的密碼
	{
		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++) // 將之前輸入的密碼,用'*'表示具體的數(shù)字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupPasswordFirst:     // 設(shè)置密碼時第一次輸入的界面
	{
		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++) // 將之前輸入的密碼,用'*'表示具體的數(shù)字
		{
			DispBuffer[1][DISP_BUF_LENGTH-KeyBuffer[0]+i] = '*';
		}
		DispBuffer[1][0] = 0x01;
		break;
	}
	case Status_SetupPasswordVerify:    // 設(shè)置密碼時第二次輸入的界面
	{
		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++) // 將之前輸入的密碼,用'*'表示具體的數(shù)字
		{
			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一区二区三区免费野_久草精品视频
中文字幕视频一区| 欧美在线一二三四区| 久久不见久久见中文字幕免费| 一区二区三区精品视频| 中文字幕一区二区三区四区不卡| 欧美激情一区二区三区在线| 久久久久久免费| 精品乱人伦一区二区三区| 日韩欧美美女一区二区三区| 欧美一区二区免费视频| 91精品国产黑色紧身裤美女| 日韩精品一区二区三区视频在线观看 | 亚洲精品日韩一| 亚洲免费看黄网站| 亚洲黄色免费网站| 亚洲中国最大av网站| 亚洲成人动漫精品| 青青草伊人久久| 久久66热re国产| 高清不卡一二三区| 91在线观看美女| 欧美性大战xxxxx久久久| 欧美理论在线播放| 日韩三级视频在线观看| 欧美精品一区二区三区在线| xnxx国产精品| 国产精品久久久久aaaa| 一区二区三区高清不卡| 日本不卡视频一二三区| 国产精品中文字幕日韩精品| av网站一区二区三区| 欧美中文字幕一区| 日韩午夜电影在线观看| 欧美激情中文字幕一区二区| 亚洲欧美日韩国产综合在线| 午夜一区二区三区视频| 加勒比av一区二区| 91小视频在线观看| 欧美老女人第四色| 26uuu成人网一区二区三区| 综合网在线视频| 午夜电影网亚洲视频| 国产精品影视网| 色久优优欧美色久优优| 日韩一级片网址| 国产精品国产自产拍在线| 亚洲成人免费av| 国产精品一级片在线观看| 色狠狠色噜噜噜综合网| 91精品国产综合久久精品| 欧美激情一区二区三区在线| 亚洲成人免费av| 丁香婷婷综合五月| 91精品在线麻豆| 国产精品久久久久久久久果冻传媒 | 色婷婷综合久久久久中文| 51精品视频一区二区三区| 亚洲国产成人一区二区三区| 亚洲国产另类av| 风间由美性色一区二区三区| 欧美日韩精品一区二区三区| 国产精品婷婷午夜在线观看| 男女男精品视频网| 色综合激情五月| 久久久久国产一区二区三区四区| 亚洲综合一区二区| 国产福利一区在线观看| 69p69国产精品| 亚洲色图另类专区| 国产一区二区三区四区五区美女| 欧美在线观看一区二区| 欧美—级在线免费片| 日本成人中文字幕在线视频| 91蝌蚪porny| 国产欧美一区二区精品忘忧草 | 青青草97国产精品免费观看| 成人国产精品免费网站| 国产一区二区0| 精品国产电影一区二区| 性欧美疯狂xxxxbbbb| 欧美一区国产二区| 国产校园另类小说区| 国产精品精品国产色婷婷| 不卡电影免费在线播放一区| 久久久久久9999| 另类小说图片综合网| 久久久久国产成人精品亚洲午夜| 天天亚洲美女在线视频| 一本久久a久久精品亚洲| 夜夜嗨av一区二区三区网页| 欧美一卡二卡三卡四卡| 成人免费视频视频在线观看免费| 久久婷婷久久一区二区三区| 国产原创一区二区| 国产三级一区二区| 成人看片黄a免费看在线| 欧美国产1区2区| 99久精品国产| 国产精品久久久久久户外露出 | 日韩午夜精品电影| 国模一区二区三区白浆| 久久久精品黄色| 99精品久久99久久久久| 成人免费在线观看入口| 成人福利视频网站| 欧美国产一区二区在线观看| 日韩国产欧美一区二区三区| 欧美影视一区在线| 日本不卡免费在线视频| 久久精品免费在线观看| 国产夫妻精品视频| 国产精品毛片大码女人| 宅男噜噜噜66一区二区66| 国产老妇另类xxxxx| 中文字幕在线一区免费| 欧美精品tushy高清| 东方欧美亚洲色图在线| 捆绑变态av一区二区三区| 91精品国产福利| 欧美午夜一区二区| 国产精品一区二区在线播放| 欧美成人一区二区三区片免费| 精品欧美久久久| 国产偷国产偷亚洲高清人白洁 | 国产欧美日韩一区二区三区在线观看| 日本欧美在线观看| 日韩一区二区三区电影在线观看| 美女视频黄 久久| 亚洲精品一区二区三区四区高清 | 国产乱码精品一区二区三区五月婷| 久久色在线视频| 成人亚洲一区二区一| 亚洲视频精选在线| 欧美日韩一二区| 免费不卡在线观看| 久久精品日韩一区二区三区| 91在线精品一区二区| 亚洲国产美国国产综合一区二区| 欧美一级视频精品观看| 国产在线精品免费| 1000部国产精品成人观看| 欧美午夜片在线看| 激情都市一区二区| 最新久久zyz资源站| 欧美日韩中文另类| 国产乱码精品一区二区三区忘忧草 | 成人h动漫精品一区二| 一区二区激情视频| 精品国产1区二区| 99精品一区二区三区| 日韩国产欧美在线观看| 国产日韩欧美高清在线| 欧洲一区二区三区在线| 久久精品免费观看| 综合久久久久久| 欧美一区二区成人| 成人午夜av电影| 亚洲一级在线观看| 国产亚洲视频系列| 欧美人牲a欧美精品| 大尺度一区二区| 奇米四色…亚洲| 综合激情成人伊人| 日韩免费视频一区二区| 一本一道波多野结衣一区二区| 美女性感视频久久| 亚洲图片欧美激情| 欧美v日韩v国产v| 色婷婷狠狠综合| 国产精品66部| 日本中文字幕一区二区视频| 综合欧美亚洲日本| 久久一区二区视频| 69堂国产成人免费视频| 99re视频精品| 国产原创一区二区| 奇米888四色在线精品| 亚洲乱码国产乱码精品精的特点 | 精品国偷自产国产一区| 欧美日韩综合不卡| av一二三不卡影片| 国产精品亚洲人在线观看| 日本不卡不码高清免费观看| 一级日本不卡的影视| 中文在线一区二区| 久久久久成人黄色影片| 日韩视频一区在线观看| 欧洲精品视频在线观看| 91亚洲精品久久久蜜桃网站| 国产精品一品视频| 国产在线不卡一卡二卡三卡四卡| 婷婷国产v国产偷v亚洲高清| 亚洲色图欧美偷拍| 中文字幕一区免费在线观看| 国产日韩欧美不卡| 国产亚洲欧美日韩在线一区| 欧美大片一区二区| 91精品国产一区二区三区香蕉 | 久久亚洲精品小早川怜子| 日韩一区二区电影|