标题: 大神们 小白一枚 程序报错 解决不了 求助 [打印本页]
作者: 944201454 时间: 2016-6-19 23:24
标题: 大神们 小白一枚 程序报错 解决不了 求助
#include <at89x51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar wr_com;
sbit DQ=P2^3;//ds18b20与单片机连接口
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
uchar data disdata[5];
uint tvalue,CurrentT=0;//温度值
uchar tflag;//温度正负标志
#define LCD_BUS P0
sbit SetKey = P2^2;
sbit UpKey = P2^1;
sbit DnKey = P2^0;
sbit BEEP = P2^4;
sbit Heat = P1^0;
sbit Cool = P1^1;
unsigned char AlarmTempLow=10,AlarmTempTop=40,Set=0,NG=0;
void delayms(uint ms) //延时xx毫秒
{
uchar i; while(ms--)
{
for(i=0;i<120;i++); } }
void command(uint com)
{
RS=0;
LCD_BUS=com;
delayms(5);
EN=1;
delayms(5);
EN=0; }
void write_dat(uchar dat)
{ RS=1;
LCD_BUS=dat;
delayms(5);
EN=1;
delayms(5);
EN=0; }
void writestring (uchar x ,uchar y,uchar s)
{ if (y == 0) command(0x80 + x);
else command(0xC0 + x);
while( s)
{
write_dat( s); } }
void writeChar (uchar x ,uchar y,uchar s)
{ if (y == 0) command(0x80 + x);
else command(0xC0 + x);
{
write_dat( s);
} }
void LCD_Initial()
{
EN=0;
RW=0;
command(0x38);
command(0x0c);
command(0x06);
command(0x01);
command(0x80+0x02); }
void delay_18B20(unsigned int i)
{while(i--);}
void ds1820rst(void)
{unsigned char x=0;
DQ=1;
delay_18B20(4);
DQ=0;
delay_18B20(4);
DQ=1;
delay_18B20(4);
}
uchar ds1820rd(void)
{unsigned char i=0;unsigned char dat=0;for(i=8;i>0;i--)
{DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay_18B20(10);}
return(dat);}
void ds1820wr(uchar wdata)
{unsigned char i=0;
for(i=8;i>0;i--)
{DQ=wdata&0x01;
delay_18B20(10);
DQ=1;wdata>>=1;}
}
unsigned int Read_Temperature(void)
{uchar a,b;
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0x44);
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0xbe);
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else {tvalue=~tvalue+1;tflag=1;}
tvalue=tvalue*(0.625);
CurrentT=tvalue;
return(tvalue);
}
void Display_Temperature()
{
uchar flagdat;
disdata[0]=tvalue/1000+0x30;
disdata[1]=tvalue%1000/100+0x30;
disdata[2]=tvalue%100/10+0x30;
disdata[3]=tvalue%10+0x30;
if(tflag==0)
flagdat=0x20;
else
flagdat=0x2d;//负温度显示负号:- //
if(disdata[0]==0x30)
{
disdata[0]=0x20;
if(disdata[1]==0x30)
disdata[0]=0x20; }
if(tflag==1)
{
writeChar(10,0,flagdat); //
wr_com (0x8a); wr_dat(flagdat);//显示符号位
writeChar(11,0,disdata[0]); //
wr_com (0x8b); wr_dat(disdata[0]);//显示百位
writeChar(12,0,disdata[1]);//
wr_com (0x8c);wr_dat(disdata[1]);//显示十位
writeChar(13,0,disdata[2]);//
wr_com(0x8d); wr_dat(disdata[2]);//显示个位
writeChar(14,0,0X2E);//
wr_com (0x8e);wr_dat(0x2e);//显示小数点
writeChar(15,0,disdata[3]);//
wr_com (0x8f); wr_dat(disdata[3]);//显示小数位
}
else {writeChar (10,0,disdata[0]);//
wr_com(0x8a);wr_dat(disdata[0]);//显示百位
writeChar(11,0,disdata[1]);//
wr_com(0x8b);wr_dat(disdata[1]);//显示十位
writeChar(12,0,disdata[2]);//
wr_com(0x8c);
wr_dat(disdata[2]);//显示个位
writeChar(13,0,0X2e);
wr_com(0x8d);
wr_dat(0x2e);//显示小数点
writeChar(14,0,disdata[3]);
wr_com(0x8e);
wr_dat(disdata[3]);//显示小数位
} }
void SetFun(void)
{
unsigned char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0;
if(SetKey==0)
{ delayms(20); if(SetKey==0)
{ if(Set<2) Set++; else Set=0; }
switch(Set)
{
case 0: writestring(0,1," ");
writestring(8,1," ");
break;
case 1: writestring(0,1,">");
writestring(8,1," ");
break;
case 2: writestring(0,1," ");
writestring(8,1,">");
break; }
while(SetKey==0); }
if((UpKey==0)&&(Set!=0))
{
delayms(20);
if(UpKey==0)
{
switch(Set)
{
case 1: if(AlarmTempLow<99)
AlarmTempLow++;
else AlarmTempLow=99;
break;
case 2: if(AlarmTempTop<99) AlarmTempTop++;
else AlarmTempTop=99; break; }
i1 = AlarmTempLow/100;
i2 = AlarmTempLow%100/10;
i3 = AlarmTempLow%10;
i4 = AlarmTempTop/100;
i5 = AlarmTempTop%100/10;
i6 = AlarmTempTop%10;
writestring(5,1," ");
writestring(13,1," ");
if(i1!=0) writeChar(5,1,i1+'0');
if((i1==0)&&(i2!=0)) writeChar(5,1,i2+'0');
if(i1!=0) writeChar(6,1,i2+'0');
if((i1==0)&&(i2==0)) writeChar(5,1,i3+'0');
else if((i1==0)&&(i2!=0)) writeChar(6,1,i3+'0');
if((i1!=0)) writeChar(7,1,i3+'0');
if(i4!=0) writeChar(13,1,i4+'0');
if((i4==0)&&(i5!=0))
writeChar(13,1,i5+'0');
if(i4!=0) writeChar(14,1,i5+'0');
if((i4==0)&&(i5==0)) writeChar(13,1,i6+'0');
else if((i4==0)&&(i5!=0)) writeChar(14,1,i6+'0');
if((i4!=0)) writeChar(15,1,i6+'0');
while(UpKey==0); } }
if((DnKey==0)&&(Set!=0))
{
delayms(20);
if(DnKey==0)
{
switch(Set)
{
case 1: if(AlarmTempLow>0) AlarmTempLow--;
else AlarmTempLow=0;
break;
case 2: if(AlarmTempTop>0) AlarmTempTop--;
else AlarmTempTop=0; break; }
i1 = AlarmTempLow/100;
i2 = AlarmTempLow%(10,0,disdata[0]);
i3 = AlarmTempLow%10; //获得温度值的个位
i4 = AlarmTempTop/100; //获得温度值的百位
i5 = AlarmTempTop%100/10; //获得温度值的十位
i6 = AlarmTempTop%10; //获得温度值的个位
writestring(5,1," ");
writestring(13,1," ");
if(i1!=0) writeChar(5,1,i1+'0');
if((i1==0)&&(i2!=0)) writeChar(5,1,i2+'0');
if(i1!=0) writeChar(6,1,i2+'0');
if((i1==0)&&(i2==0)) writeChar(5,1,i3+'0');
else if((i1==0)&&(i2!=0)) writeChar(6,1,i3+'0');
if((i1!=0))
writeChar(7,1,i3+'0');
if(i4!=0) writeChar(13,1,i4+'0');
if((i4==0)&&(i5!=0))
writeChar(13,1,i5+'0');
if(i4!=0) writeChar(14,1,i5+'0');
if((i4==0)&&(i5==0))
writeChar(13,1,i6+'0');
else if((i4==0)&&(i5!=0))
writeChar(14,1,i6+'0');
if((i4!=0))
writeChar(15,1,i6+'0');
writeChar(4,1,i1+'0');
writeChar(5,1,i2+'0');
writeChar(6,1,i3+'0');
writeChar(12,1,i4+'0');
writeChar(13,1,i5+'0');
writeChar(14,1,i6+'0');
while(DnKey==0); } } }
void Alarm(void)
{
if((CurrentT>(AlarmTempTop*10))||(CurrentT<(AlarmTempLow*10))||(tflag==1))
{ BEEP=0; }
else
{ BEEP=1; } }
void main(void)
{
unsigned char i=0;
P3=0xef;
P2=0xef;P1=0x00;BEEP=1;
LCD_Initial();
Read_Temperature();
writestring(1,0,"DS18B20 Alarmer"); //显示“DS18B20 Alarmer” delayms(1000); //延时1S
writestring(0,0,"Current T= "); //显示“Current T= ”
}
writestring(0,1," Low=10 Top=40 "); //显示“ Low=10 Top=40
NG=0; while(1)
{
Read_Temperature(); // //读取温度值
Display_Temperature(); //显示温度值
SetFun();
Alarm();
if((CurrentT<(AlarmTempTop*10))&&(CurrentT>(AlarmTempLow*10)))
{ Cool=0;Heat=0; }
else if((CurrentT>(AlarmTempTop*10)))
{ Cool=1;Heat=0; }
else if((CurrentT<(AlarmTempLow*10))||(tflag==1))
{ Cool=0;Heat=1; } }
一直这两个报错
.C(128): error C211: call not to a function
C(128): error C208: 'function': too many actual parameters
Target not created
作者: 908524040 时间: 2016-6-20 09:15
chengxunhaochanga
作者: 越快乐越堕落 时间: 2016-6-20 19:09
你用的编译软件包含这个头文件吗?头文件有没有写错?很多时候头文件没有正确调用错误是一大堆的
作者: 944201454 时间: 2016-6-20 23:43
软件应该问题不大 用keil编译的 主要是小白 看不懂程序
作者: liuyimao485812 时间: 2016-6-21 06:31
报什么错贴出来。那么长的程序,不知道什么错误;没有人有时间和耐心一句一句的分析程序的。
作者: wwwicq 时间: 2016-6-21 11:16
看下字符是否有错漏
作者: 越快乐越堕落 时间: 2016-6-21 16:18
。。。。软件不能有问题 就算你看不懂 但是软件它看得懂啊 你错了一点都不行的 就比如那个头文件 没有包含它还真不行 就算下面的程序都是对的 也不行
作者: xzf586 时间: 2016-8-5 17:08
wr_com()函数声明
作者: YUSUJIFENG 时间: 2016-8-5 23:28
你用的编译软件包含这个头文件吗?头文件有没有写错?很多时候头文件没有正确调用错误是一大堆的
作者: zl2168 时间: 2016-8-6 09:51
本帖最后由 zl2168 于 2016-8-6 09:52 编辑
实例97 一线式DS18B20测温
先Proteus仿真一下,确认有效。
以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版
书中电路和程序设计有详细说明,程序语句条条有注解。
作者: Action 时间: 2016-8-6 15:20
这个程序不知道谁写的 问题很多 你那个是没有wr_com 这个函数 而且也没有wr_dat这个函数 里面又有许多应该是在中文下输入的字符 建议你还是重新找一个程序吧 这个改起来很累 而且中文字符 不知道 还要重新写一遍
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |