📄 shell.h
字号:
/*****************************************************************************
;文件名称: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 + -