单片机c语言程序问题,请帮我看一下错在哪里

程序是从书上看来的,keil4编译的时候出现Buildtarget'Target1'compilingMain.c...MAIN.C(42):errorC141:synt... 程序是从书上看来的,keil4编译的时候出现
Build target 'Target 1'
compiling Main.c...
MAIN.C(42): error C141: syntax error near '='
MAIN.C(42): error C141: syntax error near 'else'
MAIN.C(42): error C141: syntax error near '='
MAIN.C(46): error C141: syntax error near '='
MAIN.C(46): error C141: syntax error near 'else'
MAIN.C(46): error C141: syntax error near '='
…………
…………
程序是这样子的,希望各位大神能帮我找出哪里有问题

1 DelayNus 微秒级延时
2 DelayNms 毫秒级延时
3 EEPROMEnable EEPROM 使能
4 EEPROMDisable EEPROM 禁止
5 EEPROMSetAddress 设置EEPROM 地址
6 EEPROMStart EEPROM 启动触发
7 EEPROMReadByte EEPROM 读取单个字节
8 EEPROMWriteByte EEPROM 写入单个字节
9 EEPROMSectorErase EEPROM 擦除扇区
10 PortInit 端口初始化
11 main 函数主体

#include "stc.h"
#include <intrins.h>
#define NOP() _nop_()
#define HIGH 1
#define LOW 0
#define LS164_DATA(x) {if((x))P0^0=1;else P0^0=0;}
#define LS164_CLK(x) {if((x))P0^7=1;else P0^7=0;}
#define LCD1602_LINE1 0
#define LCD1602_LINE2 1
#define LCD1602_LINE1_HEAD 0x80
#define LCD1602_LINE2_HEAD 0xC0
#define LCD1602_DATA_MODE 0x38
#define LCD1602_OPEN_SCREEN 0x0C
#define LCD1602_DISP_ADDRESS 0x80
#define LCD1602_RS(x) {if((x))P0^1=1;else P0^1=0;}
#define LCD1602_RW(x) {if((x))P0^2=1;else P0^2=0;}
#define LCD1602_EN(x) {if((x))P0^3=1;else P0^3=0;}
#define LCD1602_PORT LS164Send

void DelayNus(unsigned int t)
{
unsigned int d=0;
d=t;
do
{
NOP();
}while(--d >0);
}

void LS164Send(unsigned char byte)
{
unsigned char j;
for(j=0;j<=7;j++)
{
if(byte&(1<<(7-j)))
{
LS164_DATA(HIGH);
}
else
{
LS164_DATA(LOW);
}
LS164_CLK(LOW);
LS164_CLK(HIGH);
}
}
void LCD1602WriteByte(unsigned char byte)
{
LCD1602_PORT(byte);
LCD1602_RS(HIGH);
LCD1602_RW(LOW);
LCD1602_EN(LOW);
DelayNus(50);
LCD1602_EN(HIGH);
}
void LCD1602WriteCommand(unsigned char command)
{
LCD1602_PORT(command);
LCD1602_RS(LOW);
LCD1602_RW(LOW);
LCD1602_EN(LOW);
DelayNus(50);
LCD1602_EN(HIGH);
}

void LCD1602SetXY(unsigned char x,unsigned char y)
{
unsigned char address;
if(y == LCD1602_LINE1)
{
address=LCD1602_LINE1_HEAD+x;
}
else
{address=LCD1602_LINE2_HEAD+x;
}
LCD1602WriteCommand(address);
}

void LCD1602PrintfString(unsigned char x,unsigned char y,unsigned char *s)
{
LCD1602SetXY(x,y);
while(s && *s)
{
LCD1602WriteByte(*s);
s++;
}
}
void LCD1602ClearScreen(void)
{
LCD1602WriteCommand(0x01);
DelayNus(50);
}
void LCD1602Init(void)
{
LCD1602ClearScreen();
LCD1602WriteCommand(LCD1602_DATA_MODE);//显示模式设置,设置16x2 显示,5x7 点阵,
//8 位数据接口
LCD1602WriteCommand(LCD1602_OPEN_SCREEN);//开显示
LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始显示地址
LCD1602ClearScreen();
}

void PortInit(void)
{
P0=P1=P2=P3=0xFF;
}

void main(void)
{ unsigned char i;
P2=0xFE;
PortInit();
LCD1602Init();
LCD1602PrintfString(0,LCD1602_LINE1,"HELLOCAST");
while(1)
{
;

}
}
展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
MAIN: MOV SP,#50H MOV DPTR,#TAB;读入字模指针 MOV 30H,DPL; 存起来 ;堆栈低8位 MOV 31H,DPH ;堆栈高8位 MOV 32H,30H;再记录指针,留作移动了多少位的判断 用。 MOV 3H,31H ;3H记录字模数据的高位地址 INC 3H;3H高位地址+5,表示数据有5X256列之多。 ROL: MOV R2,#01H;设扫描次数 INI1: MOV DPL,30H;这段是扫描一次32列 MOV DPH,31H MOV R4,#32 MOV R3,#0 LOP1 P1,R3 CLR A MOVC A,@A+DPTR MOV P0,A INC DPTR CLR A MOVC A,@A+DPTR MOV P2,A INC DPTR CAL DELAY INC R3 DJNZ R4,LOP1 DJNZ R2,INI1;这条预留扫描次数用可以调整速度 MOV DPL,3…
一剑出血
高粉答主

2012-11-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
{if((x))P0^0=1;else P0^0=0;}

在程序体里面是不能用P0 ^ 0 = 1;这样的语句的。此时^按照异或运算符处理,所以必定会产生语法错误。
正确的做法是在程序开头声明位变量,之后引用。
sbit P0_0 = P0 ^ 0;
...
{if((x))P0_0=1;else P0_0=0;}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一种32位的微控制器,由意法半导体(STMicroelectronics)公司设计和生产。STM32是一种非常常见的嵌入式系统芯片,广泛应用于物联网、汽车、工业控制、医疗设备等领域。STM32具有以下特点:1. 体积小巧:STM... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
zhxiufan
2012-11-23 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
if(byte&(1<<(7-j)))
{
LS164_DATA(HIGH);
}
else
{
LS164_DATA(LOW);
}

你的if后面条件好像有问题,肯定一直为真,所以else变成了无意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迷雾心魔
2012-11-23 · TA获得超过174个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:111万
展开全部
P0^0,P0^1,这个不能作为左值!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式