建档扶贫对象 发表于 2020-3-20 16:56 void Delay(uint time) 这个函数声明的时候定义了输入变量time,所以调用的时候要用Delay(xxx),里面填延时的长度。 waitforstarting 这个我不知道是什么,前面也没有声明这个函数,格式也不对 |
xxpp2011 发表于 2020-3-20 13:47 这里是声明部分和主函数部分函数。出问题的是:void Delay(uint time)参数列表长度不同、waitforstarting未定义标识符,你看看是哪里出问题了。 #include<reg52.h> #include<intrins.h> #include<math.h> #define uchar unsigned char #define uint unsigned int #define Lcd_Data P0; //定义LCD数据端口 uchar code dispbuf[33]={"Temperature: Distance: mm"}; uchar numcode[10]={'0','1','2','3','4','5','6','7','8','9'}; uint num[29]={0}; uchar jsh,jsl; //计时器的高低位 uchar count=0; //10秒计次数 uint distance; //距离 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit DQ=P2^7; //DS18B20数字端口 sbit Busy=P0^7; uint temp; //温度变量 uchar bdata flag; //DS18B20存在标准 void Delay(void); //延时函数 void Read_Busy(void); //检查LCD是否忙 void lint_18B20(void); //初始化18B20 void Write_Comm(uchar); //写入LCD命令 void Write_Data(uhar); //写入LCD数据 void lint_LCD(void); //初始化LCD uchar Readonechar(void); //读取第一个字节 void Writeonechar(uchar dat); //写入第一个字节 void testtemp(void); //启动温度转换 uint wd(void); //读取温度 void Delay(uint time); //延时函数 sbit sta_flag=flag^0; //10MS到标准位 sbit fuhao=flag^1; //温度符号位 sbit START=P1^0; //启动测距 sbit CNT=P2^5; //发射超声波 sbit CSBIN=P2^6; //返回信号 sbit BUZZER=P3^7; void timer(void); void delay1ms(void); //延时1MS void sys_init(void); //系统初始化 void display(void); //显示函数 void computer(void); //计算 void hextobcd(bit flag,uchar num); //转换BCD void bm(void); //求补码 void delay15(uchar us); //延时15us /***********主函数**************/ void main(void) { uchar i,j; for(i=0;i<255;i++) for(j=0;j<255;j++); sys_init(); //初始化 display(); //显示 sta_flag=0; //标准复位 Waitforstarting; // 检查按键 while(START); for(i=0;i<20;i++) delay1ms(); if(START) goto waitforstarting; BUZZER=0; i=100000; while(i--); TR0=1; //启动定时器0 ET0=1; testtemp(); //启动温度转换 while(1) { if(sta_flag) //10MS到了 { while(0==CSBIN); //收到回波 TR1=0; jsh=TH1; jsl=TL1; if(15==count) //900MS到检测温度 { temp=wd(); //读取温度 count=0; testtemp(); //重新启动转换 display(); //刷新显示 } computer(); //计算距离 hextobcd(); //转换BCD码 sta_flag=0; } } } |
xxpp2011 发表于 2020-3-20 13:47 这是声明和主函数部分,问题是:void Delay(uint time)参数列表长度不同、waitforstarting未定义标识符 你可以帮忙看看哪里出问题了吗? #include<reg52.h> #include<intrins.h> #include<math.h> #define uchar unsigned char #define uint unsigned int #define Lcd_Data P0; //定义LCD数据端口 uchar code dispbuf[33]={"Temperature: Distance: mm"}; uchar numcode[10]={'0','1','2','3','4','5','6','7','8','9'}; uint num[29]={0}; uchar jsh,jsl; //计时器的高低位 uchar count=0; //10秒计次数 uint distance; //距离 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit DQ=P2^7; //DS18B20数字端口 sbit Busy=P0^7; uint temp; //温度变量 uchar bdata flag; //DS18B20存在标准 void Delay(void); //延时函数 void Read_Busy(void); //检查LCD是否忙 void lint_18B20(void); //初始化18B20 void Write_Comm(uchar); //写入LCD命令 void Write_Data(uhar); //写入LCD数据 void lint_LCD(void); //初始化LCD uchar Readonechar(void); //读取第一个字节 void Writeonechar(uchar dat); //写入第一个字节 void testtemp(void); //启动温度转换 uint wd(void); //读取温度 void Delay(uint time); //延时函数 sbit sta_flag=flag^0; //10MS到标准位 sbit fuhao=flag^1; //温度符号位 sbit START=P1^0; //启动测距 sbit CNT=P2^5; //发射超声波 sbit CSBIN=P2^6; //返回信号 sbit BUZZER=P3^7; void timer(void); void delay1ms(void); //延时1MS void sys_init(void); //系统初始化 void display(void); //显示函数 void computer(void); //计算 void hextobcd(bit flag,uchar num); //转换BCD void bm(void); //求补码 void delay15(uchar us); //延时15us /***********主函数**************/ void main(void) { uchar i,j; for(i=0;i<255;i++) for(j=0;j<255;j++); sys_init(); //初始化 display(); //显示 sta_flag=0; //标准复位 Waitforstarting; // 检查按键 while(START); for(i=0;i<20;i++) delay1ms(); if(START) goto waitforstarting; BUZZER=0; i=100000; while(i--); TR0=1; //启动定时器0 ET0=1; testtemp(); //启动温度转换 while(1) { if(sta_flag) //10MS到了 { while(0==CSBIN); //收到回波 TR1=0; jsh=TH1; jsl=TL1; if(15==count) //900MS到检测温度 { temp=wd(); //读取温度 count=0; testtemp(); //重新启动转换 display(); //刷新显示 } computer(); //计算距离 hextobcd(); //转换BCD码 sta_flag=0; } } } |
csmyldl 发表于 2020-3-20 12:36 这里是声明部分和主函数部分函数。出问题的是:void Delay(uint time)参数列表长度不同、waitforstarting未定义标识符,你看看是哪里出问题了。 #include<reg52.h> #include<intrins.h> #include<math.h> #define uchar unsigned char #define uint unsigned int #define Lcd_Data P0; //定义LCD数据端口 uchar code dispbuf[33]={"Temperature: Distance: mm"}; uchar numcode[10]={'0','1','2','3','4','5','6','7','8','9'}; uint num[29]={0}; uchar jsh,jsl; //计时器的高低位 uchar count=0; //10秒计次数 uint distance; //距离 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit DQ=P2^7; //DS18B20数字端口 sbit Busy=P0^7; uint temp; //温度变量 uchar bdata flag; //DS18B20存在标准 void Delay(void); //延时函数 void Read_Busy(void); //检查LCD是否忙 void lint_18B20(void); //初始化18B20 void Write_Comm(uchar); //写入LCD命令 void Write_Data(uhar); //写入LCD数据 void lint_LCD(void); //初始化LCD uchar Readonechar(void); //读取第一个字节 void Writeonechar(uchar dat); //写入第一个字节 void testtemp(void); //启动温度转换 uint wd(void); //读取温度 void Delay(uint time); //延时函数 sbit sta_flag=flag^0; //10MS到标准位 sbit fuhao=flag^1; //温度符号位 sbit START=P1^0; //启动测距 sbit CNT=P2^5; //发射超声波 sbit CSBIN=P2^6; //返回信号 sbit BUZZER=P3^7; void timer(void); void delay1ms(void); //延时1MS void sys_init(void); //系统初始化 void display(void); //显示函数 void computer(void); //计算 void hextobcd(bit flag,uchar num); //转换BCD void bm(void); //求补码 void delay15(uchar us); //延时15us /***********主函数**************/ void main(void) { uchar i,j; for(i=0;i<255;i++) for(j=0;j<255;j++); sys_init(); //初始化 display(); //显示 sta_flag=0; //标准复位 Waitforstarting; // 检查按键 while(START); for(i=0;i<20;i++) delay1ms(); if(START) goto waitforstarting; BUZZER=0; i=100000; while(i--); TR0=1; //启动定时器0 ET0=1; testtemp(); //启动温度转换 while(1) { if(sta_flag) //10MS到了 { while(0==CSBIN); //收到回波 TR1=0; jsh=TH1; jsl=TL1; if(15==count) //900MS到检测温度 { temp=wd(); //读取温度 count=0; testtemp(); //重新启动转换 display(); //刷新显示 } computer(); //计算距离 hextobcd(); //转换BCD码 sta_flag=0; } } } |
|
如果前面有声明这个函数的话,调用要这样: Waitforstarting(); 如果有输入参数要填在括号里面。 第一个错误在35行,看不到 |
| 是不是延时函数delay()括号内要加入实际参数呢?程序不全,不能作出准确的答复 |