找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5854|回复: 3
打印 上一主题 下一主题
收起左侧

在keil里面运行出现*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL警告该怎么解决,....

[复制链接]
跳转到指定楼层
楼主
ID:796820 发表于 2020-7-3 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include ”regx51.h"
unsigned char a,b,c,d;
unsigned char code disaplay []= {0x3f, 0x06, 0x5b, 0x4f, 0x66,0x6d, 0x7d, 0x07, 0x7f, 0x6f} ;
long counter=0; //旋转编码 器的脉冲
long position=0; //旋转 编码器的当前位置
long degree=0;
void main()
TMOD=0x06;
TH0=0xff;
TL0=0xff;
TH1= (65536-1000)/256;
TL1= (65536-1000)%256;
IE=0x0f;
EA = 1; //开总中断
r=0;
while(1)  //主程序循环显示位置
{
a=degree%10;  //计算参数的个十百千位
b= (degree/10)%10; .
c= (degree/100)%10;
d= (degree/1000)%10;
p2_3=0;//显示position值
p0=diaplay[a];
p2_3=1;
p2_2=0;
p0=diaplay[b];
p2_ 2=1;
p2_ 1=0;
p0=diaplay[c];
p2_1=1;
p2_0=0;
p0=diaplay[d];
p2_0=1;
}
}
void int0() interrupt 0   //A 相中断
if(p2_7)position++;         //判断2_7 为高则正向,为低则反向
else position;
counte++ ;      //累计脉冲
}
void int1()
interrupt 1   //Z相中断
{
position=0;   //使位置参数置零
void tl_ () interrupt 2    //定时0. ls刷新一次转速和角
//度参数
THO= (65536-1000) /256;
TL0= (65536-1000) %256;
r=600*counter/ 300;   //假设编码器每转300个脉冲
degree=1. 2*position; //把脉冲数转换为 角度数
if(! degree)  //角度为负时加360度转为正
degree+=360}
void t0_ () interrupt 3  //计数器T0中断显示速度
{
unsigned char i
i=100;
a=r%10;
b=(r/10)%10;
c=(r/100)%10;
d= (r/1000)%10;
while(i)
{
//中断产生后循环100次显示一段时间
p2_ 3=0;
p0=diaplay[a];
p2_ 3=1;
p2_ 2=0;
p0=diaplay[b];
p2_ 2=1;
p2_ 1=0;
p0=diap1ay[c];
p2_ 1=1;
p2_ _0=0;
p0=diaplay[d];
p2_ 0=1;
i-- ;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2020-7-3 23:30 | 只看该作者
else position; 这行有问题
回复

使用道具 举报

板凳
ID:213173 发表于 2020-7-4 08:13 | 只看该作者
楼主代码错误占一半以上,主要是书写错误:大小写错误、中英符号错误、空格缺/多错误,符号缺/多错误及变量忘记赋值。
#include <AT89X51.H>
unsigned char a,b,c,d,r;
unsigned char code disaplay[]= {0x3f, 0x06, 0x5b, 0x4f, 0x66,0x6d, 0x7d, 0x07, 0x7f, 0x6f} ;
long counter=0; //旋转编码 器的脉冲
long position=0; //旋转 编码器的当前位置
long degree=0;

void main()
{
        TMOD=0x06;
        TH0=0xff;
        TL0=0xff;
        TH1= (65536-1000)/256;
        TL1= (65536-1000)%256;
        IE=0x0f;
        EA = 1; //开总中断
        r=0;
        while(1)  //主程序循环显示位置
        {
                a=degree%10;  //计算参数的个十百千位
                b= (degree/10)%10;
                c= (degree/100)%10;
                d= (degree/1000)%10;
                P2_3=0;//显示position值
                P0=disaplay[a];
                P2_3=1;
                P2_2=0;
                P0=disaplay[b];
                P2_2=1;
                P2_1=0;
                P0=disaplay[c];
                P2_1=1;
                P2_0=0;
                P0=disaplay[d];
                P2_0=1;
        }
}
void int0() interrupt 0   //A 相中断
{
        if(P2_7)position++;         //判断2_7 为高则正向,为低则反向
        else position=0;/////
        counter++;      //累计脉冲
}
void int1() interrupt 1   //Z相中断
{
        position=0;   //使位置参数置零
}
void tl_() interrupt 2    //定时0. ls刷新一次转速和角
{//度参数
        TH0=(65536-1000) /256;
        TL0=(65536-1000) %256;
        r=600*counter/ 300;   //假设编码器每转300个脉冲
        degree=1.2*position; //把脉冲数转换为 角度数
        if(!degree)  //角度为负时加360度转为正
        degree+=360;
}
void t0_() interrupt 3  //计数器T0中断显示速度
{
        unsigned char i;
        i=100;
        a=r%10;
        b=(r/10)%10;
        c=(r/100)%10;
        d=(r/1000)%10;
        while(i)
        {
                //中断产生后循环100次显示一段时间
                P2_3=0;
                P0=disaplay[a];
                P2_3=1;
                P2_2=0;
                P0=disaplay[b];
                P2_2=1;
                P2_1=0;
                P0=disaplay[c];
                P2_1=1;
                P2_0=0;
                P0=disaplay[d];
                P2_0=1;
                i-- ;
        }
}
回复

使用道具 举报

地板
ID:452950 发表于 2020-7-4 10:44 | 只看该作者
void main()后面少一个大括号{
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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