• 如何用计算机控制灯的亮和灭 > 硬件实验一 I/O控制实验
  • 硬件实验一 I/O控制实验

    免费下载 下载该文档 文档格式:DOC   更新时间:2010-12-27   下载次数:0   点击次数:4
    硬件实验一 I/O控制实验
    实验目的
    掌握基本IO输入输出操作指令;
    熟练运用keil环境对硬件接口进行调试.
    预习要求
    理解51单片机IO的输入、输出控制方式;理解P0、P1、P2、P3口做为普通的IO口有何区别.
    理解实现软件延时程序设计的延时时间估算;
    认真预习本节实验内容,设计出器件之间的实验连接线,自行编写程序,填写实验报告.
    实验设备
    计算机 1台;
    ZDGDTH-1型80C51实验开发系统 1套;
    2号导线 4条;
    8P数据线 1条.
    基础型实验内容
    8位逻辑电平显示的接口电路设计如图1-1所示,用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮.用8P数据线将D2区80C51/C8051F020MCU模块的 JD1(P1口)与A5区8位逻辑电平显示模块JD1A5相连.在Keil环境运行该程序,观察发光二极管显示情况.
    图1-1 8位八位逻辑电平显示接口电路
    ORG 0
    Loop: mov a, #0FEh
    mov r2,#8
    Output: mov P1,a
    rl a
    Acall Delay
    djnz r2,Output
    Ljmp Loop
    Delay: mov r6,#0 ;延时程序
    mov r7,#0
    DelayLoop: djnz r6,DelayLoop
    djnz r7,DelayLoop
    ret
    end
    实验现象及分析:通过该程序实现了发光二极管从右到左轮流循环点亮.程序中,首先对A附初值,点亮一盏灯,然后左移实现循环点亮,在该过程中需要调用延时程序从而实现延时,一共8个发光二极管当依次点亮后进行循环.
    8位拨动开关的接口电路设计如图1-2所示,假设采用P1口控制LED显示,P2口接收拨码开关的输入值,用8P数据线将D2区80C51/C8051F020MCU模块的 JD1(P1口)、JD1(P2口)分别与A5区八位逻辑电平显示模块JD1A5、C6区8位拨动开关模块JD1 C6相连.在Keil环境运行该程序,观察实验结果.
    图1-2 拨码开关接口电路
    ORG 0000H
    LL: MOV P2,#0FFH
    NOP
    MOV A, P2
    NOP
    MOV P1,A
    SJMP LL
    END
    实验现象及分析:该实验观察到通过C6区的K0-K7开关可以控制A5区的L0-L7发光二极管的亮灭.当开关向上拨时发光二极管点亮,而开关向下拨时发光二极管灭.程序中,首先将P2都设置为1,然后将P2口赋给A,再将A赋给P1,从而实现了用P2控制P1的功能.
    如图1-3所示,假设采用P1.0口控制外部LED,拨动开关控制外部中断,用二号导线将D2区80C51/C8051F020MCU模块的 P1.0、P3.2口分别与A5区八位逻辑电平显示模块的L0、C8区单次脉冲输出相连.并在Keil环境运行程序,观察实验现象.
    图1-3 外部中断及LED显示电路
    流程图为:
    源程序:
    ORG 0000H
    LJMP MAIN
    ORG 0003H
    LJMP INTERRUPT
    ORG 0030H
    MAIN: CLR P1.0
    MOV TCON,#01H
    MOV IE,#81H
    SJMP $
    INTERRUPT: PUSH PSW ; 保护现场
    CPL P1.0
    POP PSW ; 恢复现场
    RETI
    END
    实验现象以及分析:在该实验中可以观察到现象当按一次按钮就使其闪烁一次.程序中,主程序实现初始状态的设置、中断控制寄存器的设置、中断允许以及等待中断,首先清零,然后选择下降沿方式,最后允许外部中断;子程序实现保护现场、状态位取反以及输出、恢复现场、中断返回.
    在上述步骤中,如果改变中断的触发方式为电平触发方式,试改动程序,并在Keil环境运行程序,观察实验现象,说明实验结果.
    ORG 0000H
    LJMP MAIN
    ORG 0003H
    LJMP INTERRUPT
    ORG 0030H
    MAIN: CLR P1.0
    MOV TCON,#00H
    MOV IE,#81H
    SJMP $
    INTERRUPT: PUSH PSW ; 保护现场
    CPL P1.0
    POP PSW ; 恢复现场
    RETI
    END
    实验现象以及分析:在该实验中可以看到按一次按钮闪烁数次.程序中只要将TCON设置为00H,就可以改变为电平触发方式.
    关于双色LED
    双色发光二极管,即在一个LED发光二极管中是由二个单独的PN结构成,可通过控制达到简单的"彩色"显示效果.
    当发红光的PN结被点亮,发绿光PN结不点亮时,发光二极管发出的光显示为红色;
    当发红光的PN结不点亮,发绿光的PN结被点亮时,发光二极管发出的光呈绿色;
    当发红光和发绿光的PN结同时被点亮时,发光二极管发出的光呈橙色;
    当控制双色LED红、绿两个PN结流过不同比例的电流时,可以发出粉红、淡绿、淡黄、黄色等不同彩色来.
    双色LED连接电路
    设计型实验
    画出流程并设计程序实现8位逻辑电平显示模块的奇偶位的亮灭闪烁显示,闪烁间隔为1S.
    设计思路:首先将a附初值,使其奇位显示(或偶位),然后调用延时程序实现1s延时,使其循环从而实现该功能.

    ORG 000H
    LOOP:MOV A,#55H
    MOV R2,#8
    OUTPUT:MOV P1,A
    RL A
    ACALL DELX
    DJNZ R2,OUTPUT
    LJMP LOOP
    DELX:MOV R5,#20
    DEL :MOV R7,#200
    DEL1: MOV R6,#123
    NOP
    DEL2:DJNZ R6,DEL2 ;2*123=246ms
    DJNZ R7,DEL1 ;(246+1+1+2)*200+1+2=50.003ms
    DJNZ R5,DEL ;50.003*20 +1+2 =1003.06
    RET
    END

    实验现象:通过该程序的运行,实现了8位逻辑电平显示模块的奇偶位亮灭闪烁显示.
    设计硬件连接图,画出流程并设计程序实现当拨码开关K0往上拨时,实现设计型实验内容步骤①,否则LED全灭;当开关K1往上拨时,实现设计型实验内容步骤②,否则LED全灭;当K0、K1同时往上拨的时候,LED全亮.
    设计思路及流程:为实现通过k0k1控制led灯的亮灭,需要将其编码,分成四种情况.而每种情况假定为零时灭,为1时亮.可以将P2口传输到a,通过检测a的第零位和第一位的状态从而判断应该是何种情况.该实验的硬件连接和例题2相同,即用8p数据项将d2区的jd1(p1)/jd2(p2)分别于a5区八位逻辑电平显示模块jd1a5、c6区8位拨动开关模块jd1c6相连.(该题流程如上所述,具体不再画出)

    ORG 0000H
    MAIN: MOV P2, #0FFH ; 初始设置
    NOP
    MOV A, P2 ;将p2的状态传入A
    JB ACC.0, zhuang1 ;检查k0状态,如果K0=1则转向zhuang1
    JB ACC.1, zhuang2 ;当k0=0时,检查K1状态,如果K1=1则转向zhuang2
    LJMP tai00 ;否则,转向tai00实现全灭
    zhuang1: JB ACC.1, tai11;检查k1状态,如果k1=1,则转向tai11,实现全亮
    ACALL tai10;如果k0向上拨而k1向下拨,则实现内容步骤1
    LJMP MAIN
    tai11: MOV P1, #0FFH ;如果k0k1同时向上拨,则使LED全亮
    LJMP MAIN
    zhuang2:ACALL tai01 ;如果k1向上拨而k0向下拨,则实现0.5s延时
    LJMP MAIN
    tai00: MOV P1, #00H ;如果k0k1同时向下拨,则使LED全灭
    LJMP MAIN
    tai10: MOV A, #55H ;实现内容步骤1的程序
    LOOP1: MOV P1, A
    RL A
    ACALL DELAY1
    MOV R7, A
    MOV A, P2
    JB ACC.1, tai11
    JNB ACC.0, tai00
    MOV A, R7
    LJMP LOOP1
    DELAY1: MOV R7, #32H ;1s延时子程序
    DELAY11: MOV R6, #64H
    DELAY12: MOV R5, #64H
    DELAYLOOP1: DJNZ R5, DELAYLOOP1
    DJNZ R6, DELAY12
    DJNZ R7, DELAY11
    RET
    tai01: MOV A, #55H ;实现内容步骤2的程序
    LOOP2: MOV P1, A
    RL A
    ACALL DELAY2
    MOV R7, A
    MOV A, P2
    JB ACC.0, tai11
    JNB ACC.1, tai00
    MOV A, R7
    LJMP LOOP2
    DELAY2: MOV R7, #19H ;0.5s延时子程序
    DELAY21: MOV R6, #64H
    DELAY22: MOV R5, #64H
    DELAYLOOP2: DJNZ R5, DELAYLOOP2
    DJNZ R6, DELAY22
    DJNZ R7, DELAY21
    RET
    END

    实验现象:通过该程序的运行,可以通过k0k1来控制就位亮灭闪烁:当当拨码开关K0往上拨时,实现设计型实验内容步骤①,否则LED全灭;当开关K1往上拨时,实现设计型实验内容步骤②,否则LED全灭;当K0、K1同时往上拨的时候,LED全亮.
    累计INT0按键的中断次数,保存到内部RAM的30H单元.
    设计思路:仿照例题3,但需要在每次中断时使计数器加一从而实现累计中断次数的功能.硬件连接:用二号导线将D2区80C51/C8051F020MCU模块的 P1.0、P3.2口分别与A5区八位逻辑电平显示模块的L0、C8区单次脉冲输出相连.

    ORG 0000H
    LJMP MAIN
    ORG 0003H
    LJMP INTERRUPT
    ORG 0030H
    MAIN: MOV A,30H
    CLR A
    CLR P1.0
    MOV TCON,#01H
    MOV IE,#81H
    MOV 30H,A
    SJMP $
    INTERRUPT:PUSH PSW
    CPL P1.0
    INC A
    MOV 30H,A
    POP PSW
    RETI
    END

    实验现象:首先将程序运行,然后在硬件上按键数次,然后再按reset键,可以在软件上观察到30h单元的数据即为按键次数.
    综合型实验
    交通灯控制程序设计.要求:
    东西向亮红灯时,南北向亮绿灯,时间为5s;
    两个方向均为黄灯亮2s;
    红绿灯显示交换方向;
    两个方向均为黄灯亮2s;如此循环反复.
    设计思路:假设LED灯依次代表东南西北方向,则可以通过循环还不断实现交通灯的交替变化;而循环内部分为4个大步骤分别如上题意所示,而延时可以通过调用子程序实现.

    ORG 0000H
    MOV A, #5AH ;假设灯的设置为东南西北顺序,设定其初始状态
    LOOP: MOV P1, A ; 输出红绿信号
    ACALL DEL1 ; 调用延时5s
    MOV P1, #0FFH ; 输出黄灯信号
    ACALL DEL2 ; 调用延时2s
    CPL A ;取反
    MOV P1,#0FFH;输出黄灯信号
    ACALL DEL2;延时2s
    LJMP LOOP
    DEL1: MOV R7, #32H ; 延时5s子程序
    DEL11: MOV R6, #0C8H
    DEL12: MOV R5, #0FAH
    DELAYLOOP1: DJNZ R5, DELAYLOOP1
    DJNZ R6, DEL12
    DJNZ R7, DEL11
    RET
    DEL2: MOV R7, #32H ; 延时2s子程序
    DEL21: MOV R6, #64H
    DEL22: MOV R5, #0C8H
    DELAYLOOP2: DJNZ R5, DELAYLOOP2
    DJNZ R6, DEL22
    DJNZ R7, DEL21
    RET
    END

    实验现象:该程序实现了题目中的要求,即循环显示
    东西向亮红灯时,南北向亮绿灯,时间为5s;
    两个方向均为黄灯亮2s;
    红绿灯显示交换方向;
    两个方向均为黄灯亮2s;
    采用外部中断的电平触发方式,编写并运行程序,观察运行结果.记录一次按键动作,进入中断的次数.
    实验心得:
    第一次做微机原理的硬件实验,所以对于软硬件的连接并不是很熟悉,只能通过模仿例题中的连接而进行.有必要对于硬件的连接进行总结:
    对于发光二极管的控制,可以在程序中运用MOV P1,A,使p1作为输入口,将JD1(P1)与A5区8位逻辑电平显示模块JD1A5相连.
    对于开关电路的控制,一般要用到P1、P2两个接口,一个作为输入,一个作为输出.C6区的8位波动开关模块JD1C6需要与入口相接.
    对于单次脉冲,需要用到c8区,而如果想要通过按键控制,则需要与P3.2口相连.
    在实验过程中,对于分支结构要求较多,需要我们通过对不同的选择进行不同的程序,因此编程时需要较多的运用JB、JNB等指令.
    另一个较为多用的是初始值的确定,主要在延时程序中.而延时程序有一定的时间限制,如果想要较长时间的延时则需要多个程序套用或者是软硬件结合.而该实验中组要还是运用了多程序套用的方式进行延时.
    对于P3口各位的功能总结如下:
    口线 第二功能 名称及作用
    P3.0 RXD 串行口输入信号
    P3.1 TXD 串行口输出信号
    P3.2 INT0 外部中断0请求信号
    P3.3 INT1 外部中断1请求信号
    P3.4 T0 定时计数器0外部输入
    P3.5 T1 定时计数器1外部输入
    P3.6 WR 片外数据存储器写信号
    P3.7 RD 片外数据存储器读信号
    要用实验报告模板 12.19
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • 计算机电源灯始终亮  计算机多路控制灯  非诚勿扰亮灭灯音乐  冰柜电源灯亮一会就灭  灯时亮时灭  46l98sw灯亮一下就灭  发动机故障灯时亮时灭  联想lj2200墨粉灯亮  自制led灯最亮