⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.c

📁 利用89s51去寫結構化keil-C 4x4鍵盤掃描+LCD螢幕顯示 HW01:四則運算+時鍾顯示 HW02:頻率偵測器 ps.鍵盤掃描不是利用延遲作彈跳(推薦)
💻 C
字号:

#include "Clock.h"


///////////////////////////////////////////////////////////////////////////
// Constant


///////////////////////////////////////////////////////////////////////////
// Variable
BYTE bdata	g_bfTimer;
sbit g_bfTimerMSec = g_bfTimer^0;
sbit g_bfTimerSec = g_bfTimer^1;
sbit g_bfTimerMin = g_bfTimer^2;
sbit g_bfTimerHr = g_bfTimer^3;
sbit g_bfTimerDay = g_bfTimer^4;
sbit g_bfTimerMon = g_bfTimer^5;
sbit g_bfTimerYear = g_bfTimer^6;
BYTE bdata	g_bfDispClk;
sbit g_bfDispClkMSec = g_bfDispClk^0;
sbit g_bfDispClkSec = g_bfDispClk^1;
sbit g_bfDispClkMin = g_bfDispClk^2;
sbit g_bfDispClkHr = g_bfDispClk^3;
sbit g_bfDispClkDay = g_bfDispClk^4;
sbit g_bfDispClkMon = g_bfDispClk^5;
sbit g_bfDispClkYear = g_bfDispClk^6;

BYTE data g_bClkHr, g_bClkMin, g_bClkSec;
BYTE data g_bAdjHr, g_bAdjMin, g_bAdjSec;
//BYTE data g_bClkYear, g_bClkMon, g_bClkDay;
BYTE data g_bfAdjStatus=0;


///////////////////////////////////////////////////////////////////////////
// Function
void fnCLK_InitClock(void)
{
	g_bClkHr = 23;
	g_bClkMin = 59;
	g_bClkSec = 58;
}


void fnCLK_Clock(void)
{
	if(g_bfTimerSec){
		g_bfTimerSec = 0;
		g_bfDispClkSec = 1;
		if(g_bClkSec >= 59){
			g_bfTimerMin = 1;
			g_bClkSec = 0;
		}else{
			g_bClkSec++;
		}
	} else if(g_bfTimerMin){
		g_bfTimerMin = 0;
		g_bfDispClkMin = 1;
		if(g_bClkMin >= 59){
			g_bfTimerHr = 1;
			g_bClkMin = 0;
		}else{
			g_bClkMin++;
		}
	} else if(g_bfTimerHr){
		g_bfTimerHr = 0;
		g_bfDispClkHr = 1;
		if(g_bClkHr >= 23){
			//g_bfTimerDay = 1;
			g_bClkHr = 0;
		}else{
			g_bClkHr++;
		}
//	} else if(g_bfTimerDay){
//		g_bfTimerDay = 0;
//	} else if(g_bfTimerMon){
//		g_bfTimerMon = 0;
//	} else if(g_bfTimerYear){
//		g_bfTimerYear = 0;
	} else{
		g_bfTimer = 0;
		return;
	}
}

void fnCLK_DispClk(void)
{
	if(g_bfDispClkSec){
		g_bfDispClkSec = 0;
		fnDISP_Str(LOCAL_11, ":");
		if(g_bClkSec <= 9){
			fnDISP_Str(LOCAL_12, "0");
			fnDISP_Int(LOCAL_13, g_bClkSec);
		} else {
			fnDISP_Int(LOCAL_12, g_bClkSec);
		}
	} else if(g_bfDispClkMin) {
		g_bfDispClkMin = 0;
		fnDISP_Str(LOCAL_08, ":");
		if(g_bClkMin <= 9){
			fnDISP_Str(LOCAL_09, "0");
			fnDISP_Int(LOCAL_10, g_bClkMin);
		} else {
			fnDISP_Int(LOCAL_09, g_bClkMin);
		}
	} else if(g_bfDispClkHr) {
		g_bfDispClkHr = 0;
		fnDISP_Str(LOCAL_01, "Time:");
		//fnDISP_Str(LOCAL_05, ":");
		if(g_bClkHr <= 9){
			fnDISP_Str(LOCAL_06, "0");
			fnDISP_Int(LOCAL_07, g_bClkHr);
		} else {
			fnDISP_Int(LOCAL_06, g_bClkHr);
		}
		if(g_bClkHr >=12){
			fnDISP_Str(LOCAL_14, "PM");
		} else {
			fnDISP_Str(LOCAL_14, "AM");
		}
	//} else if(g_bfDispClkDay) {
	//	g_bfDispClkDay = 0;
	//} else if(g_bfDispClkMon) {
	//	g_bfDispClkMon = 0;
	//} else if(g_bfDispClkYear) {
	//	g_bfDispClkYear = 0;
	}
}

void fnCLK_InitAdjClk(void)
{
	g_bAdjHr = g_bClkHr;
	g_bAdjMin = g_bClkMin;
	g_bAdjSec = g_bClkSec;
}

void fnCLK_AdjClk(void)
{
	if((g_bKeyValueOld >= 10) && (g_bKeyValueOld != 15)){
		return;
	}else if( g_bKeyValueOld == 15){
		g_bfAdjStatus = ADJ_SET;
	}
	switch(g_bfAdjStatus)
	{
		case ADJHR_HI:
			//fnDISP_SetAddr(LOCAL_09);
			//fnDISP_CursorGleam();
			if(g_bKeyValueOld <= 2){
				g_bAdjHr = (g_bKeyValueOld * 10);
				g_bfAdjStatus = ADJHR_LO;
				fnDISP_Int(LOCAL_08, g_bKeyValueOld);
			} else {
				g_bAdjHr = g_bKeyValueOld;
				g_bfAdjStatus = ADJMIN_HI;
				fnDISP_Str(LOCAL_08, "0");
				fnDISP_Int(LOCAL_09, g_bKeyValueOld);
				fnDISP_Str(LOCAL_10, ":");
			}
			break;
		case ADJHR_LO:
			if(g_bKeyValueOld <= 3){
				g_bAdjHr += g_bKeyValueOld;
				g_bfAdjStatus = ADJMIN_HI;
				fnDISP_Int(LOCAL_09, g_bKeyValueOld);
				fnDISP_Str(LOCAL_10, ":");
			}
			break;
		case ADJMIN_HI:
			//fnDISP_SetAddr(LOCAL_12);
			//fnDISP_CursorGleam();
			if(g_bKeyValueOld <= 5){
				g_bAdjMin = (g_bKeyValueOld * 10);
				g_bfAdjStatus = ADJMIN_LO;
				fnDISP_Int(LOCAL_11, g_bKeyValueOld);
			} else {
				g_bAdjMin = g_bKeyValueOld;
				g_bfAdjStatus = ADJSEC_HI;
				fnDISP_Str(LOCAL_11, "0");
				fnDISP_Int(LOCAL_12, g_bKeyValueOld);
				fnDISP_Str(LOCAL_13, ":");
			}
			break;
		case ADJMIN_LO:
			if(g_bKeyValueOld <= 9){
				g_bAdjMin += g_bKeyValueOld;
				g_bfAdjStatus = ADJSEC_HI;
				fnDISP_Int(LOCAL_12, g_bKeyValueOld);
				fnDISP_Str(LOCAL_13, ":");
			}
			break;
		case ADJSEC_HI:
			//fnDISP_SetAddr(LOCAL_15);
			//fnDISP_CursorGleam();
			if(g_bKeyValueOld <= 5){
				g_bAdjSec = (g_bKeyValueOld * 10);
				g_bfAdjStatus = ADJSEC_LO;
				fnDISP_Int(LOCAL_14, g_bKeyValueOld);
			} else {
				g_bAdjSec = g_bKeyValueOld;
				g_bfAdjStatus = ADJ_SET;
				fnDISP_Str(LOCAL_14, "0");
				fnDISP_Int(LOCAL_15, g_bKeyValueOld);
				//fnDISP_Str(LOCAL_16, ":");
			}
			break;
		case ADJSEC_LO:
			if(g_bKeyValueOld <= 9){
				g_bAdjSec += g_bKeyValueOld;
				g_bfAdjStatus = ADJ_SET;
				fnDISP_Int(LOCAL_15, g_bKeyValueOld);
				//fnDISP_Str(LOCAL_16, ":");
			}
			break;
		case ADJ_SET:
			if(g_bKeyValueOld == 15){
				g_bClkHr = g_bAdjHr;
				g_bClkMin = g_bAdjMin;
				g_bClkSec = g_bAdjSec;
				g_bfAdjStatus = 0;
				g_bSYS_MODE = MODE_CLK;
				g_bfDispClk = 0x0E;
				//fnDISP_WrCmd(CLR_DISP);
				fnDISP_ClrDisp();
				//fnDISP_WrCmd(DISP_CTRL | DC_DISP_ON);
				fnDISP_TurnOnDisp();
			}
			break;
		default:
			break;
	}
}


void fnCLK_DispAdjClk(void)
{
	if(g_bAdjHr <= 9 ){
		fnDISP_Str(LOCAL_08, "0");
		fnDISP_Int(LOCAL_09, g_bAdjHr);
	} else {
		fnDISP_Int(LOCAL_08, g_bAdjHr);
	}
	if(g_bAdjMin <= 9 ){
		fnDISP_Str(LOCAL_11, "0");
		fnDISP_Int(LOCAL_12, g_bAdjMin);
	} else {
		fnDISP_Int(LOCAL_11, g_bAdjMin);
	}
	if(g_bAdjSec <= 9 ){
		fnDISP_Str(LOCAL_14, "0");
		fnDISP_Int(LOCAL_15, g_bAdjSec);
	} else {
		fnDISP_Int(LOCAL_14, g_bAdjSec);
	}
/*
//	if(g_bfAdjStatus){
	switch(g_bfAdjStatus)
	{
		case ADJHR_HI:
			//fnDISP_SetAddr(LOCAL_08);
			if(g_bAdjHr <= 9 ){
				fnDISP_Str(LOCAL_08, "0");
				fnDISP_Int(LOCAL_09, g_bAdjHr);
			} else {
				fnDISP_Int(LOCAL_08, g_bAdjHr)
			}
			fnDISP_Str(LOCAL_10, ":");
			break;
		case ADJHR_LO:
			//fnDISP_SetAddr(LOCAL_09);
			if(g_bAdjHr <= 9 ){
				fnDISP_Str(LOCAL_08, "0");
				fnDISP_Int(LOCAL_09, g_bAdjHr);
			} else {
				fnDISP_Int(LOCAL_08, g_bAdjHr)
			}
			fnDISP_Str(LOCAL_10, ":");
			break;
		case ADJMIN_HI:
			//fnDISP_SetAddr(LOCAL_11);
			fnDISP_Int(LOCAL_11, g_bAdjMin);
			break;
		case ADJMIN_LO:
			//fnDISP_SetAddr(LOCAL_12);
			fnDISP_Int(LOCAL_11, g_bAdjMin);
			break;
		case ADJSEC_HI:
			//fnDISP_SetAddr(LOCAL_14);
			fnDISP_Int(LOCAL_14, g_bAdjSec);
			break;
		case ADJSEC_LO:
			//fnDISP_SetAddr(LOCAL_15);
			fnDISP_Int(LOCAL_14, g_bAdjSec);
			break;
		case ADJ_SET:
			break;
		default:
			break;
	}
//	}
*/
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -