用C语言编写一个花样流水灯的程序及此程序的流程图

如题所述

设一个标志位flag, 以标志位的5种状态对应发光二极管的5种工作状态,如当flag=1;发光二极管工作在1,当flag=2;发光二极管工作在2,......!然后根据定时器定时功能,5秒到,刷新flag的值,程序如下;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;/*程序功能:定时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 ;中断100*50=5S
SETB EA
SETB ET0
SETB TR0
SJMP $
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;5S到否?否,返回
INC FLAG ;到,标志加1
MOV A,FLAG
CJNE A,#05,L1 ;扫描5种状态了否?
MOV FLAG,#01H ;是,归0,重新开始
;;;;;;;;;切换程序;;;;;;;;;;;;
L1: CJNE A,#01H,L2 ;判断是否是状态1?否,转判断2
LCALL LED1 ;是,调有状态1
SJMP LOOP ;返回
L2: CJNE A,#02H,L3 ; 以下跟上面判断相同
LCALL LED2
SJMP LOOP
L3: CJNE A,#03H,L4
LCALL LED3
SJMP LOOP
L4: CJNE A,#04H,L5
LCALL LED4
SJMP LOOP
L5: CJNE A,#05H,LOOP
LCALL LED5
LOOP: RETI
;;;;;;LED子程序区;;;;;;;;;;
LED1: RET
LED2: RET
LED3: RET
LED4: RET
LED5: RET
/////////////////
///////////////////////////////
/*程序功能:定时5S到切换LED显示状态.
作者:w418781840.2008.5.29 */
//========声明区===========
#include <reg51.h>
unsigned char count=0;
unsigned char flag=1;
void led1(void);
void led2(void);
void led3(void);
void led4(void);
void led5(void);
//=========函数=========
main()
{ TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ switch(flag)
{ case 1:led1();break;
case 2:led1();break;
case 3:led1();break;
case 4:led1();break;
case 5:led1();break;
}
}

}
//==========中断服务============
void timer0(void) interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++count==100)
{ count=0;
flag++;
if(flag==5)
flag=1;
}

}
//========5种状态函数区=========
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-19
#include<reg51.h>
#define uchar unsigned char
uchar num_code[]={0,1,2,3,4,5,6,7,8,9,1,3,5,7,9,0,2,4,6,8,0,1,2,3,4,5,6,7,0,1};
sbit add_1ms=P1^0;
void delay_nms(unsigned int n)//延迟n毫秒
{

uchar i;
while(n!=0)
{
for(i=250;i>0;i--);
n--;
}
}

main()
{
uchar k;
unsigned int m=500; //一开始0.5s
while(1)
for(k=0;k<30;k++)
{
if(add_1ms==0) //到2s的时候,间隔时间回复为0.5s
{
if(m==2000)
{
m=500;
}

else m=m+100; //按一次按钮 间隔时间增加0.1s
}

P2=num_code[k] ;
delay_nms(m);

}

}本回答被网友采纳
第2个回答  2017-08-04
"ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV R0,#0FEH MOV R1,#4 loop1: MOV A,R0 MOV P1,A LCALL delay MOV A,R0 RL A RL A MOV R0,A DJNZ R1,loop1 MOV R0,#07FH MOV R1,#4LOOP2: MOV A,R0 MOV P1,A Lcall Delay MOV A,R0 RR A RR A MOV R0,A DJNZ R1,LOOP2 MOV R0,#0EFH MOV R2,#0F7H MOV R1,#10 MOV A,R0 ANL A,R2loop3: MOV P1,A ACALL DELAY MOV A,R0 RR A MOV R0,A MOV A,R2 RL A MOV R2,A ANL A,R0 DJNZ R1,LOOP3 SJMP $ DJNZ R4,$ DJNZ R3,D2 DJNZ R2,D1 RET DELAY: MOV R5,#10D2: MOV R6,#200D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET END"
第3个回答  2017-08-27
杜娘找 心型流水灯

~
~
~
第4个回答  2013-07-19
如果需要的话 ,我花几分钟帮你做个!!

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
for(i=0;i<8;i++) \/\/8个流水灯反向逐个闪动 { P1=~temp;delay(100); \/\/调用延时函数 temp>>=1;} temp=0xFE;for(i=0;i<8;i++) \/\/8个流水灯依次全部点亮 { P1=temp;delay(100); \/\/调用延时函数 temp<<=1;} temp=0x7F;for(i=0;i<8;i++) \/\/8个流水灯依次反向全部点亮...

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)_百度...
while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮 delay();P3=0xdf;\/\/第六个灯亮 delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮...

如何用c语言实现流水灯功能?
可以用for循环试试unsingned char i;for(i=0;i<5;i++)\/\/流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处...

用c语言编写流水灯。
define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水灯逐个闪动 { P2=~temp;delay(500); \/\/调用延时函数 temp<<=1;} temp=0x80;for(i=0;i<8;i++) \/\/8...

C语言编程:流水灯 要求:画三个圆,颜色自选,每隔一段时间变换一次_百度...
include <stdio.h> include <conio.h> include \/\/颜色定义 0:黑色,1:兰色,2: 绿色,3 :青色,4:红色,5: 洋红,6:棕色,7:淡灰,\/\/ 8: 深灰,9:深兰,10:淡绿,11:淡青,12:淡红,13:淡洋红,14:黄色 \/\/白色背景,不能再选,可以根据需要自己修改 void main(){ int ...

谁有这个关于c语言的流水灯程序?(比较简单的)
如果是流水灯 你使用一下程序会更好 简单 实现的功能是 P1 P3口的流水灯 循环闪动 你可以参照这个写..使用位控制 include "reg51.h"void main(){ unsigned int i=10;P1=0xfe;while(1){ while(--i)P1=(P1<<1) | 0x01;if(P1==0xff) P3 = 0x7f;while(P1==0xff){ while(--i)...

单片机流水灯c语言程序。灯按从左到右2468然后1357依次循环亮。速求...
include "REG52.H"\/\/ 显示花样流水灯编码 const unsigned char Expetr_ROM[] = { 0xFD, 0xF7, 0xDF, 0x7F, 0xFE, 0xFB, 0xEF, 0xBF } ;\/\/ 延时1ms void Delay_1ms(unsigned int Cnt){ unsigned int x, y;for(x = Cnt; x > 0; x--)for(y = 120; y > 0; y--);}...

C语言用一个按钮控制流水灯的编程求帮助啊??? 程序写下,谢谢
void deley(int i){int j;while(i--){ for(j = 0;j<115;j++);} } void INT0_srv(void) interrupt 0 { delay1ms(10);if(INT0==0){ flag = !flag;while(INT0 == 0);} } void main { while(1)if(flag == 0){ P1 = 0xfe;delay(100);P1 = 0xfd;delay(100);P1 =...

求一个用c语言编译的流水灯程序,要求灯从中间向两边亮
0x42,0x81};\/\/这是编码表 void main(){ int i=0;while(1)\/\/死循环 { for(i=0;i<4;i++)P1=t[i];\/\/取码,我用的P1口,你要用其他的端口你就把取出来的码送给你要用的端口 delay(5);} } void delay(z){ int a,i;for(a=0;a<z;a++)for(i=0;i<110;i++);} ...

求流水灯(一个灯从上往下依次点亮)和数码管(0000--9999)的C语言程序
h>#include <intrins.h> void sleep(int ma){ int i;for(;ma>0;ma--){ for(i=0;i<124;i++) {;} } } void main(){ P1=0xfe;for(;;){ sleep(10000);\/\/这里是因为我的软件运行速度较快,你可以改为1000就好了。P1=_crol_(P1,1);\/\/向左滚动一位 } } 这是流水灯的 ...

相似回答