用proteus软件 仿真LED数码管显示HELLO

实验内容

一、实验要求

1.P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能。P3.2(INT0)作为按钮输入口构成一个“0#~#7”的8个按钮和8个LED的显示按钮电路,系统复位时,显示“HELLO-- ”。

2.画出AT89C51实现上述功能的完整电路图,包括微控制器电源、复位电路、晶振电路和控制电路;

3.完成全部程序和电路调试工作;

二、实验目的

1.了解八段共阴极LED工作动态显示原理;

2.掌握微控制器LED工作动态显示的方法;

3.掌握LED显示和按键输入联合控制的方法。

三、设计提示

1.可采用2个4位LED数码管;

四、主要元件

序号

元件名称

元件规格

所在元件库

所在工具模型

1

微控制器

AT89C51

Microprcessor

Component mode

2

按钮

BUTTON

Switchs &Relay

Component mode

3

晶振

CRYSTAL

Miscellaneous

Component mode

4

发光二极管

LED-RED

Optoelectronics

Component mode

5

电容

CAP

Capacitors

Component mode

6

电解电容

CAP-ELEC

Capacitors

Component mode

7

电阻

RES

Resistors

Component mode

8

数据锁存器

74HC573

TTL74HC series

Component mode

9

共阴极LED

7SEG-MPX8-CC

Optoelectronics

Component mode

10

电源

POWER

Terminals mode

11

GROUND

Terminals mode

12

电源输入端

SIL-100-02

connectors

Component mode

实验电路原理图

实验过程】(程序流程图和代码)

+------------------------------------------------+

|                    开始                        |

+------------------------------------------------+

                         |

                         v

+------------------------------------------------+

|                初始化程序 (ORG 0000H)          |

|                AJMP MAIN                       |

+------------------------------------------------+

                         |

                         v

+------------------------------------------------+

|                主程序 (ORG 0100H)              |

|                MAIN:                           |

|                MOV SP, #5FH                    |

|                MOV 50H, #76H                   |

|                MOV 51H, #79H                   |

|                MOV 52H, #38H                   |

|                MOV 53H, #38H                   |

|                MOV 54H, #3FH                   |

|                MOV 55H, #40H                   |

|                MOV 56H, #40H                   |

|                MOV 57H, #00H                   |

|                MOV R0, #50H                    |

|                MOV R1, #01H                    |

+------------------------------------------------+

                         |

                         v

+------------------------------------------------+

| 循环标签 HERE:                                 |

|                ACALL DISP                      |

|                AJMP HERE                       |

+------------------------------------------------+

                         |

                         v

+------------------------------------------------+

|                显示子程序 DISP:                |

|                MOV P0, #0FFH                   |

|                SETB P2.7                       |

|                CLR P2.6                        |

|                CLR P2.7                        |

| LD0:           MOV P0, @R0                    |

|                SETB P2.6                       |

|                MOV A, R1                       |

|                CPL A                           |

|                CLR P2.6                        |

|                SETB P2.7                       |

|                MOV P0, A                       |

|                ACALL DELAY                     |

|                INC R0                          |

|                CJNE R0, #58H, GOON             |

|                MOV R0, #50H                    |

| GOON:          MOV A, R1                       |

|                RL A                            |

|                MOV R1, A                       |

|                RET                             |

+------------------------------------------------+

                         |

                         v

+------------------------------------------------+

|                延时子程序 DELAY:               |

|                MOV R7, #240                    |

| 循环标签 LOOP:                                 |

|                DJNZ R7, LOOP                   |

|                RET                             |

+------------------------------------------------+

代码:

ORG      0000H

                 AJMP     MAIN

                 ORG       0100H

MAIN:      MOV       SP,   #5FH

                 MOV       50H, #76H

                 MOV       51H, #79H

                 MOV       52H, #38H

                 MOV       53H, #38H

                 MOV       54H, #3fH

                 MOV       55H, #40H

                MOV       56H, #40H

                MOV       57H, #00H

                MOV            R0,   #50H

                MOV            R1,    #01H        ;存放位码

HERE:              ACALL      DISP

                AJMP       HERE

               

;                SETB        PSW.3     ;PSW.3=RS0

DISP:                MOV            P0,#0FFH

                SETB        P2.7

                CLR            P2.6

                CLR            P2.7

LD0:             MOV            P0, @R0

                SETB        P2.6

                MOV            A,R1

                CPL            A

                CLR        P2.6

                SETB    P2.7

                MOV           P0, A            ;给位码

                ACALL    DELAY       

                INC        R0

                CJNE    R0,#58H,GOON

                MOV    R0,#50H

GOON:                MOV        A,R1

                RL        A

                MOV        R1,A

                  RET

                  DELAY:    MOV    R7,#240

                  LOOP:            DJNZ    R7,LOOP

                  RET

                

        END

实验后完成:实事求是,正确计算

数据处理与结果讨论】(记录实验中遇到的问题及解决方案.)

1 调试过程中遇到的问题及其解决办法

问题1:复位电路始终呈现高电平

解决:调节接地电阻,使其在开关断开时不会导通,至于担心复位导通时电流过大,不妨设置按键支路的电阻,不仅使电容有办法释放热量,也能保证端口呈现高电平,注意不能过大,否则会被施密特触发器误读为低电平。

问题2:外部中断如何实现显示切换

解决:添加外部中断,通过cjne 指令实现条件转移,让一个寄存器完成数值比较,从而在跳转到不同的查表。

问题3:程序逻辑出现错误,导致程序不能按照预期顺序执行或者显示。解决方法:通过绘制流程图或者逐步执行代码,分析程序的执行流程,找出逻辑错误的根源,逐步改进代码。

问题3:在使用延时和定时器时,可能出现延时不准确或者定时器不工作的问题。解决方法:使用仿真器或者调试工具观察定时器和延时计数器的值,确认是否达到预期的计时和延时效果,调整参数和算法以提高精确度。

实验后完成:分析合理,善于思考

分析讨论题及实验心得

1显示控制

  • 理解数码管的显示原理以及如何使用段码和位码来控制数码管的显示。通过这个实验,我了解到如何利用汇编语言中的寄存器和指令来实现数码管的动态扫描显示。

 2 延时程序

  • 延时程序是控制程序执行速度的常用方法。通过编写延时子程序,我学会了使用循环和 DJNZ 指令来实现精确的时间延迟。

  3调试与验证

  • 在编写代码的过程中,反复调试和验证是必不可少的步骤。通过仿真器和实际硬件的测试,我能够发现并修正代码中的错误,从而确保程序按预期运行。

4逻辑思维与分析能力

  • 在设计和实现程序的过程中,逻辑思维和分析能力非常重要。通过绘制流程图和分解问题,我能够更好地理解和实现复杂的程序逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值