单片机--LED 数码管实验

  1. 实验目的和任务

目的:利用“模块化单片机教学实验平台”,加深对单片机与LED数码管的接口电路设计以及程序设计的理解。

任务:完成单片机与LED数码管的接口电路设计以及程序设计。

  1. 实验内容

使用AT89S52单片机的I/O口控制两个LED数码管,让两个LED数码管显示的数字每隔1秒递增一次(即从00开始,隔一秒变为01,再隔一秒变为02,……,09,10,11,……,99,00,01,……,如此反复)。显示方式为动态显示,直接片选实现。(LED数码管为共阴极数码管)

  1. 实验过程和结果

373电路图:

电路图

注:373锁存芯片用来增加驱动能力!

动态数码管电路图:

电路图

注意:只用到右边两个LED数码管。

硬件连线:

CPU_CORE_51

MAIN_BOARD

P3:P2.0-P2.1

J15:DIG0-DIG1

P2:A0-A7

J1:LED_SA-LED_DP

注意:实验箱的AT89S52单片机的晶振频率为11.0592MHz!

实验结果图

  1. 实验心得

通过实验学习对计时器的使用更加熟练,对代码的理解更加深刻,对设计程序的流程有了一个大致了解,在不停的积累知识,通过自己的练习,能够自己编写程序,再到具体方法的实现,中间的路很长,通过在不断地学习中,我不断地提高自己,丰富自己。

  1. 附录(代码)

ORG 0013H                 ;主程序入口

         RESET:

AJMP MAIN

         ORG 000BH                ;计时器T0的入口地址

         AJMP IT0P

         ORG 0100H

MAIN: MOV DPTR,#TABLE ;实现查表功能

MOV R0,#00H

MOV SP,#60H           ;堆栈

               MOV R5,#0AH           ;给R5赋值为10

             MOV TH0,#0D8H         ;实现计数1s的初值

               MOV TL0,#0F0H

               MOV TMOD,#01H        ;让T0工作在方式1

               SETB ET0               ;开T0中断

               SETB EA                ;开总中断

               SETB TR0               ;T0开始计数

               MOV P0,#00H            ;让p0管脚为零

MOV P2,#00H            ;让p2管脚为零

        MOV R4,#00H            ;

S2:

DJNZ R4,S3              ;对R4进行判断,判断是否间隔为1s

INC R0                  ;秒数加一

MOV R5,#0AH           ;将R5给为10

S3:

MOV R1,#10             ;将R1赋值为10

MOV A,R0              ;将取值地址给A

MOV B,R1              ;将R1中的内容先给B保存

DIV AB                 ;让AB相除,其中十位在A,个位在B

MOV P2,#01H            ;将P2

MOV P0,A              ;将取到的第一数就是0给段选P0

LCALL DELAY          ;调用延时程序

MOV A,B                ;将个位数字给A

MOVC A,@ A+DPTR     ;将下一个数字给A

MOV P2,#02H            ;将两个位选为设置为1

MOV P0,A               ;输出管脚数字

       CJNE R0,#99,S2          ;判断是不是循环100次

       MOV R0,#00H            ;相等则归零

       LJMP S2                 ;跳转S2

DELAY: MOV R5,#60        ;延时子程序,延时1.2ms

         DEL0:  MOV R6,#1

         DEL1:  MOV R7,#20

DEL2:

DJNZ R7,DEL2

DJNZ R6,DEL1

DJNZ R5,DEL0

RET

IT0P: MOV TL0,#0F0H       ;加载初值

                      MOV TH0,#0D8H

                      DJNZ R5,RTURN      ;判断R5是否为0,循环10次计时为1s

                      MOV R4,#01H          ;R4进行赋值

                      RTURN:RET               ;返回子程序

              TABLE:DB 3FH,06H,5BH,4FH,66H

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

        END

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜航一直在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值