|
|
是用DS18b20采集温度数据显示到lcd1602;没有用相关的元件库,自己写的函数。用的是arduino pro mini LCD1602 8位接口。 有大神帮看看么。。。。。。
编译的时候 老是出现 错误:
exit status 1
a function-definition is not allowed here before '{' token
程序如下:
#define PortEn 3 //Enable
#define PortRS 13 //R/S
#define PortBL 12 //backlight
#define PortRW 2 //R/W
#define PortDs A1 //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);
}
|
|