单片机C语言如何实现8个LED流水灯来回流动?

现在只能从左到右循环流动,怎么才能从左到右再从右到左流动呢?
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar p1e;
void delay(uint a);
void main()
{
p1e=0xfe;
P1=p1e;
while(1)
{
p1e=_crol_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
}

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

1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。

2、具体实现方法可以参考如下程序:

拓展资料

1、单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

2、单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

3、单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

参考资料:百度百科:单片机

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-06

可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。


具体实现方法可以参考如下程序:

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint a);
void main()
{
    P1=0xfe;
    while(1)
    {
        // 向左循环点亮LED
         for(i=0; i<7; i++)
        {
            P1=_crol_(P1,1);  // 左移一位,点亮下一位LED
            delay(55);
       }
       // 向右循环点亮LED
       for(i=0; i<7; i++)
       {
            P1=_cror_(P1,1); // 右移一位,,点亮上一位LED
            delay(55);
       }
    }
}
// 延时函数,延时a毫秒
void delay(uint a)
{
    uint x,y;
    for(x=a;x>0;x--)
        for(y=110;y>0;y--);
}

第2个回答  推荐于2017-09-14
char i;

while(1)
{
for(i=0; i<7; i++)
{
p1e=_crol_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
for(i=0; i<7; i++)
{
p1e=_cror_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
}本回答被提问者采纳
第3个回答  2020-02-09
十四行代码
#include<reg52.h>
#include<intrins.h>
unsigned int a,b;
void main()
{ P2=0xfe;
for(b=7;b>=1;b--)
{a=50000;
P2=(P2<<1)|0x01;
while(a--);}
P2=0x7f;
for(b=7;b>=1;b--)
{a=50000;
P2=(P2>>1)|0x80;
while(a--);}}
第4个回答  2012-06-14
p1e=_cror_(p1e,1);追问

这个只是向右移吧...我是说向左移动到第8个LED后再从第8个向左移,实现来回流动

追答

1,赋值
2,右移动
3,再赋值
4,左移动
你程序都写出了
只是把程序COPy 粘帖到下面 把 p1e=_crol_(p1e,1); 改成p1e=_cror_(p1e,1); 就好了呀

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水灯逐个闪动 { P1=~temp;delay(100); \/\/调用延时函数 temp<<=1;} temp=0x80;for(i=0;i<8;i++) \/\/8个...

单片机C语言如何实现8个LED流水灯来回流动?
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)_百度...
delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮 delay();} }

单片机流水灯怎么实现的?
在这个单片机流水灯代码中,假设使用的是8051单片机。需要定义8个LED灯,分别连接到P1端口的不同引脚上。然后使用一个循环结构来控制这8个LED灯按照一定的顺序逐个亮起,形成流水灯的效果。具体来说,使用for循环来控制LED灯的亮灭顺序。在每次循环中,通过给P1端口赋值来控制LED灯的亮灭状态。例如,给P...

C语言控制单片机,控制八个流水灯从左到右依次亮,最后又从右到左依次亮...
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<<i;delay_ms(500);} for(i=0;i<7;i++){ P1=0x80>>i;delay_ms(500);} } }

怎么用c语言编写数码管1234和5678来回闪烁
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的...

keil软件用单片机控制8个LED流水灯来回点亮(C语言程序)
for (i=0;i<8;i++){ 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...

51单片机开发板八个led灯依次点亮(就是流水灯)然后再全部
600);D7=0;delay(600);} } 延时函数delay的实现如下:void delay(uint z){ uint x,y;for(x=100;x>0;x--){ for(y=z;y>0;y--){ } } 这段代码实现了8个LED灯的流水点亮效果,先点亮第一个LED,等待600毫秒后,再点亮第二个LED,依此类推,直到所有LED都点亮,然后循环重复。

8个LED指示灯循环闪烁的程序(单片机)
1:设置一个变量zhidaoi,它可以从0循环到3 2:检测一个已取消缓冲的键。按“+1”3:当I值为每个值时,执行相应的模式。水量灯参考程序 #include #include #定义uchar无符号字符 Ucharj,温度;无效延迟(无符号整型ms){ Uchart;(女士)对于(t = 0;T < 123;T + +);} Voidmain(...

单片机:在程序中实现八灯从上到下流水,然后在从下到上流水,同时亮和同...
void delayms(uint n)\/\/延时,n为多少延时多少ms { uint i;for(;n>0;n--)\/\/延时nms for(i=121;i>0;i--)\/\/12M晶振而言,延时1ms;} void main()\/\/主程序 { uintw=0xfe;\/\/定义变量w为第一个灯点亮 while(1){ P0=w%256;\/\/取出变量w的低八位89%10=9,89\/10=8,2^8=256 del...

相似回答