"初学者单片机实验详解:闪烁灯实验详解,值得学习!延时程序设计方法揭秘!"

需积分: 0 7 下载量 67 浏览量 更新于2024-04-16 收藏 618KB DOC 举报
R4 START: MOV R7, #50 LOOP1: MOV R5, #255 LOOP2: DJNZ R5, LOOP2 DJNZ R7, LOOP1 DJNZ R6, START RET 在这段程序中,通过嵌套的循环来实现延时程序,使LED灯在不停地闪烁,达到实验的要求。 (2). 闪烁灯程序代码编写 通过上面的延时程序,我们可以编写出完整的闪烁灯程序代码: ORG 0000H MOV P1, #00H ;初始化 P1 端口为低电平 LOOP: MOV P1, #FFH ;点亮发光二极管 CALL DELAY ;调用延时程序 MOV P1, #00H ;熄灭发光二极管 CALL DELAY ;调用延时程序 SJMP LOOP ;循环 DELAY: MOV R7, #50 D1: MOV R6, #255 D2: DJNZ R6, D2 DJNZ R7, D1 RET 通过这段代码,我们可以实现LED灯的不停闪烁,从而完成闪烁灯的实验任务。 2. 数码管的显示 数码管是一种常用的数字显示元件,能够显示0-9的数字。在单片机实验中,我们可以通过控制数码管的发光二极管,来显示指定的数字。接下来我们将介绍数码管的显示实验。 实验任务 如图 4.2.1所示:通过按键开关 S4、S5 分别增加和减小一个 4 位的二进制数的值,并在数码管上显示相应的十进制数。 电路原理图 图 4.2.1 系统板上硬件连线 将“8 位按键”区域中的 S4 和 S5 两个按键与 P3.2、P3.3 两个端口相连接,同时将四位数码管和光栅管分别与 P0 和 P2 两组端口相连接。 程序设计内容 (1). 按键扫描程序设计 在实现按键功能之前,我们需要设计一个按键扫描程序,用来检测按键是否被按下。下面是一个简单的按键扫描程序设计: ORG 0000H MOV P3, #0FH ;设置 P3.0-P3.3 为输入端口 MOV R0, #00H MOV R1, #00H LOOP: MOV A, P3 ;将 P3 的输入状态移动到累加器 ANL A, #0FH ;只保留低四位 CJNE A, #0FH, ADD ;判断是否有按键按下 SJMP LOOP ADD: MOV R2, #00H INC R0 CJNE R0, #09H, NEXT ;判断是否递增到 9 MOV R0, #00H NEXT: MOV R3, #00H MOV A, #00H MOV A, R0 SWAP A MOV R4, A MOV P0, R4 ;设置数码管显示的值 CALL DELAY ;调用延时程序 SJMP LOOP DELAY: MOV R7, #50 D1: MOV R6, #255 D2: DJNZ R6, D2 DJNZ R7, D1 RET 在这段按键扫描程序中,我们通过循环检测 P3.0-P3.3 端口的输入状态,判断是否有按键被按下,并根据按键的情况来递增或递减一个二进制数,并将其转换为显示在数码管上的十进制数。 (2). 数码管显示程序代码编写 通过上面的按键扫描程序,我们可以编写出完整的数码管显示程序代码: ORG 0000H MOV A, #00H MOV R4, A MOV P0, R4 ;数码管显示初始值为 0 L1: CALL SCAN ;调用按键扫描程序 SJMP L1 SCAN: MOV P3, #0FH ;设置 P3.0-P3.3 为输入端口 MOV R0, #00H MOV R1, #00H LOOP: MOV A, P3 ;将 P3 的输入状态移动到累加器 ANL A, #0FH ;只保留低四位 CJNE A, #0FH, ADD ;判断是否有按键按下 SJMP LOOP ADD: MOV R2, #00H INC R0 CJNE R0, #09H, NEXT ;判断是否递增到 9 MOV R0, #00H NEXT: MOV R3, #00H MOV A, #00H MOV A, R0 SWAP A MOV R4, A MOV P0, R4 ;数码管显示的值 CALL DELAY ;调用延时程序 RET 通过这段代码,我们可以实现通过按键控制数码管显示的功能,实现了数码管的显示实验。 综上所述,通过对闪烁灯和数码管的实验讲解,我们可以看到单片机实验对于初学者来说具有很好的学习意义和实践价值。通过实际操作和程序设计,初学者可以深入理解单片机的工作原理和编程方法,为今后的学习和应用打下坚实的基础。希望初学者能够认真学习和实践,不断提高自己的单片机技能,实现更多有趣的实验和项目。