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

📄 shell.h

📁 一个51单片机的shell调试命令
💻 H
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
;文件名称:shell.h
;创建日期:2007.6.19
;创 建 人:何  呈
; E-mail : hecheng@hrbeu.edu.cn
;修改日期:2007.6.19
;参考文档:无
;特殊说明:shell.c的头文件
;编译环境:Keil uVision3 
******************************************************************************/
#include <reg52.h>
#include "ts12864.c"		   //ts12864测试程序文件
#include <String.h>       	   //字符串操作程序文件
#include <ctype.h>			   //字符操作程序文件
#include "uart.h"              //串口操作程序文件
#include "I2C.c" 			   //i2c器件测试程序文件
#include "shuma.c"			   //数码管测试程序文件
/*****************************************************************************
;函 数 名:void Send_Hex(uchar data)
;功    能: 将数据调整后以16进制的文本发送到串口
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.19
;修改日期:2007.6.19
******************************************************************************/
void Send_Hex(unsigned char n)
{
	uchar n0[2],i;
	n0[0] = n/16;
	n0[1] = n%16;

	for(i=0;i<2;i++)
	{
		if((n0[i]>=0)&&(n0[i]<=9))
			Send_Data(n0[i]+48);
		else
			Send_Data(n0[i]+55);			
	 }
}

/*****************************************************************************
;函 数 名:void Init_PrintStr(void)
;功    能: 打印串口界面的初始界面
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.19
;修改日期:2007.6.19
******************************************************************************/
//串口界面的初始界面
void Init_PrintStr(void)
{
	Send_String("\t\t+================================================================+\n");
	Send_String("\t\t|                WELCOM TO USE SIMPLESHELL                       |\n");
	Send_String("\t\t|              DESIGNED BY HECHENG 2007.6.20                     |\n");
	Send_String("\t\t|              Tle:13359710513  QQ:330508762                     |\n");
	Send_String("\t\t|              e-mail:hecheng@hrbeu.edu.cn ^_^                   |\n");
	Send_String("\t\t+================================================================+\n");
	Send_String(">");
}

/*****************************************************************************
;函 数 名:void Deal_readi2c(void)
;功    能: 从24c02中读取数据
;说    明:仅适合读24c02
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
//readI2C处理函数
//功能:读出I2C器件从地址n0到地址n1的内容
void Deal_readi2c(void)
{
	uint n0,n1;
	uchar i;

	Send_String("\nPlease input a uchar number which is the beginning of address you want to read.\n");	
	Send_String(">");
	Clear_UBuf();	 //清除串口接收缓存
    p = uart_buf;	 //设置串口接收的存储地址
	flag_uart=0;	 //再次清标志位,稳定程序 

	for(;;)
	{
		if(flag_uart)                    //如果有命令进入则调用处理函数
		{
			flag_uart = 0;
            if(isxdigit(uart_buf[0])&&isxdigit(uart_buf[1]))
			{
				for(i=0;i<2;i++)
				{
				 	if(isdigit(uart_buf[i]))
				 		uart_buf[i]=uart_buf[i]-48;
					else
					{	
						if(islower(uart_buf[i]))     //是否为小写字母
							uart_buf[i]=uart_buf[i]-87;
						else
							uart_buf[i]=uart_buf[i]-55;
					}
				}
				n0 =  (uart_buf[0]<<4) + uart_buf[1];
				Send_String("0x");
				Send_Hex(n0);
				Send_String("\n");
				Send_String("The right number has been set!\n");
				Send_String(">");
				break;
			}
			
			Clear_UBuf();	 //清除串口接收缓存
            p = uart_buf;	 //设置串口接收的存储地址
			Send_String("Number error!\n"); 
		    Send_String("Please input a unsigned char number!\n");
		    flag_uart = 0;    //再次清标志位,稳定程序            	 
		}
	}
	Clear_UBuf();	 //清除串口接收缓存
    p = uart_buf;	 //设置串口接收的存储地址
	flag_uart=0;	 //再次清标志位,稳定程序
	Send_String("\nPlease input a uchar number which is the end of address you want to read.\n");
	Send_String(">");
		for(;;)
	{
		if(flag_uart)                    //如果有命令进入则调用处理函数
		{
			flag_uart = 0;
            if(isxdigit(uart_buf[0])&&isxdigit(uart_buf[1]))
			{
				for(i=0;i<2;i++)
				{
				 	if(isdigit(uart_buf[i]))
				 		uart_buf[i]=uart_buf[i]-48;
					else
					{	
						if(islower(uart_buf[i]))     //是否为小写字母
							uart_buf[i]=uart_buf[i]-87;
						else
							uart_buf[i]=uart_buf[i]-55;
					}
				}
				n1 =  (uart_buf[0]<<4) + uart_buf[1];
				Send_String("0x");
				Send_Hex(n1);
				Send_String("\n");
				Send_String("The right number has been set!\n");
				break;
			}
			
			Clear_UBuf();	 //清除串口接收缓存
            p = uart_buf;	 //设置串口接收的存储地址
			Send_String("Number error!\n"); 
		    Send_String("Please input a unsigned char number!\n");
		    Send_String(">");
		    flag_uart = 0;    //再次清标志位,稳定程序            	 
		}
	}

	for(i=n0;i<=n1;i++)	  //将读取的数据打印输出
	{
		//if((i/16 == 0)||(i==n0))
		//{
			Send_String("0x");
			Send_Hex(i);
			Send_String(":");
		//}
	 	Send_Hex(read_random(i));
	    Send_String("\n");	    
	}
	Send_String("\n>");		
}
/*****************************************************************************
;函 数 名:void Deal_readio(void)
;功    能: 读取单片机P0,P1,P2的数据
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
//readio处理函数
void Deal_readio(void)
{
	 Send_String("\nP0:0x");
	 //Send_Data(P0);
	 Send_Hex(P0);
	 Send_String("  P1:0x");
	 Send_Hex(P1);
	 Send_String("  P2:0x");
	 Send_Hex(P1);
	 Send_String("\nread over!\n>");
}
/*****************************************************************************
;函 数 名:void Deal_tled(void)
;功    能: 测试数码管
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
void Deal_tled(void)
{
	 Send_String("\nTesting led!\n......");
	 Test_Start_Led();
	 Send_String("\ntest led over!\n>");

	 Clear_UBuf();	        //清除串口接收缓存
	 p = uart_buf;	        //设置串口接收的存储地址
	 flag_uart = 0;         //稳定程序
}
/*****************************************************************************
;函 数 名:void Deal_tled(void)
;功    能: 测试数码管
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
void Deal_tlcd(void)
{
	 Send_String("\nTesting lcd!\n......");
	 Test_Lcd();
	 Send_String("\ntest lcd over!\n>");
	 Clear_UBuf();	      //清除串口接收缓存
	 p = uart_buf;	      //设置串口接收的存储地址
	 flag_uart = 0;       //稳定程序
}

/*****************************************************************************
;函 数 名:void Deal_pause(void)
;功    能: 让系统暂停
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
//pause处理函数
void Deal_pause(void)
{
	Send_String("\nSystem has paused!\n\
run the System? y/n?\n");
	Send_String(">");
	Clear_UBuf();	       //清除串口接收缓存
    p = uart_buf;	       //设置串口接收的存储地址
	flag_uart = 0;         //稳定程序
	for(;;)
	{
		if(flag_uart)                    //如果有命令进入则调用处理函数
		{
			flag_uart = 0;
            if(!(bit)strcmp(uart_buf,"y"))
			{
				 Send_String("\nSystem is running!\n");
				 Send_String(">");
				 Clear_UBuf();	 //清除串口接收缓存
    			 p = uart_buf;	 //设置串口接收的存储地址
				 break;
			}
			Send_String("\nSystem paused!\n");
			Send_String(">");
			Clear_UBuf();	 //清除串口接收缓存
    		p = uart_buf;	 //设置串口接收的存储地址 
			flag_uart = 0;   //再次清标志位,稳定程序          	 
		}
	}
}
/*****************************************************************************
;函 数 名:Deal_setio0(void)
;功    能: 修改P0口的输出值
;说    明:无
;入口参数:无
;返 回 值:无
;创 建 人: 何  呈
;创建日期:2007.6.20
;修改日期:2007.6.20
******************************************************************************/
//setio0处理函数
Deal_setio0(void)
{
	uchar i;
	Send_String("\nPlease input a unsigned char number.\n");
	Send_String(">");		
	Clear_UBuf();	 //清除串口接收缓存
    p = uart_buf;	 //设置串口接收的存储地址
	flag_uart = 0;         //稳定程序
	
	for(;;)
	{
		if(flag_uart)                    //如果有命令进入则调用处理函数
		{
			flag_uart = 0;
            if(isxdigit(uart_buf[0])&&isxdigit(uart_buf[1]))
			{
				for(i=0;i<2;i++)
				{
				 	if(isdigit(uart_buf[i]))
				 		uart_buf[i]=uart_buf[i]-48;
					else
					{	
						if(islower(uart_buf[i]))     //是否为小写字母
							uart_buf[i]=uart_buf[i]-87;
						else
							uart_buf[i]=uart_buf[i]-55;
					}
				}
				P0 =  (uart_buf[0]<<4) + uart_buf[1];
				Send_String(">0x");
				Send_Hex(P0);
				Send_String("\n");
				Send_String("The right number has been output from the P0 port!\n");
				Send_String(">");
				break;
			}
			
			Clear_UBuf();	 //清除串口接收缓存
            p = uart_buf;	 //设置串口接收的存储地址
			Send_String("Number error!\n"); 
		    Send_String("Please input a unsigned char number!\n");
		    Send_String(">");
		    flag_uart = 0;    //再次清标志位,稳定程序            	 
		}
	}
}
/*****************************************************************************
;函 数 名:Deal_setio1(void)

⌨️ 快捷键说明

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