找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3892|回复: 15
收起左侧

单片机编译错误 大佬求帮助 'hdata'

[复制链接]
ID:927279 发表于 2021-5-26 23:20 | 显示全部楼层 |阅读模式
哪错了啊 小白不会啊 求大佬帮帮
捕获.PNG
回复

使用道具 举报

ID:554500 发表于 2021-5-27 08:04 | 显示全部楼层
这上面的3个函数名后面都多了一个分号;
最下面的函数还少了一个 {
这种低级错误都能犯,这不是大意都能说得过去的。
回复

使用道具 举报

ID:554500 发表于 2021-5-27 08:12 | 显示全部楼层
个人建议:
刚开始学写代码的时候,写一个函数编译一下。
有问题及时查找。写一个函数,先写框架,再写内容。如:
void key()
{
   //内容
}

要养成良好的编程习惯。
回复

使用道具 举报

ID:927279 发表于 2021-5-27 08:15 | 显示全部楼层
18701931930 发表于 2021-5-27 08:04
这上面的3个函数名后面都多了一个分号;
最下面的函数还少了一个 {
这种低级错误都能犯,这不是大意都能 ...

这个我知道。我本来没有分号 但是报错40个。加上之后就剩三个了
回复

使用道具 举报

ID:554500 发表于 2021-5-27 09:10 | 显示全部楼层
garrettzls 发表于 2021-5-27 08:15
这个我知道。我本来没有分号 但是报错40个。加上之后就剩三个了

代码用文本的方式贴出来看看
回复

使用道具 举报

ID:927279 发表于 2021-5-27 10:36 | 显示全部楼层
18701931930 发表于 2021-5-27 09:10
代码用文本的方式贴出来看看

#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit Trig=P2^0;            //???
sbit Echo=P2^1;          //???
sbit pwm =P0^1 ;          //PWM????
sbit jia =P1^2;           //????????IO?
sbit jan =P1^1;           //????????IO?
unsigned char count;
unsigned char jd;         //????
unsigned char T0RH=0;
unsigned char T0RL=0;
void Time0_Init()          //??????
{
TMOD = 0x01;           //???0?????1
IE   = 0x82;
TH0  = 0xfe;
TL0  = 0x33;     //11.0592MZ??,0.5ms
    TR0=1;                 //?????
}//????????
void time_init()
{
        EA=1;
        TMOD=0x11;
        TH0 = 0;
        TL0 = 0;
} //?????????
void Delay_us(unsigned char t);
{
while(--t);
}

void timer0()interrupt 1;
{
TH0 = 0;
TL0 = 0;
} //???? ????? ???? ?????? ????
void chaoshenbo_kongzhi();  //???????
        unsigned int time,distance;
        Trig=0;
        Echo=0;
        jd=3;
        time_init();
        while(1)
        {
                Trig=1;
                Delay_us(5);
                Trig=0;
                while(Echo==0);
                TR0=1;
                while(Echo);
                TR0=0;
                time=TH0*256+TL0;
                distance=(int)(time*0.017);                           //???? ???cm
                TH0=0;
                TL0=0;
                if(distance<100)                                        //??????100cm ????
                {
                        last=distance;
                        jd=4;
                        Delay_us(10);
                        if(distance<last)
                        {
                        jd=1;
                        }
                        if(distance>last)
                        {
                        jd=5;
                        }
                        }
                        if(distance>100)
                        jd=3;
                }
               
void main()
{
jd=3;
count=0;
chaoshenbo_kongzhi();
        }
回复

使用道具 举报

ID:917199 发表于 2021-5-27 13:08 | 显示全部楼层
void chaoshenbo_kongzhi();  //???????
        unsigned int time,distance;
看看这里多了什么又少了什么,难怪1930说你
回复

使用道具 举报

ID:554500 发表于 2021-5-27 13:24 | 显示全部楼层
3个函数名后面多分号;
void Delay_us(unsigned char t);
void timer0()interrupt 1;
void chaoshenbo_kongzhi();

其中 void chaoshenbo_kongzhi()   又少了一对大括号 { }
变量last没有定义

回复

使用道具 举报

ID:155507 发表于 2021-5-27 15:04 | 显示全部楼层
给你改了一下试试。

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <intrins.h>
  4. sbit Trig=P2^0;            //???
  5. sbit Echo=P2^1;          //???
  6. sbit pwm =P0^1;          //PWM????
  7. sbit jia =P1^2;           //????????IO?
  8. sbit jan =P1^1;           //????????IO?
  9. unsigned char count;
  10. unsigned char jd;         //????
  11. unsigned char T0RH=0;
  12. unsigned char T0RL=0;
  13. void Time0_Init()          //??????
  14. {
  15.         TMOD = 0x01;           //???0?????1
  16.         IE   = 0x82;
  17.         TH0  = 0xfe;
  18.         TL0  = 0x33;     //11.0592MZ??,0.5ms
  19.         TR0=1;                 //?????
  20. }//????????
  21. void time_init()
  22. {
  23.         EA=1;
  24.         TMOD=0x11;
  25.         TH0 = 0;
  26.         TL0 = 0;
  27. } //?????????
  28. void Delay_us(unsigned char t)
  29. {
  30.         while(--t);
  31. }

  32. void timer0() interrupt 1
  33. {
  34.         TH0 = 0;
  35.         TL0 = 0;
  36. } //???? ????? ???? ?????? ????
  37. void chaoshenbo_kongzhi()  //???????
  38. {
  39.         unsigned int time, distance, last;
  40.         Trig=0;
  41.         Echo=0;
  42.         jd=3;
  43.         time_init();
  44.         while(1)
  45.         {
  46.                 Trig=1;
  47.                 Delay_us(5);
  48.                 Trig=0;
  49.                 while(Echo==0);
  50.                 TR0=1;
  51.                 while(Echo);
  52.                 TR0=0;
  53.                 time=TH0*256+TL0;
  54.                 distance=(int)(time*0.017);                           //???? ???cm
  55.                 TH0=0;
  56.                 TL0=0;
  57.                 if(distance<100)                                        //??????100cm ????
  58.                 {
  59.                         last=distance;
  60.                         jd=4;
  61.                         Delay_us(10);
  62.                         if(distance<last)
  63.                         {
  64.                                 jd=1;
  65.                         }
  66.                         if(distance>last)
  67.                         {
  68.                                 jd=5;
  69.                         }
  70.                 }
  71.                 if(distance>100)
  72.                 jd=3;
  73.         }
  74. }
  75. void main()
  76. {
  77.         jd=3;
  78.         count=0;
  79.         chaoshenbo_kongzhi();
  80. }
复制代码
回复

使用道具 举报

ID:927279 发表于 2021-5-27 17:35 | 显示全部楼层
18701931930 发表于 2021-5-27 13:24
3个函数名后面多分号;
void Delay_us(unsigned char t);
void timer0()interrupt 1;

去了分号直接40多个错 这是为啥啊
回复

使用道具 举报

ID:927279 发表于 2021-5-27 17:36 | 显示全部楼层
解决了  谢谢大佬们
回复

使用道具 举报

ID:213173 发表于 2021-5-27 18:19 | 显示全部楼层
garrettzls 发表于 2021-5-27 17:35
去了分号直接40多个错 这是为啥啊

楼主这个程序不是简单的多几个分号错误,其实是几乎通篇错误。建议在论坛搜搜别人的程序参考。先照猫画虎练练手。
回复

使用道具 举报

ID:731755 发表于 2021-5-27 18:41 | 显示全部楼层
garrettzls 发表于 2021-5-27 08:15
这个我知道。我本来没有分号 但是报错40个。加上之后就剩三个了

加上分号,就不对,分号的意思一句话说完了,如果加上分号,这里是无法延时的,编译错误,是很容易出现的,楼主需要对照别人的程序或者书本一项项检查那里错了。
回复

使用道具 举报

ID:849913 发表于 2021-5-28 12:43 | 显示全部楼层
#在void timer0()interrupt 1; 去掉1后面的分号
回复

使用道具 举报

ID:849913 发表于 2021-5-28 12:44 | 显示全部楼层
void timer0()interrupt 1; 去掉1后面的分号
回复

使用道具 举报

ID:927279 发表于 2021-6-1 20:39 | 显示全部楼层
angmall 发表于 2021-5-27 15:04
给你改了一下试试。

谢谢大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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