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

📄 cmdproc.c

📁 这是《Keil Cx51 V7.0单片机高级语言编程与uVision2应用实践》教材各章中列出的全部程序例子。
💻 C
字号:
#include <ctype.h>
#include <string.h>	
#include "tdp.h"	

/* 定义帮助提示 */
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);	
}	
	
/* 命令处理 */
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 + -