找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3156|回复: 7
收起左侧

关于51单片机警告问题!完全没看出哪里函数没有调用

[复制链接]
ID:399491 发表于 2018-10-25 11:19 | 显示全部楼层 |阅读模式
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能                   :设置串口
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
int i,m,j,l;
unsigned char SendByte;
code smgduan[17]={0x80,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示.~F的值
char x[17]={'.','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char a[5];

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void delay(int u)
{
   while(u--);
}
void main()
{       
        UsartInit();  //        串口初始化
        while(1);
        {
        for(m=0;m<19;m++)
        {
                if(x[m]==SBUF)
                   {
                             a[l]=smgduan[m];
                    }
       
        }

        }
        for(j=4;j>=0;j--)
        {
                switch(j)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
        }
                P0=a[l];//发送段码
                delay(100); //间隔一段时间扫描       
                P0=0x00;//消隐
         }               
}

/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能                  : 串口通信中断函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void Usart() interrupt 4
{       
    for(i=0;i<5;i++)
        {
    a[i]=(int) SendByte;
        SBUF=a[i];
        RI = 0;//清除接收中断标志位
        while(!TI);                         //等待发送数据完成
        TI=0;                                                 //清除发送完成标志位
        }
}
回复

使用道具 举报

ID:123289 发表于 2018-10-26 00:34 | 显示全部楼层
放断点,就可以知道它走不走到那里了。

评分

参与人数 1黑币 +2 收起 理由
873119779 + 2

查看全部评分

回复

使用道具 举报

ID:164602 发表于 2018-10-26 08:03 | 显示全部楼层
你的错误在于:while主函数后面有个不应该有的分号!!!!!!!!!!!!

评分

参与人数 1黑币 +1 收起 理由
873119779 + 1 赞一个!

查看全部评分

回复

使用道具 举报

ID:94031 发表于 2018-10-26 08:49 | 显示全部楼层
main()要改成这样就没警告了:

void main()
{        
        UsartInit();  //        串口初始化
        while(1)
        {
          for(m=0;m<19;m++)
          {
                        if(x[m]==SBUF)
                        {
                                a[l]=smgduan[m];
                        }
       
          }
       
        for(j=4;j>=0;j--)
        {
                switch(j)         //位选,选择点亮的数码管,
                {
                                                case(0):
                                                                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                                                case(1):
                                                                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                                                case(2):
                                                                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                                                case(3):
                                                                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                                                case(4):
                                                                                LSA=0;LSB=0;LSC=1; break;//显示第4位
          }
                P0=a[l];//发送段码
                delay(100); //间隔一段时间扫描        
                P0=0x00;//消隐
         }
}       
}

评分

参与人数 1黑币 +2 收起 理由
873119779 + 2 很给力!

查看全部评分

回复

使用道具 举报

ID:308437 发表于 2018-10-26 09:00 | 显示全部楼层
可能是软件的bug,可以重装试试
回复

使用道具 举报

ID:408651 发表于 2018-10-26 10:05 | 显示全部楼层
用switch-case的时候每个case后面要加break吧
回复

使用道具 举报

ID:330198 发表于 2018-10-26 10:33 | 显示全部楼层
关键在于细心,自己看吧
360截图20181026103021037.jpg

评分

参与人数 1黑币 +2 收起 理由
873119779 + 2

查看全部评分

回复

使用道具 举报

ID:415741 发表于 2018-10-26 12:14 | 显示全部楼层
断了往前找
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表