很简的51单片机C语言流水灯程序

只是想写个流水灯,看来看去不知道为什么不出来。
#include<reg52.h>
#define LED P2

void delay(char i);

void main()
{
char i;
while(1)
{
LED = 0xfe;
delay(100);
for(i=0;i<8;i++)
{
LED = (LED << 1) | 0x01;
delay(100);
}
}
}

void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
确实是进了死循环,但改过来以后又有问题了,用位左移的话就是第一个灯闪,时间是流一次用的时间,但用数组或头文件里面的函数可以
想知道为什么用位左移不行~~~~很郁闷啊~~
#include<reg52.h>
#define LED P2
void delay(int x);

unsigned char code design[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void main()
{
int i;
while(1)
{
//LED = 0xfe;
for(i=0;i<8;i++)
{
delay(100);
//LED = (LED << 1) | 1;
LED = design[i];
}
}
}

void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<250;j++);
}

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:

#include<reg51.h>  //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit beep=P2^3;
void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{                    //delay(500);大约延时500ms.
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);    
}
void main()            //主函数
{
    uchar a,i,j;
    while(1)        //大循环
    {
        a=0xfe;     //赋初值
        for(j=0;j<3;j++) for(i=0;i<8;i++)   //左移三次
        {
            P1=a;       //点亮小灯
            beep=0;     //开启蜂鸣器
            delay(50); //延时50毫秒
            beep=1;     //关闭蜂鸣器
            delay(50);  //再延时50毫秒
            a=_crol_(a,1); //将a变量循环左移一位
        }
        a=0x7f;
       for(j=0;j<3;j++) for(i=0;i<8;i++)  //右移三次
        {
            P1=a;       //点亮小灯
            beep=0;     //开启蜂鸣器
            delay(50); //延时50毫秒
            beep=1;     //关闭蜂鸣器
            delay(50);   //再延时50毫秒
            a=_cror_(a,1); //将a变量循环右移一位
        }        
    }
}



2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-08-28
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
第2个回答  推荐于2017-09-11
#include<reg52.h>
#include <intrins.h>
#define LED P2

void delay(char i);

void main()
{ unsigned char LedVablue=0xFE;

while(1)
{

LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);

}
}

void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}本回答被提问者采纳
第3个回答  2009-03-19
字符型char 默认为signed类型
所以你的延时子程序里j循环条件一直满足
程序调用第一个delay(100)时陷入死循环
此时led=11111110 所以只有第一个灯一直亮
就会这种解释了
你确认只把初值
LED = 0xfe改成~LED = 0?
第4个回答  2009-03-18
//---------------------------------------
//头文件
#include<AT89X51.H>
//---------------------------------------

//---------------------------------------
//数据类型替代声明
#define u8 unsigned char
#define u16 unsigned int
//---------------------------------------

u8 led[8]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};

//---------------------------------------
//延时子函数 延时时间为n毫秒
void delay_ms(u8 n)
{
u16 i;
for(;n>0;n--)
{
for(i=114;i>0;i--)
{
;
}
}
}
//---------------------------------------

//---------------------------------------
//流水一次子函数
void liushui(void)
{
u8 i;
for(i=0;i<=7;i++)
{
P0=led[i];
delay_ms(240);
}
}
//---------------------------------------

//---------------------------------------
//主函数
void main(void)
{
while(1)
{
liushui();
}

}
//---------------------------------------

怎样用单片机做一个简单的流水灯?
单片机流水灯代码:#include<reg51.h>\/\/51头文件void delay(int t)\/\/定义延时函数{int j;while(t--){for(j=0;j<500;j++);}}void main(){int i;while(1){for(i=0;i<7;i++)\/\/循环点亮LED,到第7个LED延时一会就结束循环。在这个单片机流水灯代码中,假设使用的是8051...

很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> \/\/51单片机头文件#include <intrins.h> \/\/包含有左右循环移位子函数的库#define uint unsigned int \/\/宏定义#define uchar unsigned char \/\/宏定义sbit beep=P2^3;void delay(uint z) \/\/延时函数,z...

编写出单片机流水灯程序
编写一个基于8051单片机的流水灯程序,假设我们使用P1口连接了8个LED灯,要实现从第一个LED开始依次点亮,形成流水效果。以下是一个简单的C语言程序示例:```c include void delay(unsigned int ms) { unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--); \/...

单片机c语言编了个流水灯,用按键怎么实现它暂停。
实现流水灯的方式有很多种(中断,定时器,延时等等),看用哪种方式,最简单的是延时做流水灯,那么在死循环里面增加按键检测,判断出有按键按下来时,再进入死循环,程序不往下走就可以暂停,再按跌出死循环。include \/\/51系列单片机定义文件 define uchar unsigned char \/\/定义无符号字符 define uint ...

求一c51单片机,8位流水灯程序
\/\/发光顺序:0123,1234,2345,3456,4567,5670,6701,7012。循环。\/\/--- include<reg52.h> include<intrins.h> unsigned char a;void main(){ unsigned char i, j, k;a = 0x0f;while(1) { P1 = a; \/\/假设8个发光二极管接在P1口.a = _crol_(a, 1);for(i = 8; i >...

如何用单片机实现流水灯,从一依次亮到八,再从八依次亮?
单片机流水灯C语言程序的源代码如下:include \/\/51系列单片机定义文件。define uchar unsigned char \/\/定义无符号字符。define uint unsigned int \/\/定义无符号整数。void delay(uint); \/\/声明延时函数。硬件特征 1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分...

51单片机从中间到两边逐个点亮再从两边到中间逐个点亮程序?
这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include<reg51.h> define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,\/\/中间开始逐渐点亮 0xff,0x7e,0x3c,0x18,0x00\/\/两边开始逐渐点亮 } void ...

c语言设计的流水灯程序,越简单越好,最好早10行左右!
include <reg51.h> \/\/此文件中定义了51的一些特殊功能寄存器 include <intrins.h> void delayms(unsigned char ms){ unsigned char i;while(ms--){ for(i = 0; i < 120; i++);} } main(){ unsigned char LED;LED = 0xfe; \/\/0xfe = 1111 1110 while(1){ P2 = LED;delayms...

51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解
再把第一个灯点亮,再关掉第一个灯,再点亮第二个灯。。。把它放在do循环里就OK了,熟练了后,加个for循环简化一下程序,设几个变量就行了。 1 已赞过 已踩过< 你对这个回答的评价是? 评论 分享 微信扫一扫 网络繁忙请稍后重试 新浪微博 QQ空间 举报 收起 xie0500150326 来自电脑网络类芝麻团 2011-10...

单片机LED流水灯程序精简 #include<reg52.h> #include<intrins.h>...
\/\/实例6:使用P3口流水点亮8位LED include<reg51.h> \/\/包含单片机寄存器的头文件 \/ 函数功能:延时一段时间 \/ void delay(void){ unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);} \/ 函数功能:主函数 \/ void main(void){ while(1){ P3=0xfe; \/\/第一个灯亮...

相似回答