打印
[51单片机]

C51C语言求大神帮忙

[复制链接]
1012|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TheForce|  楼主 | 2015-8-12 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我要搞一个类似测试程序的代码,在子主函数中调用子程序,一开始先显示测试菜单,然后通过串口输入数据选择要测试的程序,具体的主程序代码如下:
#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;
}

现在的问题是串口一直在打印测试菜单而不能进入功能选择,有大神可以帮忙看看吗?万分感谢!附件中有源代码

代码.zip

2.36 KB

我写的源代码和头文件

相关帖子

沙发
TheForce|  楼主 | 2015-8-12 15:01 | 只看该作者
顶一下

使用特权

评论回复
板凳
TheForce|  楼主 | 2015-8-12 15:30 | 只看该作者
来个人吧

使用特权

评论回复
地板
ningling_21| | 2015-8-12 16:32 | 只看该作者
为何非要用 printf 这个函数尼?

使用特权

评论回复
5
TheForce|  楼主 | 2015-8-12 17:43 | 只看该作者
ningling_21 发表于 2015-8-12 16:32
为何非要用 printf 这个函数尼?

难道说可以用uart_printf?

使用特权

评论回复
6
dirtwillfly| | 2015-8-12 21:12 | 只看该作者
测试程序不要搞那么复杂,直接用固定的一组数据进行测试就好。然后让程序把测试结果反馈给你

使用特权

评论回复
7
ayb_ice| | 2015-8-13 07:13 | 只看该作者
printf有个putchar函数需要移植,默认的也可以,但默认的使用串口发数据,查询方式的,所以这里不要再用串口了,初始化是可以的,不要开中断

使用特权

评论回复
8
ningling_21| | 2015-8-13 08:44 | 只看该作者
TheForce 发表于 2015-8-12 17:43
难道说可以用uart_printf?

可以自己编辑一个简单的串口发送函数,另逻辑混乱,TI=1 会触发串口中断,但串口中断又没有对TI=1进行处理

使用特权

评论回复
9
shalixi| | 2015-8-13 12:15 | 只看该作者
测试方法很多,利用现有的外设,程序里稍加点额外的测试语句可以了,何必另外搞什么打印之类。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

1

粉丝