在实验板上写的,放心用吧希望对你有帮助
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
方法一:查表法
;;;;;;;;;;;;;;;;;;;;;;;;;;
;作者:w418781840200865 /
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
;; CLR P20;打开灯开关
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断450=200MS
SETB EA
SETB ET0 ;开中断
SETB TR0
WQ: LCALL LENG ;调用
SJMP WQ
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;02S到否否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;;;;;
LENG: MOV R1,#0
MOV DPTR,#TAB
LOP: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0EEH,LOP
TAB: DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H;左渐亮
DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH ;右渐亮
DB 7EH,3CH,18H,00H; 两边点亮值
DB 0FFH,00H,0FFH,00H,0FFH,0EEH,;闪烁两次,0EEH为结束标志
RET
END
;;;;;;;;;;;;;;;;;;;;;
方法二:不知道法,呵呵
;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序功能:简单彩灯控制系统
;作者:w418781840200865 /
;;;;;;;;;;;;;;声明区;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断450=200MS
SETB EA
SETB ET0 ;开中断
SETB TR0
WQ: LCALL LED1 ;调用
LCALL LED2
LCALL LED3
SJMP WQ;;不断循环
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;02S到否否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;LED子程序区;;;;;;;;;;
;;;;左移渐亮;;;;;;;;;;;
LED1: CLR C ;灯低电平亮
MOV A,#0FFH
LOP1: RLC A
MOV LED,A
JNB FLAG,$ ;02不到,等待
CLR FLAG ;清0,
CJNE A,#0,LOP1 ;不全亮,返回
RET
;;右移渐亮;;;;;;;
LED2: SETB C
LOP2: RRC A
MOV LED,A
JNB FLAG,$
CLR FLAG
CJNE A,#0FFH,LOP2
RET
;;;;;两边亮;;;;;
LED3: MOV R1,#0
MOV DPTR,#TAB
LOP3: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0,LOP3
;;;闪烁;;;;;;;;;
MOV R2,#2
LOP4: CPL A
MOV LED,A
JNB FLAG,$
CLR FLAG
DJNZ R2,LOP4;;
TAB: DB 7EH,3CH,18H,00H; 两边点亮值
RET
END
unsigned char lights = 0; //lights到各位分别表示P10~P17
int i=0;
while (1)
{
//①L1、L2、…L8依次点亮
lights = 0x01;
for (i=0; i<7; i++)
{
delay(500);
lights = lights << 1;
}
delay(500);
//②L1、L2、…L8依次熄灭
lights = 0xfe;
for (i=0; i<7; i++)
{
delay(500);
lights = (lights << 1) + 0x01;
}
delay(500);
//③L1、L2、…L8全亮
lights = 0xff;
delay(500);
//全灭
lights = 0x00;
delay(500);
}
可中断控制循环彩灯实验原理是电路控制是通过三极管,有极性电容,电阻来控制发光二极管来实现的。根据相关资料查询显示:控制按钮选I01按一次开始,再按一次停止,停止后彩灯全灭。程序中包括了子程序的调用及中断程序的执行,在子程序中建立了初始化状态并建立于开通了中断事件。
FL1 PBO5 PBO4 FL2 PBO3 PBO2 FL3 PBO1是什么?说明再详尽点,帮你做。(1)用两个开关作为分组移动方式控制开关,其状态组合成四种控制方式:
00——1个彩灯一组;
01——2个彩灯一组并行移动;
10——2个彩灯一组串行移动;
11——3个彩灯一组串行移动;说通俗一点啊
以上就是关于用89S51单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管程序全部的内容,包括:用89S51单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管程序、如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。、可中断控制循环彩灯实验原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)