如何用汇编语言写一个循环彩灯的程序,采用定时器方式1工作
关注:120答案:2信息版本:手机版
解决时间 -01-09 23:07
遮云壑
-01-09 14:42
由89C51内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化花样可自行设计。例程给出的变化花样为:①L1、L2、…L8依次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。
最佳答案
詩光轨車
-01-09 16:01
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#0
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
MOV A,R0
CJNE A,#18,T001
MOV R0,#0
T001:
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV P1,A
INC R0
RETI
LEDTAB:
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
DB 00H,0FFH
END
全部回答
1楼夜风逐马
-01-09 17:27
unsigned char lights = 0; //lights到各位分别表示p1.0~p1.7
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);
}
我要举报
如以上问答内容为色情/暴力/低俗/不良/侵权等信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯