我要搞一个类似测试程序的代码,在子主函数中调用子程序,一开始先显示测试菜单,然后通过串口输入数据选择要测试的程序,具体的主程序代码如下:
#include <reg52.h>
#include <stdio.h>
#include "display.h"
#include "delay.h"
#include "LED.h"
#define uchar unsigned char
#define uint unsigned int
int nMenuSel;
uint a;
uint flag=0;
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
typedef void (* TEST_FUNC)(void);
typedef struct tagMenuItem
{
void* pFunc;
char* szMenuString;
}MENUITEM, *PMENUITEM;
MENUITEM g_Menus[] =
{
{ (void *)Test_LED, "LED " },
{ (void *)Test_display, "display " },
};
void main()
{
int i;
int nMenuSize;
init();
nMenuSize = sizeof(g_Menus) / sizeof (MENUITEM);
for(;;)
{
ES=0;
TI=1;
printf("\n欢迎使用C51测试程序 \n");
delay(500);
for (i = 1; i <= nMenuSize; ++ i)
{
//显示菜单
printf("%2d:%s", i, g_Menus[i - 1].szMenuString);
if ((i % 4) == 0)
printf("\n");
}
delay(500);
printf ("\n\n请选择要测试的项目");
delay(500);
while(!TI);
TI=0;
ES=1;
if(flag!=1)
{
break;
}
if(flag==1)
{
a=nMenuSel;
if ((nMenuSel >= 0) && (nMenuSel <= nMenuSize))
{
((TEST_FUNC)(g_Menus[nMenuSel-1].pFunc)) ();
}
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
现在的问题是串口一直在打印测试菜单而不能进入功能选择,有大神可以帮忙看看吗?万分感谢!附件中有源代码
|