导航:首页 > 操作系统 > 单片机右移循环指令流水灯

单片机右移循环指令流水灯

发布时间:2022-06-20 06:07:23

单片机右移到左移,左移到右移的花样流水灯程序问题

LED灯右移到最右边后向左移时是这样的:右移一位→第二个延时程序→第一个延时程序→右移右移一位→第二个延时程序→第一个延时程序,这样不断循环,循环到最左边,就开始了右移的程序。
这样左移的延迟大一点的!

⑵ 单片机中流水灯如何控制

单片机中流水灯控制:
硬件连接很简单,只要将8个LED指示灯接在P1口上
另一端通过220欧姆的电阻接+5V电源上,就可以了。
主要靠软件控制,简单的可以使用左移或右移指令,将低电平0
逐渐移入寄存器中,即控制LED指示灯逐渐一个一个地点亮或一个一个地熄灭。
复杂点:
可以进行花式流水控制。
例如:
可以由两边逐渐向内点亮
然后再由内逐渐向外一个一个熄灭。
还可以由由内逐渐向两边内点亮
然后再由两边渐向内逐一个一个熄灭。
在程序的实现上
可以把各种花式流水的P1口亮灭状态字
事先定义成数组
然后每隔一定的时间
取出送P1口显示。
呵呵
俺只提供给你一个号的算法
程序就自己动手自立更生吧
满意
就选满意回答

⑶ 如何用单片机做流水灯

因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。

电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器。值得注意的是,C2、C3的容量不能与图中数值偏差太大,否则可能引起不起振或振荡不稳定。XTAL的频率可以在4-20MHz之间,不过,频率的变化会导致程序运行速度的变化,这样就需要调整延时子函数的参数。事实上,不调整参数亦可,只是此时延迟时间不再是1秒,其延迟时间会随着XTAL频率的降低而增加。

二、软件部分

本程序包含两个函数,一个是主函数,另一个是延时子函数。源程序如下(为了便于讲解,我们为每行程序加上了编号):

程序各行作用如下:

00行:把AT89C2051的头文件“AT89x051.H”包含进来。

01行:声明Delay()延时子函数,该函数有一个无符号整型参数k,同时函数前面的void表明函数不返回函数值。

02行:延时子函数的开始,同时声明两个无符号整型变量i和j。

不过请注意,这里没有象上期的程序一样,把表示函数开始的“{”单独成行,而是把下一行写在一起了。事实上,写C程序的时候,可以把多行写作一行,C编译器只要遇到分号就认为是一行语句的结束。

当然,我们不能因为C程序有这个特点,就随意把多行合作一行书写,实际书写C程序的时候,还是要养成良好的程序书写习惯,按照约定俗成的原则来书写。

03行:声明for()循环。这个循环的初始条件是i=0,终止条件是i<k,循环计数是每循环一次,用手计数的变量i加1。因此,这个循环的循环次数就是k次。这样,只要改变k的值(即改变Delay()延时子函数的参数k的值),就可以很容易地控制循环次数,从而获得不同的延时时间。

04行:声明嵌套在03循环中的一个新的for()循环,这个循环与上一个循环相似,其循环次数是120次。本循环与上一个循环嵌套后,使得总的循环次数达120×k次。

05行:第一个分号,表示L条空语句,占用一个机器时间,以实现延时的目的。后面的两个“}”中,第一个“}”是04行for()循环的结束标志,程序遇到它时,将自动返回04行,使用于循环计数的变量j加1,同时判断j是否小于120,如果否,则转入05行;第二个是03行for()循环的结束标志,程序遇到它则会返回03行

⑷ 单片机流水灯设计,使八个led灯右移

#include <AT89X52.h> //调用51单片机的头文件


void main(void) //主函数,单片机开机后就是从这个函数开始运行

{


unsigned int a; //定义一个int型变量,做延时用

P0=0;

while(1) //死循环,单片机初始化后,将一直运行这个死循环

{

for(a=0;a<20000;a++); //延时若干时间,具体时长暂不理会

if(P0==0)

P0=0x01;

else

P0=P0<<1; //将PO左移

}

}

⑸ 如何实现51单片机的按键k1按下,LED流水灯向右移动,按键k2被按下,LED流水灯向左移动

51单片机实现方法:

按键控制标志位flag取反。

然后把下面的代码放到循环里:

U8 temp0 = 1。

U8 temp1 = 0x80。

U8 i = 0。

if(flag == 1)。

{。

for(i=0;i<8;i++)。

{。

P1=temp0<<i。

}。

}。

else。

{。

for(i=0;i<8;i++)。

{。

P1=temp1>>i。

}。

}。

}。

对控制LED口的寄存器进行位操作,按k1左移,按K2就是右移了。

51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。

51单片机的特点:

同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51,PHILIPS,和WINBOND等,我们常说的已经停产的89C51指的是ATMEL公司的AT89C51单片机。

同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。


⑹ 单片机设置流水灯显示效果,具体流水效果为两位彩灯右移

咨询记录 · 回答于2021-12-10

⑺ 单片机左右循环移动流水灯,求解答每句话含义,谢谢

#include<reg52.h>//头文件
#defineucharunsignedchar//数据类型
#defineuintunsignedint//数据类型

#defineDataPortP0//数据接口定义P0
sbitP21=P2^0;//维定义
ucharcodeScanCode[]=//1111111011111101
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voidDelayMs(uintn)//延时不解释
{
ucharj;
while(n--)
{
for(j=0;j<113;j++);
}
}
voidmain(void)
{
uchari;//变量
P21=1;//片选?
while(1)
{
for(i=0;i<8;i++)//循环8次
{
DataPort=ScanCode[i];//依次显示
DelayMs(500);//延时视觉效果
}
for(i=0;i<8;i++)//循环8次反着回来回显流水效果
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}

⑻ 51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环

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

    例程:

    #include<reg51.h>//51单片机头文件
    #include<intrins.h>//包含有左右循环移位子函数的库
    #defineuintunsignedint//宏定义
    #defineucharunsignedchar//宏定义
    sbitbeep=P2^3;
    voiddelay(uintz)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
    {//delay(500);大约延时500ms.
    uintx,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
    }
    voidmain()//主函数
    {
    uchara,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个开关、8个LED发光二极管(水平排列)和定时器,实现开关控制循环右移流水灯效果

代码不想写,说说思路吧:
单片机每秒采集一次开关状态,断开设变量F为0,否则为1。用P0口联8个LED,置P0为11111110,循环每秒检测"F"的值,如为1,循环左移一位;如为0,置P0为0。

⑽ 51单片机左右循环移动的流水灯功能,求解答每一句具体含义!

#include<reg52.h>//头文件包含,包括51硬件寄存器的宏定义,延时函数等
#define uchar unsigned char//宏定义,uchar被定义成unsigned char的简写
#define uint unsigned int//同上,uint被定义成unsigned int 的简写

#define DataPort P0//dataport(数据端口)被定为成P0口
sbit P21=P2^0;sbit是设置端口的某一位为一个变量,这样就可以直接对变量进行操作(等价于对端口该位的操作),如sbit led1=P1^1;如果P1^1接的是led的话,led1=1;就可以使led灯点亮了!
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code表示让单片机把这个定义的ScanCode的值存在ROM(程序存储区)
定义一个无符号的字符型变量数组ScanCode,其值存放在程序存储区,写入之后不可更改
void DelayMs(uint n)//毫秒延时函数,通过设置循环次数,来设定时间
{
uchar j;
while(n--)//直到n减为0退出循环
{
for(j=0;j<113;j++);空循环114次,即延时114个指令周期
}
}
void main(void)主函数
{
uchar i;
P21=1;p2口第1位引脚置高电平
while(1)无限循环
{
for(i=0;i<8;i++)以下大括号中两句代码循环8次,即将ScanCode数组中8字节数据依次送到p0口
{
DataPort=ScanCode[i];向数据口(即p0口)送数据,数据为ScanCode数组中第i个元素
DelayMs(500);延时500毫秒
}
for(i=0;i<8;i++)同上,将scancode数字的8字节数据按相反顺序再送一次
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}

阅读全文

与单片机右移循环指令流水灯相关的资料

热点内容
php中怎么注释 浏览:992
adxl345与单片机 浏览:279
服务器世界第一是什么公司的 浏览:19
精通编程入门 浏览:16
99单片机原理 浏览:61
linuxssh互信 浏览:288
支持128加密的浏览器 浏览:292
程序员下载器 浏览:48
退出云服务器代码 浏览:900
军状如命令 浏览:263
如何安卓系统更新 浏览:74
linux命令在哪里输入 浏览:497
编程语言集合类怎么选 浏览:93
如何将pdf转化为word 浏览:11
迈克菲隔离区解压密码 浏览:785
怎么用伟福编译 浏览:867
计算机算法专家 浏览:501
什么app清理垃圾 浏览:643
android流媒体服务器 浏览:183
各种算法的时间复杂度是指 浏览:116