永发信息网

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

答案:5  悬赏:80  手机版
解决时间 2021-04-06 07:44
  • 提问者网友:火车头
  • 2021-04-05 23:32
用C语言编写一个花样流水灯的程序及此程序的流程图
最佳答案
  • 五星知识达人网友:由着我着迷
  • 2021-04-06 00:40
设一个标志位flag, 以标志位的5种状态对应发光二极管的5种工作状态,如当flag=1;发光二极管工作在1,当flag=2;发光二极管工作在2,......!然后根据定时器定时功能,5秒到,刷新flag的值,程序如下;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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
/////////////////
///////////////////////////////

//========声明区===========
#include
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楼网友:山君与见山
  • 2021-04-06 04:26
"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,loop1MOV 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,R0DJNZ 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"
  • 2楼网友:英雄的欲望
  • 2021-04-06 03:00
杜娘找 心型流水灯
~
~
~
  • 3楼网友:行路难
  • 2021-04-06 02:27
如果需要的话 ,我花几分钟帮你做个!!
  • 4楼网友:舍身薄凉客
  • 2021-04-06 01:11
#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;
}

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

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

}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯