单片机 三个按键独立控制三个led灯 汇编语言

单片机 三个按键独立控制三个led灯 汇编语言,第1张

keyp30: clr p22 ;灭掉 p22

keyp300: jb p30,keyp31 ;如果p30 为高,则灭掉p20

setb p20 ;点亮 p20

ajmp keyp311

keyp31: clr p20 ;灭掉 p20

keyp311: jb p31,keyp32 ;如果p30 为高,则灭掉p21

setb p21 ;点亮 p21

ajmp keyp322

keyp32: clr p21 ;灭掉 p21

keyp322: jb p30,keyp30 ;如果p30 为高,则灭掉p22

setb p22 ;点亮 p22

ajmp keyp300

简单的谢了一下,你就当学习用吧; 你的电路设计不合理,按键和led都需要上拉,才可正常;

满意的话赞一个,呵呵

     ORG   0000H

     JMP   BEGIN

     ORG 0030H

TABLE:      ; 共阴极数码管显示代码表

          DB    3FH,06H,5BH,4FH,66H ;01234

          DB    6DH,7DH,07H,7FH,6fh ;56789

BEGIN:  MOV   R4,#0

        MOV   A,R4

AGAIN:  MOV   DPTR,#TABLE

        MOVC  A,@A+DPTR

        MOV   P1,A

LOOP1:  MOV   A,P3

        CPL   A

        JZ    LOOP1

LOOP2:  RRC   A

        INC   R4

        JNC   LOOP2

        MOV   A,R4

        MOVC  A,@A+DPTR  ;找到相应位显示代码

        MOV   P1,A

        SJMP  BEGIN

        END

你这没有给出原理图,数码管和按键是怎么接的?是仿真实现吗,下图是仿真图,用了四位一体的共阴数码管,4个按键在P34~P37上。

仿真结果,你要是仿真,就按这个仿真图画,程序就完全适用。如果是实物开发板,就是根据开发板,适当修改程序了。

汇编程序如下

S1  BIT P34

S2  BIT P35

S3  BIT P36

S4  BIT P37

DISM1 EQU  31H

DISM2 EQU  32H

DISM3 EQU  33H

DISM4 EQU  34H

START:MOV  R0,#7FH

CLEAR:MOV  @R0,#0

DJNZ R0,CLEAR

MAINP:ACALL DISUP;主程序

TEST1:JB   S1,TEST2

ACALL DELK4

JB   S1,TEST2

INC  DISM1

MOV  A ,DISM1

CJNE A ,#10,CMPM1

CMPM1:JC   WAIT1

MOV  DISM1,#0

WAIT1:JNB  S1 ,$

AJMP MAINP

TEST2:JB   S2,TEST3

ACALL DELK4

JB   S2,TEST3

INC  DISM2

MOV  A ,DISM2

CJNE A ,#10,CMPM2

CMPM2:JC   WAIT2

MOV  DISM2,#0

WAIT2:JNB  S2 ,$

AJMP MAINP

TEST3:JB   S3,TEST4

ACALL DELK4

JB   S3,TEST4

INC  DISM3

MOV  A ,DISM3

CJNE A ,#10,CMPM3

CMPM3:JC   WAIT3

MOV  DISM3,#0

WAIT3:JNB  S3 ,$

AJMP MAINP

TEST4:JB   S4,MAINP

ACALL DELK4

JB   S4,MAINP

INC  DISM4

MOV  A ,DISM4

CJNE A ,#10,CMPM4

CMPM4:JC   WAIT4

MOV  DISM4,#0

WAIT4:JNB  S4 ,$

AJMP MAINP

DISUP:MOV DPTR,#TABLE;显示子程序

MOV R0  ,#DISM1

MOV R2  ,#0FEH

DISB1:MOV P2  ,R2

MOV A   ,@R0

MOVC A  ,@A+DPTR

MOV P0  ,A

MOV A   ,R2

RL  A

MOV R2  ,A

ACALL DELAY

INC R0

CJNE R0 ,#DISM4+1,DISB1

RET

DELK4:MOV  R6 ,#10

SJMP DELA1

DELAY:MOV  R6 ,#2

DELA1:MOV  R7 ,#150

DJNZ R7 ,$

DJNZ R6 ,DELA1

RET

TABLE:DB 3FH,06H,5BH,4FH,66H;共阴段码表

DB 6DH,7DH,07H,7FH,6FH

END

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P11==0) light_water(); 然后:

void light_water()

{

num=1;

for(a=0;a<8;a++)

{

P11=num<<1;

delay(1000); //延时;

keyboard();//执行时又不停扫描键盘函数;

}

}

这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了。

一键多功能按键识别技术 1.实验任务 开关K1接在P32管脚上,在AT89S51单片机的P00端口接有1个发光二极管,上电的时候,L1接在P10管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。 2.系统板上硬件连线 把“单片机系统”区域中的P32端口连接到“独立式键盘”区域中的K1端口上;把P00连到L1上 3程序设计方法 (1. 设计思想由来 在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。 (2. 设计方法 从上面的要求我们可以看出,L1到亮灭受开关K1来控制,我们给L1亮灭定义出不同的ID号,当L1在亮时,ID=0;当L1在灭时,ID=1;分别给出不同的ID号我们就能够完成上面的任务了 4汇编程序: ID EQU 30H K1 BIT P32 L1 BIT P00 ORG 0000H CLR P17 MOV ID,#00H START: JB K1,REL ;K1没闭合转 LCALL DELAY10MS ;K1闭合,延时消抖动 JB K1,REL :再判断 INC ID MOV A,ID CJNE A,#02,REL MOV ID,#00H REL: JNB K1,$ ;等待开关d起 MOV A,ID CJNE A,#00H,IS0 ;判断相应ID CLR L1 :ID=0,灯亮 LCALL DELAY光 ;延时 SJMP START IS0: CJNE A,#01H,START; SETB L1 LCALL DELAY SJMP START DELAY10MS: MOV R6,#20 ;延时10MS子程序 LOOP1: MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET DELAY: MOV R5,#20 ;延时20MS子程序 LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2 RET END

请采纳答案,支持我一下。

以上就是关于单片机 三个按键独立控制三个led灯 汇编语言全部的内容,包括:单片机 三个按键独立控制三个led灯 汇编语言、利用简单键盘模块中提供的8个独立按键实现,当K1按下时显示1,当K2按下时显示2,以此类推,、80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0变化的编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9692261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存