📄 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 + -