单片机点亮流水灯。Keil总提示有错

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar aa;

void main(){
aa = 0xfe;
uchar i;
while(1){
P1 = aa;
for(i=0;i<8;i++){
P1 = P1>>1;
}
}
}

错误:
2.c(9): error C141: syntax error near 'unsigned'
2.c(9): error C202: 'i': undefined identifier
2.c(12): error C202: 'i': undefined identifier

我写其他程序的时候这么写都对,为什么这一次就错了?是不是unsigned出错?还是变量i位置不对
另外,请大神看一下这么写,流水灯能不能运行。
还有,如何我按下一个按键,就能让流水灯停止。我只求流水灯停止代码!!谢谢啦

可能有一些中文字符,导致上述错误,通过逐个语句注释,逐个排除错误。
上述流水灯代码,中间没有延时,人眼应该分辨不出来。如果不用中断。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key= P2^4;

void main(){
uchar i;
uchar aa;
uchar kon;//1 run,0 stop;
uint dly;
aa = 0xfe;

while(1){
P1 = aa;
dly=5000;
if(kon)
{
for(i=0;i<8;i++){
P1 = P1>>1;
while(dly--);
}
if(key==0)
keyon=!keyon;
}

}追问

不能运行啊.....最后的keyon是什么?而且改成kon,根本就不是流水灯

追答

#include
#define uchar unsigned char
#define uint unsigned int
sbit key= P2^4;

void main(){
uchar i;
uchar aa;
uchar kon;//1 run,0 stop;
uint dly;
aa = 0xfe;

while(1){
P1 = aa;
dly=5000;
if(kon)
{
for(i=0;i>1;
while(dly--);
}
if(key==0)
kon=!kon;
while(key==0);//等待按键释放
}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-05
变量i的位置是不对的,你把i的位置放在aa=0xfe前面试试追问

嗯,我自己试了下,确实是放在前面对了。为什么啊?
其他问题你能解答吗?感激不尽......

追答

这个就和开发软件的编译方式有关了,你用的应该keil吧,keil编译时必须先要申明定义好一些函数或变量,否者在编译的时候会报错,这个问题就是和编译软件有关的,影响不大,你以后写程序的时候注意点就好,把所有的变量函数都事先声明和定义好就没问题了
让流水灯停下是可以的,你要按下一个键的话,就涉及到外部中断了,不知道你有去接触这个外部中断么?

追问

我看过中断。你能不能大致写一下?

第2个回答  2015-05-05
关注这个问题

keil汇编语言编程流水灯出现错误1.asm(41): 错误 A45: UNDEFINED SYMBOL...
DO: MOV R1,#200这里的标号是DO D1: MOV R2,#123 NOP D2: DJNZ R2,D2 DJNZ R1,D1 DJNZ R0,D0 这里是D0 数字0和字母O写错了

我用keil c51编了一个流水灯程序,编译无误却只有第一和第二个灯亮了...
1 你的定时器没有重装,导致第一次中断和后面的中断时间不一样,第一次时间短,后面的时间一直是以65536个周期中断的.2 你在中断函数里用了 for 循环,for循环是一下子就执行完了的,而不是你想象的每中断一次才执行一次.for(a=0;a<8;a++){ P1=(P1<<1)+1; \/\/---这一句,使得你的第二...

keil c51编写流水灯程序出现undefined identifier 求高手帮忙啊_百度知 ...
unsigned char led8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char led81[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};这些移到include的下面 另外 j跟 k要定义

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

关于单片机流水灯 为什么我的灯都不亮啊??与proteus联调时还说代码没...
P0=_crol_(P0,1);这个函数=_crol_在哪里 很明显你的HEX文件没有生成,而且你的二极管负端全部都接的高电平,按照你这种接法 必须让你二极管的正端的电压高于VCC,那是不可能的。所以你重新看哈hex文件是否生成,再把二极管换过来

keil 流水灯程序 开发板灯不亮。
sbit ENLED = P1^4,你写成3了,能一样吗,LED灯引脚定义出错,灯根本没有工作,能亮就怪了

89C52单片机点亮流水灯同时蜂鸣器响
第一、延迟还没有写完全;第二、leday子函数无调用,而且你这个子函数我都看不懂你是写什么意思,按你的设计要求,这个函数也用不着啊;第三、你这个程序应该有语法错误吧,FOR语句既没大括号又没顿号

这个错误怎么解决,简单的流水灯程序。
有的警告不影响编译,可以编译出HEX文件,而且单片机运行程也正常,就可以不管。如果不能生成HEX文件,或运行错误,那就得查找问题,消除警告才行。你没有发程序,所以,不知是什么原因警告。

单片机Keil问题
有个方法可以解决,即在KEIL调试时,修改R0里的数值,将它变成1或者01H,就可以出循环了。第二个问题:你的程序是实现P1循环→P3循环→P2循环→P0循环,然后又返回P1循环,连续往复。你的程序,我用软件调试了,逻辑上没问题,能实现。不过建议你用移位指令来完成。这样更简单。回答完毕,谢谢。

keil软件用单片机控制8个LED流水灯来回点亮(C语言程序)
P1=w; \/\/循环点亮LED w<<=1; \/\/点亮灯的位置移动,最低位补0 w=w|0x01; \/\/将最低位置1 delay(500); \/\/延时 } } } 或:include "reg51.h"\/\/程序中使用_crol_函数,所以要包含头文件"intrins.h"include "intrins.h"void delay(unsigned int t){ unsigned int i,j;f...

相似回答