baidu_16748105
monog
采纳率0%
2015-05-20 07:37 阅读 8.5k

keil编译时 error C141: syntax error near ')'

简单的烟雾报警程序中先是缺少了lcd1602的头文件 我从网上找了添加了后发现有错误 求大神帮我解答一下疑问 谢谢了
/********************************
FILE NAME: lcd1602.c
CHIP TYPE: AT89C51
CLOCK FREQUENCY: 12MHZ
IDE: VSMStudio
COMPILER: IAR for 8051
TIME: September 2010
********************************/

#include "reg52.h"
#include "intrins.h"

// Define P3 pins
#define DATA_BUS (P0)
#define RS (P2_bit.P2_0)
#define RW (P2_bit.P2_1)
#define E (P2_bit.P2_2)

// Define new types
typedef unsigned char uchar;
typedef unsigned int uint;

// Function Prototypes
void check_busy(void);
void write_command(uchar com);
void write_data(uchar data);

void LCD_init(void);
void string(uchar ad ,uchar *s);
void lcd_test(void);
void delay(uint);

void main(void)
{ LCD_init();
while(1)
{ string(0x80,"Have a nice day!");
string(0xC0," Proteus VSM");
delay(100);
write_command(0x01);
delay(100);

}
}

/*******************************************
LCD1602 Driver mapped as IO peripheral
*******************************************/

// Delay
void delay(uint j)
{ uchar i = 60;
for(; j>0; j--)
{ while(--i);
i = 59;
while(--i);
i = 60;
}
}

// Test the Busy bit
void check_busy(void)
{ do
{ DATA_BUS = 0xff;
E = 0;
RS = 0;
RW = 1;
E = 1;
__no_operation();
} while(DATA_BUS & 0x80);
E = 0;
}

// Write a command
void write_command(uchar com)
{ check_busy();
E = 0;
RS = 0;
RW = 0;
DATA_BUS = com;
E = 1;
__no_operation();
E = 0;
delay(1);
}

// Write Data
void write_data(uchar data)
{ check_busy();
E = 0;
RS = 1;
RW = 0;
DATA_BUS = data;
E = 1;
__no_operation();
E = 0;
delay(1);

}

// Initialize LCD controller
void LCD_init(void)
{ write_command(0x38); // 8-bits, 2 lines, 7x5 dots
write_command(0x0C); // no cursor, no blink, enable display
write_command(0x06); // auto-increment on
write_command(0x01); // clear screen
delay(1);
}

// Display a string
void string(uchar ad, uchar *s)
{ write_command(ad);
while(*s>0)
{ write_data(*s++);
delay(100);
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • foxyz donwmufromdying 2015-05-20 08:21

    给你个简单的笨办法查找定位错误:用宏定义ifdef 把代码分块后每次编译部分代码,看看是哪部份代码引起的错误,逐步缩小范围

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-05-20 07:45

    看下是不是括号没有匹配。

    点赞 1 评论 复制链接分享
  • oyljerry oyljerry 2015-05-20 09:10

    具体错误行数呢,一般是定义不对,或者你的头文件不对应

    点赞 评论 复制链接分享
  • q3733353520 我用双手-成就你的梦想 2015-05-20 09:46

    可能是函数或者数据类型没有在对应的头文件。
    也可能你的define 部分有问题

    点赞 评论 复制链接分享
  • daihuan509 daihuan509 2015-05-21 02:04

    看起来你这个就是 某个地方的 } 多了或则少了,,你可以一个函数一个函数的屏蔽,然后编译,逐渐缩小范围

    点赞 评论 复制链接分享
  • baidu_16748105 monog 2015-05-25 07:06

    void write_data(uchar data); 在这一行

    点赞 评论 复制链接分享

相关推荐