单片机流水灯编程的问题,编译显示有错误,初学者请大家帮忙看一下

#include<reg52.h>
#define on 0;
#define off 1;
#define uint unsigned int;

sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;

void delay(uint i) ;

void main()
{
while(1)
{
LED0=on;
delay(1000);
LED0=off;
LED1=on;
delay(1000);
LED1=off;
LED2=on;
delay(1000);
LED2=off;
LED3=on;
delay(1000);
LED3=off;
LED4=on;
delay(1000);
LED4=off;
LED5=on;
delay(1000);
LED5=off;
LED6=on;
delay(1000);
LED6=off;
LED7=on;
delay(1000);
LED7=off;
}

}
void delay(uint i)
{
uint x,y;
for( x=i;x>0;x--)
for( y=122;y>0;y--);
}

..\DESKTOP\KEIL AND PROTEUS\FLOW LED.C(15): 错误 C141: syntax error near ';'
..\DESKTOP\KEIL AND PROTEUS\FLOW LED.C(48): 错误 C141: syntax error near ';'
..\DESKTOP\KEIL AND PROTEUS\FLOW LED.C(50): 错误 C202: 'x': undefined identifier
..\DESKTOP\KEIL AND PROTEUS\FLOW LED.C(51): 错误 C202: 'x': undefined identifier
..\DESKTOP\KEIL AND PROTEUS\FLOW LED.C(52): 错误 C202: 'y': undefined identifier
..\Desktop\Keil and Proteus\Flow Led.c - 5 个错误, 0 个警告。

第1个回答  2015-01-04
#define on 0;
#define off 1;
#define uint unsigned int;

宏定义不需要加分号 #define uint unsigned int; 谁教你这么声明变量的。。。。
更改为:
#define on 0
#define off 1
unsigned int uint;追问

#include
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^1;
void delay(uint i) ;
void delay(uint i)
{uint x,y;
for (x=0;x<i;x++)
for (y=0;y<255;y++) ;
}

那为什么这个行的通。。。

追答

sorry 是我看错了,很久没有这样宏定义了, 忘记了。一般我都用

typedef unsigned char uchar ;
typedef unsigned int uint;

你把你的宏定义的分号都去掉就可以通过编译了

追问

嗯嗯,谢谢啦

因为是用在单片机上的,所以可能和c语言应用的不同

本回答被网友采纳
第2个回答  2015-01-04
LED0=1;
LED0=0;追问

啥?

追答

LED0=1; //关灯
LED0=0; //开灯,低电平有效

追问

不是这个问题吧😳

追答

也许,你的15行在哪?复制来
你把延时函数直接写在前面去,试试看
void delay(uint i)
{
uint x,y;
for( x=i;x>0;x--)
for( y=122;y>0;y--);
}

追问

15行是void delay(uint);的声明

我的问题应该是define宏定义的后面不需要加分号

追答

函数的定义是要加分号的
提示“;”出错,并不是在本行,也许在前面
都没见过这样定义的
#define on 0;
#define off 1;
你还是改掉吧!

追问

#include
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^1;
void delay(uint i) ;
void delay(uint i)
{uint x,y;
for (x=0;x<i;x++)
for (y=0;y<255;y++) ;
}

那为什么这个行的通。。。

这个是控制灯闪烁的程序,中间我删了一部份控制灯明亮的,太长了输不进

百度知道里面字符有限制

追答

#include
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^1;
// void delay(uint i) ; //延时函数一般是放前面,不再定义了,去掉
void delay(uint i)
{uint x,y;
for (x=0;x<i;x++)
for (y=0;y<255;y++) ;
}

追问

嗯嗯,谢谢了!

还有一个问题,就是延时函数里面第一个for语句为什么不用加分号呢?

追答

加了分号的是执行语句
没分号的是条件语句

本回答被提问者采纳

用51单片机写了一个流水灯程序,有一点问题,请高手解惑
单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移7次,再右移7次,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。要想按键随时有效,应该把两个移位函数_cror_,_crol_ 放在主程中,检测key也放在...

单片机我想做个流水灯,这是我写的代码。为什么结果是只有P1的第一个灯...
1,char定义的变量在单片机c语言里可能被认为是带符号数据,所以你可以将char a改为 unsigned char a试试;2,_crol_(a,1);这个函数并不能改变a的值,将其改为a =_crol_(a,1);试试。拙见供参考。

单片机流水灯问题 看看我程序有什么错误啊
我正看六一晚会呢,帮你看看了,只看语法错误,不检查逻辑功能:include <reg52.h> void main(){ P1=0x00;TMOD=0x02;TH0=0x00;TL0=0x00;EA = 1;ET0 = 1;TR0=1;while(1){P1=0x55;} } void time0_int() interrupt 1 { P1 ^= 0x55;} ...

这个单片机c编程有问题吗(流水灯)
问题倒是没有,我估计就是 LZ 看到 的现象不符合他的想法,流水灯太快,甚至是 全亮了。假设 LZ 晶振是 12MHz的,那么机械周期(T)就为1us;由于不同编译器对 for 循环的汇编转换不尽相同,导致执行周期也不同,那么我们设想其中的一种,先进行一个初始化赋值,耗时 2T;再进行 n次判断(DJNZ...

用80c51单片机实现流水灯,汇编程序不知道哪里有有问题帮我看看。_百...
程序入口是0000H 加几条语句:ORG 0000H LJMP START ORG 0100H START:...

单片机跑马灯问题!!!看看我的程序,高手支招!
你的程序,有三种流水灯的模式,就是按键功能,检测不出来。电路图,不清楚,看个大概。现在是:K1、K2分别按下,各显示一种模式,两个键盘都不按,显示第三种模式。你原来只是在起动的时候,按键才管用,要想更换模式,必须重新起动。现在增加了三行:“LJMP START ;本行可删除”,就可以在运行期间...

求指导这个流水灯程序BUG在哪里
显示的流水灯就跳了。if (a>3600) 和a=a-3600; 语句编译的结果 下图是用仿真来显示的 a=a-3600结果,正确是时a= 1,是16位数,用4个数码管显示出4位16进制数。错误时,a 不是1啦 因此,写程序一定要规范,不能根据自己的想法任性的写,其结果有时是想不到的,更不容易查到原因。

谁帮我看下51单片机流水灯怎么不能正常流水闪亮
你程序最后的运行结果是不是所有LED都亮了,如果是这样的话,就是可能你P0口没有加上拉电阻,单片机P0不加上拉电阻的话,是输出不了高电平的。还有,楼主以后问程序问题的同时,最好也把硬件电路图给出,这样大家也才好回答。。。希望可以帮到你。。。

有关单片机 for循环语句 控制 流水灯 的问题
void main(void) {}主程序是一直循环的,当i=255循环完255次后,主程序又从头开始,进入for循环i=0,再次进行循环,其实for已经完成一个循环了,你可以在for循环结束后加入while(1);在当前语句循环 void main(void){ unsigned char i;for(i=0;i<255;i++) \/\/注意i的值不能超过255 { P0=...

单片机流水灯相关问题
花样流水灯的玩法,一个51单片机8位端口轮流输出16颗灯珠,

相似回答