怎么写一个开关开关开,就显示八个流水灯闪烁,开关关八个流水灯全灭的程序

用C51写的(8个流水灯接P1,开关接P3.2)

2个方案:
第一种:
/* 文件名:8bkey.asm?
* 功能:AT89S51单片机的P1接8个发光二极管接了8个开关,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
* 入口参数:无
* 出口参数:无
* 硬件说明:
* 1 接8位连接线。将led部份的数据口 JP32接到CPU部份的P0口JP51.
* 2 接8位连接线。将拨码开关的接口 JP40接到CPU部份的P1口JP44.
*/
ORG 00H ;定义当前位置为 00H,
START: JB P1.0,NEXT1 ;位-为1转移到 接口1第0位,NEXT1
CLR P0.0 ;清0 接口0第0位,
SJMP NEX1 ;短转移到 NEX1,
NEXT1: SETB P0.0 ;位-置1 接口0第0位,
NEX1: JB P1.1,NEXT2 ;位-为1转移到 接口1第1位,NEXT2
CLR P0.1 ;清0 接口0第1位,
SJMP NEX2 ;短转移到 NEX2,
NEXT2: SETB P0.1 ;位-置1 接口0第1位,
NEX2: JB P1.2, NEXT3 ;位-为1转移到 接口1第2位,NEXT3
CLR P0.2 ;清0 接口0第2位,
SJMP NEX3 ;短转移到 NEX3,
NEXT3: SETB P0.2 ;位-置1 接口0第2位,
NEX3: JB P1.3,NEXT4 ;位-为1转移到 接口1第3位,NEXT4
CLR P0.3 ;清0 接口0第3位,
SJMP NEX4 ;短转移到 NEX4,
NEXT4: SETB P0.3 ;位-置1 接口0第3位,
NEX4: JB P1.4,NEXT5 ;位-为1转移到 接口1第4位,NEXT5
CLR P0.4 ;清0 接口0第4位,
SJMP NEX5 ;短转移到 NEX5,
NEXT5: SETB P0.4 ;位-置1 接口0第4位,
NEX5: JB P1.5,NEXT6 ;位-为1转移到 接口1第5位,NEXT6
CLR P0.5 ;清0 接口0第1位,
SJMP NEX6 ;短转移到 NEX6,
NEXT6: SETB P0.5 ;位-置1 接口0第1位,
NEX6: JB P1.6,NEXT7 ;位-为1转移到 接口1第6位,NEXT7
CLR P0.6 ;清0 接口1第6位,
SJMP NEX7 ;短转移到 NEX7,
NEXT7: SETB P0.6 ;位-置1 接口0第6位,
NEX7: JB P1.7,NEXT8 ;位-为1转移到 接口1第7位,NEXT8
CLR P0.7 ;清0 接口0第7位,
SJMP NEX8 ;短转移到 NEX8,
NEXT8: SETB P0.7 ;位-置1 接口0第7位,
NEX8: SJMP START ;短转移到 START,
END ;END
第二种:先说硬件连接
将8个灯接到P1口的8根线法
灯的排列为
1 2 3 4
5 6 7 8
分别对应
p1_0 p1_1 p1_2 P1_3
p1_7 p1_6 p1_5 P1_4
闪亮程序
unsigned char m;
for(n=0;n<4;n++)
{
m=1<<n;//设第一行的灯 4次的值分别为1 2 4 8
m+=m<<4;//设第二行的灯
P1=m;
wait();//等待
}
依次亮
for(n=1;n<5;n++)
{
m=1<<n-1;//设第一行的灯 4次的值分别为2-1 4-1 8-1 16-1也就是 1 3 7 15
m+=m<<4;//设第二行的灯
P1=m;
wait();//等待
}
全亮是P1=0XFF;
全灭是P1=0X00;
自己组合。追问

虽然你并没有解决我直接的问题,但是看到就你回答我别人都没有回答我我还是要给你个赞(采纳)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-10
我怎么感觉像是绕口令