求16个流水灯程序,有模式还可以调节快慢的,急求,谢谢。

作者&投稿:郯单 (若有异议请与网页底部的电邮联系)
求16个流水灯程序,有模式还可以调节快慢的,模式显示在一个数码管上,急求!~

看到程序脑壳疼

proteus文件发给我
就可以写了

《基于8051+Proteus仿真》案例

第01 篇基础程序设计

01    闪烁的LED

 

/*    名称:闪烁的LED

       说明:LED按设定的时间间隔闪烁

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED=P1^0;

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       while(1)

       {

              LED=~LED;

              DelayMS(150);

       }

}

 

02  从左到右的流水灯

 

/*    名称:从左到右的流水灯

       说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       P0=0xfe;

       while(1)

       {

              P0=_crol_(P0,1);//P0的值向左循环移动

              DelayMS(150);

       }

}

 

03  8只LED左右来回点亮

 

/*    名称:8只LED左右来回点亮

       说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       P2=0x01;

       while(1)

       {

              for(i=0;i<7;i++)

              {

                     P2=_crol_(P2,1);//P2的值向左循环移动

                     DelayMS(150);

              }

              for(i=0;i<7;i++)

              {

                     P2=_cror_(P2,1);//P2的值向右循环移动

                     DelayMS(150);

              }

       }

}

 

04  花样流水灯

 

/*    名称:花样流水灯

       说明:16只LED分两组按预设的多种花样变换显示

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code Pattern_P0[]=

{

 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

uchar code Pattern_P2[]=

{

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       while(1)

       {     //从数组中读取数据送至P0和P2口显示

              for(i=0;i<136;i++)

              {

                     P0=Pattern_P0[i];

                     P2=Pattern_P2[i];

                     DelayMS(100);

              }

       }

}

 

05  LED模拟交通灯

 

/*    名称:LED模拟交通灯

       说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0;    //东西向灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3;    //南北向灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

       switch(Operation_Type)

       {

              case1:     //东西向绿灯与南北向红灯亮

                            RED_A=1;YELLOW_A=1;GREEN_A=0;

                            RED_B=0;YELLOW_B=1;GREEN_B=1;

                            DelayMS(2000);

                            Operation_Type=2;

                            break;

              case2:     //东西向黄灯闪烁,绿灯关闭

                            DelayMS(300);

                            YELLOW_A=~YELLOW_A;GREEN_A=1;

                            if(++Flash_Count!=10)return; //闪烁5次

                            Flash_Count=0;

                            Operation_Type=3;

                            break;

              case3:     //东西向红灯,南北向绿灯亮

                            RED_A=0;YELLOW_A=1;GREEN_A=1;

                            RED_B=1;YELLOW_B=1;GREEN_B=0;

                            DelayMS(2000);

                            Operation_Type=4;

                            break;

              case4:     //南北向黄灯闪烁5次

                            DelayMS(300);

                            YELLOW_B=~YELLOW_B;GREEN_B=1;

                            if(++Flash_Count!=10)return;

                            Flash_Count=0;

                            Operation_Type=1;

       }

}

//主程序

void main()

{

       while(1)Traffic_Light();

}

 

06  单只数码管循环显示0~9

 

/*    名称:单只数码管循环显示0~9

       说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari=0;

       P0=0x00;

       while(1)

       {/* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);}  //注:另一方案 */

              P0=~DSY_CODE[i];

              i=(i+1)%10;

              DelayMS(300);

       }

}

 

07  8只数码管滚动显示单个数字

 

/*    名称:8只数码管滚动显示单个数字

       说明:数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,wei=0x80;

       while(1)

       {

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

              {

                     P2=0xff;    //关闭显示

                     wei=_crol_(wei,1);

                     P0=DSY_CODE[i];  //发送数字段码

                     P2=wei;           //发送位码

                     DelayMS(300);

              }

       }

}

 

08  8只数码管动态显示多个不同字符

电路如上图

/*    名称:8只数码管动态显示多个不同字符

       说明:数码管动态扫描显示0~7。

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,wei=0x80;

       while(1)

       {

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

              {    

                     P2=0xff;

                     P0=DSY_CODE[i];  //发送段码

                     wei=_crol_(wei,1);

                     P2=wei;           //发送位码

                     DelayMS(2);

              }

       }

}

 

09  8只数码管闪烁显示数字串

电路如上图

/*    名称:8只数码管闪烁显示数字串

       说明:数码管闪烁显示由0~7构成的一串数字

                本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//位码表

uchar codeDSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,j;

       while(1)

       {

              for(i=0;i<30;i++)

              {    

                     for(j=0;j<8;j++)

                     {

                            P0=0xff;

                            P0=DSY_CODE[j];  //发送段码

                            P2=DSY_IDX[j];    //发送位码

                            DelayMS(2);

                      }

              }

              P2=0x00;        //关闭所有数码管并延时

              DelayMS(1000);

       }

}

 

10  8只数码管滚动显示数字串

电路如上图

/*    名称:8只数码管滚动显示数字串

       说明:数码管向左滚动显示3个字符构成的数字串

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏)

uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,j,k=0,m=0x80;

       while(1)

       {     //刷新若干次,保持一段时间的稳定显示

              for(i=0;i<15;i++)

              {    

                     for(j=0;j<8;j++)

                     {     //发送段码,采用环形取法,从第k个开始取第j个

                            P0=0xff;

                            P0=DSY_CODE[Num[(k+j)%11]]; 

                            m=_crol_(m,1);

                            P2=m;      //发送位码

                            DelayMS(2);

                      }

              }

              k=(k+1)%11;  //环形队列首支针k递增,Num下标范围0~10,故对11取余

       }

}

 

11  K1-K4 控制LED移位

 

/*    名称:K1-K4 控制LED移位

       说明:按下K1时,P0口LED上移一位;

                按下K2时,P0口LED下移一位;

                按下K3时,P2口LED上移一位;

                按下K4时,P2口LED下移一位;

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)for(i=0;i<120;i++);

}    

//根据P1口的按键移动LED

void Move_LED()

{

       if     ((P1&0x10)==0) P0=_cror_(P0,1);  //K1

       elseif((P1&0x20)==0) P0=_crol_(P0,1);     //K2

       elseif((P1&0x40)==0) P2=_cror_(P2,1); //K3

       elseif((P1&0x80)==0) P2=_crol_(P2,1);     //K4

}

//主程序

void main()

{

       ucharRecent_Key; //最近按键

       P0=0xfe;

       P2=0xfe;

       P1=0xff;

       Recent_Key=0xff;

       while(1)

       {

              if(Recent_Key!=P1)

              {

                     Recent_Key=P1;      //保存最近按键

                     Move_LED();

                     DelayMS(10);

              }

       }

}




流水灯单片机程序代码急求单片机流水灯程序及详解
关于流水灯单片机程序代码,急求单片机流水灯程序及详解这个很多人还不知道,今天来为大家解答以上的问题,现在让我们一起来看看吧!1、你好! 给你两个份实例 基本可以搞定啦 !一。2、流水灯实例1. 基础知识:寻址方式是寻找、确定参与操作的数据的地址的方式。3、8051单片机的寻址方式包括寄存器寻址、直接寻址、寄存器间接...

单片机PO P1口控制16个LED 的跑马灯程序
include <reg52.h> void time(unsigned int ucMs);\/\/函数声明 void main(void){ unsigned char ucTimes;define DELAY_TIME 450 while(1){ P1=0xff;P0=0xff;for(ucTimes=0;ucTimes<8;ucTimes++){ P0 = P0 - (0x01<<ucTimes);time(DELAY_TIME);} for(ucTimes=0;ucTimes<8;uc...

急求单片机流水灯程序及详解
二。。。用单片机控制的LED流水灯设计(电路、程序全部给出)1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动...

一个花样流水灯单片机程序(要求1,3,5,7灯亮,2,4,6,8灯亮然后全灭)
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I\/O口和中断系统、定时器\/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A\/D转换器等电路)集成到一块硅片上构成的一个...

用C语言编写一个花样流水灯的程序及此程序的流程图
;;;\/*程序功能:定时5S到切换LED显示状态.;作者:w418781840.2008.5.29 *\/ ;;;FLAG BIT 30H ;定义标志位 ORG 0 LJMP MAIN ORG 0BH LJMP AGA ;;;主程序;;;ORG 0030H MAIN: MOV FLAG,#01H ;标志位清0 MOV TMOD,#01H ;赋值50MS MOV TH0,#3CH MOV TL0,#0B0H MOV R0,#100 ;中...

AT89C51单片机的P1口控制16盏LED流水灯循环亮起程序怎么编
只要写p1口,它会自己向p口的其他针脚分配。

求编写流水灯程序,让(4,5)(3,6)(2,7)(1,8)循环显示
我默认你的灯是输入高电平亮的.控制灯的IO口是P1 unsigned char table = {0x18,0x24,0x42,0x81};for(int i=0;i<4;i++){ P1 = table[i];delay_ms(20);} 我用的是51单片机的写法,如果你用的是其他型号的单片机随便改一下就OK了。那个delay_ms()函数你应该没压力的。。

怎样用单片机做一个简单的流水灯?
以此类推,直到最后一个LED灯亮起为止。最后,我们需要在程序中定义delay函数,以便实现LED灯的亮灭延迟。这个函数可以通过使用while循环来实现,需要注意的是,在实际应用中,需要根据不同的单片机型号和硬件环境来进行相应的调整和修改。单片机流水灯的定义 单片机流水灯是一种常见的电子装置,通过单片机控制...

一个c语言程序关于10个led流水灯的
这是正确程序 ,望采纳。最好采用低电平触发 ,否则,单片机在上电的瞬间所有的LED灯会闪一下。include <reg52.h> include <intrins.h> void Delay10ms(unsigned int c);main(){ unsigned char i;while (1){ P0=0x00;P2=0x00;while(1){ P2 = 0x02;Delay10ms(50);P2 = P2 >>1...

单片机流水灯汇编程序看不懂,求解释...
ORG 000H \/\/定位,使程序放在0000H处 MOV P1,#0FFH \/\/使P1口全为高电平,八个灯全灭 L034: MOV A,#0FEH \/\/11111110B值送入A,只使P1.0为低电平 L033: MOV P1,A \/\/将A值送出P1口,只有D1亮 LCALL SE19 \/\/调用延时子程序(决定每个灯亮的时间长度)\/\/ {可在此...

林芝县17317039924: 单片机流水灯程序 16 -
殳奋双成: #include#include void delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } } main() { unsigned char LED; LED = 0xff; P0 = LED; while(1) { delayms(1000); LED = LED<<1; //循环右移1位,点亮下一个LED if(LED==0x00) { LED=0xff; } P0 = LED; } }

林芝县17317039924: 急求16盏LED的流水灯的C程序,可以加分 -
殳奋双成: #include<reg52.h>#include<intrins.h> void delay1ms(unsigned int i) { unsigned char j; while(i--) { for(j=0;j<115;j++) //1ms基准延时程序 { ; }} } void main() { P0=0xfe; P1=0x7f; // 0111 1111 while(1){ P0=_crol_(P0,1); P1=_cror_(P1,1); delay1ms(500); } } 哪里不懂的可以来追问我!

林芝县17317039924: 单片机16个流水灯c语言编程问题 -
殳奋双成: 程序基本没大错误,你这个程序执行一次就结束了,要想程序实现无限循环的从P0口到P2口又回到P0口,只需稍加改动. 在主函数定义局部变量的下面加: while(1) {在程序最后加: }

林芝县17317039924: 8051单片机实现16个流水灯的功能 -
殳奋双成: 方法有很多,以下是用最基础的方法写的. LOOP:MOV P1, #0FEH;//点亮P1口第一个灯;LCALL DELAY;MOV P1, #0FDH;LCALL DELAY;MOV P1, #0FBH;LCALL DELAY;MOV P1, #0F7H;LCALL DELAY;MOV P1, #0EFH;LCALL ...

林芝县17317039924: 用两组I/O口控制16个流水灯的C51程序 -
殳奋双成: 数组可以,直接也可以 数组的话,比如定义个数组,uchar led[]={0xfe,0xfd,0xfb,0x07………………}; for(i=0;i<8;i++) { P0=led[i]; delayms(1000) } 直接的话,同样的道理,只是代码比较多一些,每次重新赋值一次P0都需要延时一下. 更简单的程序...

林芝县17317039924: 急求一个51单片机流水灯(16个灯)设计电路图和汇编程序!!
殳奋双成: 流水灯还要什么电路图?阴极随便接2 个IO口,阳极串一小电阻(320~510)到+5V . ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#8 MOV A,#0FEH DISP: MOV P0,A ACALL DLY200 RL A DJNZ R0,DISP MOV R0,#8 MOV P0,#0FFH ...

林芝县17317039924: 51单片机8位流水灯8种变化程序 -
殳奋双成: 第一种:1个LED发光,循环右移. 第二种:2个LED发光,循环右移. 第三种:3个LED发光,循环右移. 第四种:4个LED发光,循环右移.再改成左移,就又有四种. 这就有八种了.一边移动,一边闪烁; 再改变一下速度;这能有多少种了?

林芝县17317039924: 求ATmega16流水灯程序 -
殳奋双成: /******************************************* 文件:sld.C 环境:编译为ICC AVR6.25A,仿真为AVR Studio4.14硬件:ATMEGA16芯片 日期:2008年12月10日功能:驱动开发板上的LED.流水灯 备注:/******************************************/#include...

林芝县17317039924: 51单片机 8盏花样流水灯 -
殳奋双成: 谁能帮我编一个类似流水灯的程序具体要求如下:AT89C51的P1、P3口接16盏copyLED灯,P2.2口接按键(用知于LED显示模式的改变).利用C语言编程实现LED灯的左移、右移、闪烁等的花样显示(最好6种花样以上).至于亮灭的时间间隔不做要求肉眼能看到“流水效果”就好.万分感道谢!实在是16盏的不好找网上的参考太少了,8盏的到很多....

林芝县17317039924: 关于10个灯流水灯的C语言程序 -
殳奋双成: #include<reg51.h> #define uint unsigned int void delay(uint x) {while(x--); } void main(void) {P0 = 0x01; //led0先亮,其他都不亮while(1){delay(100000); //调用延时函数P0 = P0 << 1; //第一次循环,led1亮,其他都不亮if(P0 == 0x00) //全部移出P0 = 0x01;} }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网