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

📄 cmdproc.c

📁 c51串口编程的例子
💻 C
字号:
#include<ctype.h>
#include<string.h>
#include "tdp.h"

/* Define prompt of Help */
static pdata char helptext[]=
	"\r\n"
	"HELP:\r\n"
	"STCLK hhmmss -- Set Clock Time\r\n"
	"RDCLK        -- Display Clock Time\r\n"
	"SCCLK ON|OFF -- Display CLock Time Every Second\r\n"
	"STALM hhmm   -- Set Alarm\r\n"
	"RDALM        -- Display Alarm Time\r\n"
	"CLALM        -- Clear Alarm Time\r\n";

enum{
	CID_SET_CLK,
	CID_READ_CLK,
	CID_SCAN_CLK,
	CID_SET_ALM,
	CID_READ_ALM,
	CID_CLR_ALM,
	CID_LAST
};

struct cmd_st {
	const char *cmdstr;
	unsigned char id;
};

static pdata struct cmd_st cmd_tbl [] = {
	{ "STCLK", CID_SET_CLK },
	{ "RDCLK", CID_READ_CLK },
	{ "SCCLK", CID_SCAN_CLK },
	{ "STALM", CID_SET_ALM },
	{ "RDALM", CID_READ_ALM },
	{ "CLALM", CID_CLR_ALM },
};

#define CMD_TBL_LEN    (sizeof (cmd_tbl) / sizeof(cmd_tbl[0]))

static unsigned char cmdid_search(char *cmdstr) {
	struct cmd_st *ctp;
	for (ctp = cmd_tbl; ctp <&cmd_tbl[CMD_TBL_LEN]; ctp++) {
		if(strcmp(ctp->cmdstr,cmdstr) ==0)
			return(ctp->id);
	}
	return(CID_LAST);
}

char *strupr(char *src) {
	char *s;
	for (s = src; *s != '\0'; s++)
		*s = toupper(*s);
	return(src);
}

/* Command Processing */
void cmd_proc(const char *cmd) {
	xdata char cmdstr_buf[1 + MAX_CMD_LEN];
	xdata char argstr_buf[1 + MAX_CMD_LEN];
	char *argsep;
	unsigned char id;

	strncpy(cmdstr_buf, cmd, sizeof(cmdstr_buf) - 1);
	cmdstr_buf[sizeof(cmdstr_buf) - 1] = '\0';
	strupr(cmdstr_buf);
	argsep = strchr(cmdstr_buf, ' ');
	if(argsep == NULL) {
		argstr_buf[0] = '\0';
	}
	else {
		strcpy(argstr_buf,argsep + 1);
		*argsep = '\0';
	}
	id = cmdid_search(cmdstr_buf);
	switch (id) {
		unsigned long tm;
		case CID_SET_CLK:
			if(strtotm(&tm, argstr_buf) != 0)
				goto CMDERR;
			clock_set(tm * 100);
			break;
		case CID_READ_CLK:
			clock_out_time();
			break;
		case CID_SCAN_CLK:
			if(strcmp(argstr_buf,"ON") ==0 )
				clock_scan(1);
			else if (strcmp(argstr_buf,"OFF") == 0)
				clock_scan(0);
			else
				goto CMDERR;
			break;
		case CID_SET_ALM:
			strcat(argstr_buf, "00");
			if(strtotm(&tm,argstr_buf) != 0)
				goto CMDERR;
			alarm_set(tm / 60);
		    break;
		case CID_READ_ALM:
			alarm_out_time();
			break;
		case CID_CLR_ALM:
			alarm_clr();
			break;
		case CID_LAST:
	CMDERR:
			com_puts(helptext);
			break;
	}
}


⌨️ 快捷键说明

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