求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 \/\/调用延时子程序(决定每个灯亮的时间长度)\/\/ {可在此...
殳奋双成: #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;} }