jim4714 发表于 2016-4-29 19:42:30

大家看看这个程序是在怎么回事呀?

是用DS18b20采集温度数据显示到lcd1602;没有用相关的元件库,自己写的函数。用的是arduino pro mini LCD1602 8位接口。有大神帮看看么。。。。。。
编译的时候   老是出现 错误:

exit status 1
a function-definition is not allowed here before '{' token

程序如下:
#define PortEn3    //Enable
#define PortRS13    //R/S
#define PortBL12//backlight
#define PortRW2   //R/W
#define PortDsA1//PortDs
char str0[]="HELLO WORLD!!!";

//Write Data
void lcdDat(uint8_t value)
{
    read_busy();
    digitalWrite(PortRW,LOW);
    digitalWrite(PortRS,HIGH);
    digitalWrite(PortEn,LOW);
    /*for(int i = 4;i < 8;i++)       //high 4bit
    digitalWrite(i,(value >> i) & 0x01);
    digitalWrite(PortEn,HIGH);
    digitalWrite(PortEn,LOW);
    for(int i = 4;i < 8;i++)      //low 4bit
    digitalWrite(i,(value >> i - 4) & 0x01);*/
    for(int i=4;i<12;i++)
       digitalWrite(i,(value>>i-4)&0x01);
    digitalWrite(PortEn,HIGH);
    digitalWrite(PortEn,LOW);
}

//Write Command
void lcdCmd(uint8_t value)
{
    read_busy();
    digitalWrite(PortRW,LOW);
    digitalWrite(PortRS,LOW);
    digitalWrite(PortEn,LOW);

    /*for(int i = 4;i < 8;i++)       //high 4bit
    digitalWrite(i,(value >> i) & 0x01);
    digitalWrite(PortEn,HIGH);
    digitalWrite(PortEn,LOW);
    for(int i = 4;i < 8;i++)      //low 4bit
    digitalWrite(i,(value >> i - 4) & 0x01);   */

    for(int i=4;i<12;i++)
       digitalWrite(i,(value>>i-4)&0x01);
    digitalWrite(PortEn,HIGH);
    digitalWrite(PortEn,LOW);   
}

//LCD init
void lcdInit()
{
    delay(100);
    lcdCmd(0x38);    //4-wire mode 2line display
    delay(64);
    lcdCmd(0x38);    //4-wire mode 2line display
    delay(50);
    lcdCmd(0x38);    //4-wire mode 2line display
    delay(20);
    lcdCmd(0x06);
    delay(20);
    lcdCmd(0x0E);
    delay(20);
    lcdCmd(0x01);//clear diaplay
    delay(100);
    lcdCmd(0x80);   // no cruser
    delay(20);
}

void lcdDisplay(uint8_t pos,uint8_t data)
{
    lcdCmd(pos | 0x80);//DDRAM address
    delay(10);
    lcdDat(data);
    delay(10);
}


void read_busy()
{
    digitalWrite(11,HIGH);      //set to 1
    digitalWrite(PortRS,LOW);   
    digitalWrite(PortRW,HIGH);
    digitalWrite(PortEn,HIGH);
    pinMode(11,INPUT);
    while(digitalRead(11));
    digitalWrite(PortEn,LOW);   //set to 0
    pinMode(11,OUTPUT);
}


void printStr(uint8_t pos,char *s)
{
while(*s)
{
   lcdDisplay(pos,*s);
   s++;
   pos++;
    }
}   

//**********************************************************************
//init DS18B20
uint8_t init_ds18b20()
{
digitalWrite(PortDs,HIGH);
digitalWrite(PortDs,LOW);
delayMicroseconds(500);
pinMode(PortDs,INPUT);
delayMicroseconds(100);
uint8_t value = digitalRead(PortDs);
delayMicroseconds(400);
return(value);
   }

//write 1-byte to DS18B20
void write_ds18b20(uint8_t s)
{
for(int i = 0;i < 8;i++)
{
    digitalWrite(PortDs,HIGH);
    delayMicroseconds(2);
    digitalWrite(PortDs,LOW);
    delayMicroseconds(2);
    if((s>>i)&0x01==1)
   digitalWrite(PortDs,HIGH);
    else
   digitalWrite(PortDs,LOW);
    delayMicroseconds(45);
    digitalWrite(PortDs,HIGH);
}




//read 1-byte from DS18B20
int read_ds18b20()         <<<<<提示错误在这行
{

uint8_t m;
uint8_t n=0;
for(int i = 0;i < 8;i++)
{

    digitalWrite(PortDs,HIGH);
    delayMicroseconds(2);
    digitalWrite(PortDs,LOW);
    delayMicroseconds(2);
    pinMode(PortDs,INPUT);
    delayMicroseconds(5);
    m = digitalRead(PortDs);
    n = (m<<7)|(n>>1);
}
    pinMode(PortDs,OUTPUT);   
    return n;
}


void temp_convert()
{
while(init_ds18b20());
write_ds18b20(0xCC);
write_ds18b20(0x44);
}

uint8_t temp_read()
{
while(init_ds18b20());
write_ds18b20(0xCC);
write_ds18b20(0xBE);
uint8_t low = read_ds18b20();
uint8_t high = read_ds18b20();
int value = high;
value <<= 8;
value |= low;
float tt = value*0.0625;
uint8_t temp = tt*10 + 0.5;
return temp;
}

//************************************************************************

void setup() {
// put your setup code here, to run once:
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
    pinMode(12,OUTPUT);
    pinMode(13,OUTPUT);
    pinMode(A1,OUTPUT);
    lcdInit();
}


void loop() {                                     <<<<<提示错误在这行
// put your main code here, to run repeatedly:
    temp_convert();
    uint8_t temp = 4;
    uint8_t temp = temp_read();
    uint8_t a1 = temp/100;
    uint8_t a2 = temp%100/10;
    uint8_t a3 = temp%10;
    lcdDisplay(0x40,str0);
    lcdDisplay(0,a1);
    lcdDisplay(1,a2);
    lcdDisplay(2,'.');
    lcdDisplay(3,a3);
    digitalWrite(PortBL,HIGH);
    delay(5000);
    digitalWrite(PortBL,LOW);
    delay(5000);      
}

328522073 发表于 2016-4-29 23:43:51

void write_ds18b20(uint8_t s)少了个反括号“}”

qhp777 发表于 2016-4-30 06:13:20

看提示也是括号问题

jim4714 发表于 2016-4-30 16:04:46

328522073 发表于 2016-4-29 23:43 static/image/common/back.gif
void write_ds18b20(uint8_t s)少了个反括号“}”

仔细检查了下,没有漏{或}呀,帮函数里的一些语句注释屏蔽掉就不会出错误了,郁闷。。。。。

eddiewwm 发表于 2016-4-30 17:46:14

jim4714 发表于 2016-4-30 16:04 static/image/common/back.gif
仔细检查了下,没有漏{或}呀,帮函数里的一些语句注释屏蔽掉就不会出错误了,郁闷。。。。。

提議先離開冷靜一下,回來再仔細檢查,就應能發現了。努力!
页: [1]
查看完整版本: 大家看看这个程序是在怎么回事呀?