;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;/程序功能:定时5S到切换LED显示状态
;作者:w4187818402008529 /
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 ;中断10050=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显示状态
作者:w4187818402008529 /
//========声明区===========
#include <reg51h>
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片stm8s103
4片74HC164
32个贴片LED
4个排阻
不知道你会不会用stm8s系列的单片机
不会的话,给你也没用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)