angmall 发表于 2021-5-27 15:04 谢谢大佬 |
| void timer0()interrupt 1; 去掉1后面的分号 |
| #在void timer0()interrupt 1; 去掉1后面的分号 |
garrettzls 发表于 2021-5-27 08:15 加上分号,就不对,分号的意思一句话说完了,如果加上分号,这里是无法延时的,编译错误,是很容易出现的,楼主需要对照别人的程序或者书本一项项检查那里错了。 |
garrettzls 发表于 2021-5-27 17:35 楼主这个程序不是简单的多几个分号错误,其实是几乎通篇错误。建议在论坛搜搜别人的程序参考。先照猫画虎练练手。 |
| 解决了 谢谢大佬们 |
18701931930 发表于 2021-5-27 13:24 去了分号直接40多个错 这是为啥啊 |
给你改了一下试试。
|
|
3个函数名后面多分号; void Delay_us(unsigned char t); void timer0()interrupt 1; void chaoshenbo_kongzhi(); 其中 void chaoshenbo_kongzhi() 又少了一对大括号 { } 变量last没有定义 |
|
void chaoshenbo_kongzhi(); //??????? unsigned int time,distance; 看看这里多了什么又少了什么,难怪1930说你 |
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(); } |
garrettzls 发表于 2021-5-27 08:15 代码用文本的方式贴出来看看 |
18701931930 发表于 2021-5-27 08:04 这个我知道。我本来没有分号 但是报错40个。加上之后就剩三个了 |
|
个人建议: 刚开始学写代码的时候,写一个函数编译一下。 有问题及时查找。写一个函数,先写框架,再写内容。如: void key() { //内容 } 要养成良好的编程习惯。 |
|
这上面的3个函数名后面都多了一个分号; 最下面的函数还少了一个 { 这种低级错误都能犯,这不是大意都能说得过去的。 ![]() ![]() |