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

📄 acprd_dobj.c

📁 source code for a sample alarm control panel system using Freescale MC9S12DP256 . The project was im
💻 C
字号:
//=============================================================================
// File: ACPRD_DOBJ.C - V1.00
// Rem.: The ACPRD Project Page on the Web -> http://hc12web.de/acprd
//=============================================================================

//-----------------------------------------------------------------------------

void _drawRevers2(void) {
		putcDisp(0x03);	// cursor left
		putcDisp(0x03);	// cursor left
		putcDisp(TA_REVERS);
		putcDisp(TA_REVERS);
		}

UINT8 dobj_timedate_x;
UINT8 dobj_timedate_y;
INT8 dobj_timedate_sel;
BOOL dobj_timedate_upd;

const UINT8 dobj_timedate_sxpos[6] = {2, 5, 8, 13, 16, 19};

void drawTimeDate(void) {

	UINT8 n, sx;

	if(dobj_timedate_upd == FALSE) return;

	// cock symbol
	gotoxyDisp(dobj_timedate_x, dobj_timedate_y);
	putcDisp('\x90');
	putcDisp('\x91');
	// time
	prDisp02d(shadow_tm->tm_hour);
	if(dobj_timedate_sel == 0) _drawRevers2();
	putcDisp(':');
	prDisp02d(shadow_tm->tm_min);
	if(dobj_timedate_sel == 1) _drawRevers2();
	putcDisp(':');
	prDisp02d(shadow_tm->tm_sec);
	if(dobj_timedate_sel == 2) _drawRevers2();
	prDispSpace();
	// date
	prDisp04d(shadow_tm->tm_year + 1900);
	if(dobj_timedate_sel == 3) _drawRevers2();
	putcDisp('/');
	prDisp02d(shadow_tm->tm_mon + 1);
	if(dobj_timedate_sel == 4) _drawRevers2();
	putcDisp('/');
	prDisp02d(shadow_tm->tm_mday);
	if(dobj_timedate_sel == 5) _drawRevers2();
	prDispSpace();

	// draw line below
	gotoxyDisp(dobj_timedate_x, dobj_timedate_y+1);
	n = 0;
	if((dobj_timedate_sel < 0) || (dobj_timedate_sel > 5)) sx = 254;
	else sx = dobj_timedate_sxpos[dobj_timedate_sel];
	do {
		if(n == sx) putcDisp('\x97');
		else if(n == sx+1) putcDisp('\x98');
		else putcDisp('\x8e');
		n++;
		} while(n < 22);
	}

//-----------------------------------------------------------------------------

UINT8 dobj_temp_x;
UINT8 dobj_temp_y;
BOOL dobj_temp_upd;

void drawTemp(void) {

	if(dobj_temp_upd == FALSE) return;

	gotoxyDisp(dobj_temp_x, dobj_temp_y);
	prDisp02d(shadow_atd0[0]/20);
	putcDisp('\x92');
	putcDisp('C');

	// draw line below
	gotoxyDisp(dobj_temp_x, dobj_temp_y+1);
	prDispMult(4, '\x8e');
	}

//-----------------------------------------------------------------------------

void _drawVolt(UINT16 sym, UINT16 v) {

	putcDisp(sym);
	v += 512/20;
	prDisp02d(v/512);
	putcDisp('.');
	v = (v % 512) * 10;
	prDisp01d(v/512);
	putcDisp('V');
	prDispSpace();
	}

//-----------------------------------------------------------------------------

UINT8 dobj_volts_x;
UINT8 dobj_volts_y;
BOOL dobj_volts_upd;

void drawVolts(void) {

	UINT16 sym, vpwr, vbat;

	if(dobj_volts_upd == FALSE) return;

	gotoxyDisp(dobj_volts_x, dobj_volts_y);
	vpwr = shadow_atd0[6];
	vbat = shadow_atd0[7];

	sym = 0x93;
	if((vpwr < ACPRD_VPWR_MIN) || (vpwr <= vbat))
		sym += TA_BLINK;
	_drawVolt(sym, vpwr);

	sym = 0x94;
	if(vbat < ACPRD_VBAT_MIN)
		sym += TA_BLINK;
	_drawVolt(sym, vbat);

	// draw line below
	gotoxyDisp(dobj_volts_x, dobj_volts_y+1);
	prDispMult(14, '\x8e');
	}

//-----------------------------------------------------------------------------

UINT8 dobj_jogmenu_x;
UINT8 dobj_jogmenu_y;
INT8 dobj_jogmenu_sel;
BOOL dobj_jogmenu_upd;

const UINT8 * const dobj_jogmenu_items_a[] = {
//---01234567890---
	"Arm/Disable",
	"Reset Lines",
	"Setup Lines",
	"Set Tim/Dat",
	"Remote Ctrl",
	"EntertainMe",
	NULL
	};

void drawJogMenu(void) {

	UINT8 n;
	const UINT8 * const *m;

	if(dobj_jogmenu_upd == FALSE) return;

	m = dobj_jogmenu_items_a;
	n = 0;
	while(*m) {
		gotoxyDisp(dobj_jogmenu_x, dobj_jogmenu_y+n);
		prDispSpace();
		prDispStr(*m);
		prDispSpace();
		if(n == dobj_jogmenu_sel) {
			gotoxyDisp(dobj_jogmenu_x, dobj_jogmenu_y+n);
			putcDisp('\x95');
			prDispMult(11, TA_REVERS);
			putcDisp('\x96');
			}
		m++;
		n++;
		};
	}

//-----------------------------------------------------------------------------

UINT8 dobj_asl_x;
UINT8 dobj_asl_y;
INT8 dobj_asl_sel;
BOOL dobj_asl_upd;

// draw Alarm Status Line
//
void drawASL(void) {

	UINT8 n;
	UINT16 a, c;

	if(dobj_asl_upd == FALSE) return;

	gotoxyDisp(dobj_asl_x, dobj_asl_y);	// frame line above
	putcDisp('\x80');
	putcDisp('\x83');
	for(n=0; n<4; n++)
		prDispStr("\x85\x83\x83\x83\x83\x83");
	putcDisp('\x87');

	gotoxyDisp(dobj_asl_x, dobj_asl_y+1); // draw data line
	putcDisp('\x81');
	if(al_system_armed) {
		if(al_system_status & AL_STAT_ALARM)
			putcDisp(TA_BLINK + 0x9f);	// alarm
		else
			putcDisp('\x99');			// okay
		}
	else putcDisp('\x9c');				// disabled
	putcDisp('\x81');

	for(n=0; n<4; n++) {
		// channel number
		putcDisp(TA_REVERS + 0xb1 + n);
		a = (n == dobj_asl_sel) ? TA_BLINK : TA_NORMAL; 
		// line type
		if(al_line_type[n] & AL_LTYP_DISABLE) c = '\x9c'; 	// disabled
		else {
			if(al_line_type[n] & AL_LTYP_DELAY) c = '\x9e';	// enabled delayed
			else c = '\x9d';								// enabled instantly
			}
		putcDisp(a + c);
		// line type cont'd
		if(al_line_type[n] & AL_LTYP_SILENT) c ='\x9a';		// silent
		else c = '\x9b';									// audible
		putcDisp(a + c);
		// line status
		if(al_line_status[n] & AL_STAT_ALARM)
			putcDisp('\x9f');			// alarm
		else if(al_line_status[n] & AL_STAT_TAMPER)
			putcDisp('T');				// tamper
		else
			putcDisp('\x99');			// okay
		// alarm status
		if(al_alarm_status[n] & AL_STAT_ALARM)
			putcDisp(TA_BLINK + 0x9f);	// alarm
		else if(al_alarm_status[n] & AL_STAT_ENTRY)
			putcDisp('E');				// entry
		else
			putcDisp('\x99');			// okay
		putcDisp('\x81');
		}
	gotoxyDisp(dobj_asl_x, dobj_asl_y+2); // frame line below
	putcDisp('\x82');
	putcDisp('\x84');
	for(n=0; n<4; n++) {
		if(n == dobj_asl_sel)
			prDispStr("\x86\x84\x97\x98\x84\x84");
		else
			prDispStr("\x86\x84\x84\x84\x84\x84");
		}
	putcDisp('\x88');
	}

//-----------------------------------------------------------------------------

const UINT8 *dobj_keys_label[4];
const UINT8 key_empty[]	= { "    " }; 
const UINT8 key_esc[]	= { " ESC" }; 
const UINT8 key_inc[]	= { " UP " }; 
const UINT8 key_dec[]	= { "DOWN" }; 
const UINT8 key_ent[]	= { " ENT" }; 
const UINT8 key_arm[]	= { " ARM" }; 
const UINT8 key_line1[]	= { " LN1" }; 
const UINT8 key_line2[]	= { " LN2" }; 
const UINT8 key_line3[]	= { " LN3" }; 
const UINT8 key_line4[]	= { " LN4" }; 

UINT8 dobj_keys_x;
UINT8 dobj_keys_y;
BOOL dobj_keys_upd;
BOOL dobj_keys_hide;

// draw Keys
//
void drawKeys(void) {

	UINT8 n;

	if(dobj_asl_upd == FALSE) return;

	gotoxyDisp(dobj_keys_x, dobj_keys_y);
	for(n=0; n<4; n++) {
		prDispSpace();
		if(dobj_keys_hide) prDispStr(key_empty);
		else prDispStr(dobj_keys_label[n]);
		prDispSpace();
		}
	gotoxyDisp(dobj_keys_x, dobj_keys_y+1);
	for(n=0; n<4; n++) {
		prDispStr("\xa8\xa9\xaa\xaa\xaa\xab");
		}
	}

//-----------------------------------------------------------------------------

void drawInit(void) {

	dobj_timedate_x = 0;
	dobj_timedate_y = 0;
	dobj_timedate_upd = TRUE; 
	dobj_timedate_sel = -1;

	dobj_volts_x = 22;
	dobj_volts_y = 0;
	dobj_volts_upd = TRUE;

	dobj_temp_x = 36;
	dobj_temp_y = 0;
	dobj_temp_upd = TRUE;

	dobj_jogmenu_x = 27;
	dobj_jogmenu_y = 2;
 	dobj_jogmenu_upd = TRUE; 
	dobj_jogmenu_sel = 0;

	dobj_asl_x = 0;
	dobj_asl_y = 2;
	dobj_asl_upd = TRUE;
	dobj_asl_sel = -1;

	dobj_keys_x = 0;
	dobj_keys_y = 6;
	dobj_keys_upd = TRUE;
	dobj_keys_hide = FALSE;

	dobj_keys_label[0] = key_arm; 
	dobj_keys_label[1] = key_inc; 
	dobj_keys_label[2] = key_dec; 
	dobj_keys_label[3] = key_ent; 
	}

//-----------------------------------------------------------------------------

void drawAll(void) {

	drawTimeDate();
	drawVolts();
	drawTemp();
	drawJogMenu();
	drawASL();
	drawKeys();
	// ###
	delay(100);
	}

//=============================================================================

⌨️ 快捷键说明

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