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

📄 shell.c

📁 一个51单片机的shell调试命令
💻 C
字号:
/*****************************************************************************
;项目名称:SHELL
;创建日期:2007.6.19
;创 建 人:何  呈
; E-mail : hecheng@hrbeu.edu.cn
;修改日期:2007.6.19
;参考文档:无
;特殊说明:实现串口的调试功能
;编译环境:Keil uVision3 
******************************************************************************/
#include <REG52.h> 
#include "shell.h" 


/*************************命令查找树******************************************/
//定义一个结构体
code struct UCmd_index
{
    char *Cmd;       //指向输入的命令代码
    uchar *Cmd_mb;   //指向所对应的命令数字码
};
//结构体成员初始化
code struct UCmd_index Cmd_m[]={{"help",0x0},     //帮助模式 
                            	{"up",0x1},		  //增加……
                            	{"down",0x2},	  //减小……
                            	{"pause",0x3},	  //系统暂停
                            	{"boot",0x4},	  //重新启动程序
								{"setio0",0x5},	  //设置P0口的输出
								{"setio1",0x6},	  //设置P1口的输出
								{"setio2",0x7},	  //设置P2口的输出
								{"readio",0x8},	  //读P0~P2口的电平
								{"readi2c",0x9},  //读取i2c器件的数据
								{"writei2c",0xa}, //向i2c器件中写入数据
								{"tled",0xb},	  //测试数码管
								{"tlcd",0xc},	  //测试ts12864
								{"clr",0xd}		  //清屏
						   	   };
/*****************************************************************************
;函 数 名:char Find_UCmd(void)
;功    能: 串口命令关键字查找程序
;说    明:无
;入口参数:无
;返 回 值:有
;创 建 人: 何  呈
;创建日期:2007.6.19
;修改日期:2007.6.19
******************************************************************************/
char Find_UCmd(void)
{	
	uchar i;
	for(i=0;i<0xe;i++)
	{
	//	if(uart_buf[0]==Cmd_m[i].Cmd)
		if(!((bit)strcmp(uart_buf,Cmd_m[i].Cmd)))
	    	return(Cmd_m[i].Cmd_mb);
	}
    return(-1);	   //未查询到返回错误
}
/*****************************************************************************
;函 数 名:void Deal_UCmd(void)
;功    能: 串口命令关键字查找程序
;说    明:无
;入口参数:无
;返 回 值:有
;创 建 人: 何  呈
;创建日期:2007.6.19
;修改日期:2007.6.19
******************************************************************************/
void Deal_UCmd(void)
{
	
	switch(Find_UCmd())
	{
		case 0x0:{
		      	 	Deal_help();   //显示帮助菜单
		   		 	break;
				 }

    	case 0x1:{
				 	Deal_up();	  
		   		 	break;
				 } 

		case 0x2:{
			     	Deal_down();
		   		 	break;
				 }

		case 0x3:{
				 	Deal_pause();
		   		 	break;
				 }

		case 0x4:{
				 	Deal_boot();
		   			break;
				 }

		case 0x5:{
				 	Deal_setio0();
		   		 	break;
				 }

		case 0x6:{
				 	Deal_setio1();
		   		 	break;
				 }

		case 0x7:{
				 	Deal_setio2();
		   		 	break;
				 }

		case 0x8:{
				 	Deal_readio();
		   		 	break;
				 }
		case 0x9:{
				 	Deal_readi2c();
		   		 	break;
				 }

 		case 0xa:{
				 	Deal_writei2c();
		   		 	break;
				 }

		case 0xb:{
				 	Deal_tled();
		   		 	break;
				 }

		case 0xc:{
				  	Deal_tlcd();
		   		 	break;				  
				  }

		case 0xd:{
				  	Deal_clr();
		   		 	break;				  
				  }
	    case -1:
		default:{	
					Deal_error();	  //错误命令显示
					//Deal_help();	  //显示帮助菜单
					break;
				}		
	}

}
/*****************************************************************************
;函 数 名:main()
;功    能:主函数
;说    明:查询是否有串口中断产生
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.15
;修改日期:2007.6.15
******************************************************************************/
void main(void)
{
    Init_Uart();	             //初始化串口
	Clear_UBuf();	 			 //清除串口接收缓存
	flag_uart = 0;	 			 //清串口接收标志位
	Init_PrintStr();			 //打印初始界面
    p = uart_buf;

    while(1)
	{
		if(flag_uart)            //如果有命令进入则调用处理函数
		{
			flag_uart = 0;
			Deal_UCmd();         //命令处理

		    Clear_UBuf();	     //清除串口接收缓存
		    p = uart_buf;	     //设置串口接收的存储地址
		    flag_uart = 0;       //稳定程序
		}
		Delay_Nms(10);
	}
}

⌨️ 快捷键说明

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