找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求大佬指点:单片机编译用数码管显示串口时,数码管不亮,keil报了四个警告

[复制链接]
ID:628348 发表于 2019-10-22 17:54 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

sbit we = P2^7;        //位定义数码管位选锁存器接口
sbit du = P2^6;         //位定义数码管位选锁存器接口

uchar num1;
uchar i;//数码管显示位选变量
uchar num[] = {0, 0, 0, 0}; //百十个位,总数暂存数组
//数码管0~9段选表
uchar code leddata[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//数码管1~3位选表
uchar code DPY[]={0xfe, 0xfd, 0xfb};

//中断服务特殊功能寄存器配置

void time0init()
{
        
        TMOD |= 0x21;  //定时器16为计数工作模式
        TH0 =0xED;
        TL0 =0xFF; //5ms
        ET0 = 1; //开定时器0中断
        TR0 = 1;//启动定时器0

        EA = 1;        //开总中断
}
//串口初始化
void UARTInit()
{
        EA = 1 ; //打开总中断
        ES = 1 ; //打开串口中断
        SM0 = 0 ; SM1 = 1 ;//串口工作方式1,8位UART波特率可变
        REN = 1 ; //串口允许接收
        TR1 = 1 ; //启动定时器1
        TMOD |= 0x21 ; //定时器1工作模式2,8位自动重装。用|=或等于,最终TMOD的值会等于上面的TMO和下面的相加,也就是TMOD = 0x21
        TH1 = 0xfd ;
        TL1 = 0xfd ;//设置波特率9600
        
}

//定时器0中断服务程序  做数码管动态扫描,不用软件延时
void timer0() interrupt 1
{
        TH0 =0xED;
        TL0 =0xFF; //5ms  模式1非自动重装需要手动重装

         if(i < 3)
        {
                num[0] = num[3] / 100; //计算百位
                num[1] = num[3] % 100 / 10;        //计算十位
                num[2] = num[3] % 10;//计算个位
                P0 = 0xff; //清除断码
                we = 1;//打开位选
                P0 = DPY[ i];
                we = 0;        //关闭位选
        
                P0 = 0xff; //清除断码
                du = 1;        //打开段选
                P0 = leddata[num[ i]];
                du = 0;        //关闭段选
                i++;//显示下一位
        }
        else
        {
                i = 0;
        }

}


void UART () interrupt 4
{
        if(RI)
        {
                num[3] = SBUF ; //把接收到的数据传给num3
                RI = 0 ;//软件清零接收标志位
        }
               
}        

void main()
{
        time0init();//初始化定时器0
        UARTlnit();
        
        while(1) ;
}

main.c(99): warning C206: 'UARTlnit': missing function-prototype
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

求大佬指点ww

回复

使用道具 举报

ID:235200 发表于 2019-10-22 18:28 | 显示全部楼层
第1个警告是不存在UARTlnit这个子函数,第2个警告是 UARTlnit没有定义,真正的子函数UARTInit未被调用,只需要把调用函数名改正确就行了
回复

使用道具 举报

ID:149144 发表于 2019-10-22 19:14 | 显示全部楼层
void UARTInit();
放在最前面
回复

使用道具 举报

ID:213173 发表于 2019-10-22 19:22 | 显示全部楼层
void UARTInit()  与  UARTlnit();不同名。

评分

参与人数 1黑币 +8 收起 理由
杨雪飞 + 8 赞一个!

查看全部评分

回复

使用道具 举报

ID:628401 发表于 2019-10-22 19:44 | 显示全部楼层
这是全部的程序吗?怎么没看到main函数呢,没有main程序怎么没有入口执行不了的啊!另外串口初始化部分,我记得应该是先设置参数,然后才打开中断和总中断,顺序是不是反了?
回复

使用道具 举报

ID:97554 发表于 2019-10-22 22:19 | 显示全部楼层
void main()
{
        time0init();//初始化定时器0
        UARTlnit();  -----------------  这里的UART   l  nit    而函数里边是URRT I  nit   
        
        while(1) ;
}
回复

使用道具 举报

ID:628348 发表于 2019-10-22 23:57 | 显示全部楼层
csmyldl 发表于 2019-10-22 18:28
第1个警告是不存在UARTlnit这个子函数,第2个警告是 UARTlnit没有定义,真正的子函数UARTInit未被调用,只 ...

蟹蟹你们!!他亮了哈哈哈
回复

使用道具 举报

ID:628348 发表于 2019-10-22 23:59 | 显示全部楼层
杨雪飞 发表于 2019-10-22 22:19
void main()
{
        time0init();//初始化定时器0

有点像找不同哈哈哈,谢谢你们
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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