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

用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
我怎么感觉像是绕口令

怎么写一个开关开关开,就显示八个流水灯闪烁,开关关八个流水灯全灭的...
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 ...

怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮...
w(1); P1_7 = 0; w(0); P1_7 = 1;} }

...第一个开关控制八个流水灯全亮,第二个开关控制八个流水灯全灭...
TR0=1;} }

单片机怎么代码编写“P0口所接8个灯实现流水灯循环。P1.0所接开关按下...
用汇编编程如下:ORG 0000H LJMP MAIN MAIN:ORG 0100H MOV A ,#80H ; 高电平亮灯。如低电平亮灯,改成#7FH ;;正向循环 ZXH :MOV P0 , A RR A LCALL S50MS ; 延时50MS JB P1.0 , FXH LJMP ZXH ;;反向循环 FXH :MOV P0 , A...

8个LED循环点亮,延时程序
;实验目的:本程序主要实现一个简单的流水灯程序 ;即轮流点亮C口的8个灯(先点亮RC0,再熄灭RCO点亮RC1。。。);硬件要求:拨码开关S2全部置ON。include ;调用头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ;芯片配置字,...

用c语言编写一个程序,要求用3个开关控制8个灯,每个开关单独闭合时实现...
就是说随便闭合一个开关都会出现不同的流水灯模式,例如,开关1闭合实现八亮八灭交替显示,开关2实现1.3.5.7.亮,2.4.6.8灭交替显示,...用p3.2-p3.4三个端口接开关,p1.0-p1.7接... 就是说随便闭合一个开关都会出现不同的流水灯模式,例如,开关1闭合实现八亮八灭交替显示,开关2实现1.3.5.7.亮,2.4.6.8灭交替...

利用单片机、1个开关、8个LED发光二极管(水平排列)和定时器,实现开关控 ...
1 采用定时器定时25毫秒 启动定时器工作 2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20)3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就...

单片机编程:8个流水灯每隔一秒亮一个,用中断的方式。求完整编程啊...
EA=1; \/\/总中断打开 ET0=1; \/\/定时器中断打开 TR0=1; \/\/定时器开关打开 } \/ 函数名称 : Timer0_isr(void) interrupt 1 using 1 函数功能 : 定时器中断程序 \/ void Timer0_isr(void) interrupt 1 using 1 { TH0=0x00; \/\/重新赋值,方式1是16位计数器,不能硬件重装...

单片机c语言编了个流水灯,用按键怎么实现它暂停。
{ Flag1 = keyscan();if(Flag1==1)(Flag2=~Flag2); \/\/如果一旦检测到一次按键扫描就把标志位2 打开;再次就关闭;if(Flag2==1)\/\/ 如果标志位打开就开始流水灯 { temp=0x01;for(i=0;i<8;i++) \/\/8个流水灯逐个闪动 { P1=~temp;delay(100); \/\/调用延时函数 temp<<=1;} } ...

求大神写一个程序,两个开关控制8个流水灯,按下第一个开关从左向右流水...
P1口接8个流水灯,用两个开关K1和K2控制流水灯的方向,仿真图如下。

相似回答