单片机原理流水灯设计

  • 格式:doc
  • 大小:109.01 KB
  • 文档页数:4

第 1 页 共 4 页

原理:

MCS-51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。每组I/O口内部都有8位数据输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。四组并行I/O端口即可以按字节操作,又可以按位操作。当系统没有扩展外部器件时,I/O端口用作双向输入输出口;P0、P1、P2和P3接口均具有普通I/0口的功能,P0、P2口还可以作系统地址和数据总线、P3口有第二功能,P3口的第二功能大多与其内部功能部件有关,RD、WR是外部数据存储器的写、读控制信号,它与MCS-51的内部功能器件配合使用。

本实验用到的P1口内部结构如图1所示。作输出时:输出0即(P1.x=0)时,将0输出到内部总线上,在写锁存器信号控制下写入锁存器,锁存器的反向输出端输出1,下面的场效应管导通,输出引脚成低电平。输出1时,下面的场效应管截止,上面的上拉电阻使输出为1。作输入时:P1端口引脚信号通过一个输入三态缓冲器接入内部总线,再读引脚信号控制下,引脚电平出现在内部总线上。为了能读到真实的引脚信号,下面的场效应管必须截止,即锁存器的内容必须是1。为了能正确读取引脚信号,锁存器必须先写1。通过C51程序的编写,可以使I/O口的每根引脚在不同的时间输出不同的0、1信号,从而控制外部的设备。

归纳四个并行口使用的注意事项如下:

1、如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用。

2、四个口在作输入口使用时,均应先对其写“1”,以避免误读。

3、P0口作I/O口使用时应外接10K的上拉电阻,其它口则可不必。

4、P2可某几根线作地址使用时,剩下的线不能作I/O口线使用。

5、P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。 图 1 P1口的位结构

第 2 页 共 4 页

内容及过程:

用proteus设计流水灯电路,将仿真实验板上51单片机的P1口的8根线与实验板上的8位LED灯连接,I/O口的一根引脚控制一个LED灯。根据实验板上LED灯的硬件连接,编写程序使8个LED灯从最低位依次点亮,每次只亮一盏灯。依此循环。

一、在此基础上编写程序使用一根I/O线接一开关控制流水灯流向。

1、用keil软件编写流水灯程序:

(1)、启动Keil仿真软件后,点击Project菜单新建项目(new project);

(2)、新建项目后,选择仿真单片机型号,并新建、保存、然后加入程序文件(add files

to group“source group”)

(3)、编写言程序,程序如下:

#include "reg51.h" main()

#include "intrins.h" {

#define uchar unsigned char temp=0xFE;

#define uint unsigned int for(i=0;i<8;i++)

uchar temp,i; {

void delay(uint z) P0=temp;

{ temp=_crol_(temp,1);

uint x,y; delay(400);

for(x=z;x>0;x--) }

for(y=110;y>0;y--);//延时函数 }

}

(4)、程序写好后,进行连接、编译、生成hex文件,如图2、图3所示:

图2 单击output,然后点击creat hex fi: 图3 生成led.Hex文件

2、用proteus仿真软件画出流水灯的电路图,用到的元器件有:AT89C51RB2、CAP、八个LED-BLUE、CRYSTAL、RES、BUTTON及电源和接地。图如4所示:

第 3 页 共 4 页

图4 proteus流水灯仿真电路图

3、双击单片机,导入程序,如图5所示:

图5 导入流水灯的hex文件

二、在此基础上编写程序使8个LED灯从两边向中间循环点亮。

1、用keil软件编写灯从两端向中间移动流水灯程序:

(1)、启动Keil仿真软件后,点击Project菜单新建项目(new project);

(2)、新建项目后,选择仿真单片机型号,并新建、保存、然后加入程序文件(add files

to group“source group”)

(3)、编写言程序,程序如下:

#include"reg51.h"

#include"intrins.h"

#define uchar unsigned char

#define uint unsigned int

uchar a,b,i;

void delay(uint z)

{

uint x,y;

第 4 页 共 4 页 for(x=z;x>0;x--)

for(y=240;y>0;y--);

}

main()

{

while(1)

{

for(i=0;i<5;i++)

{

a=(~(0x01<

b=(~(0x80>>i))&0xf0;

P0=a+b;

delay(500);

}

}

}

(4)、程序写好后,进行连接、编译、生成hex文件,如图6、图7所示:

图6 单击output,然后点creat hex 图7 生成hex可执行文件

2、用proteus软件进行仿真,画出电路图,所需元器件有:AT89C51RB2、CAP、八个LED-BLUE、CRYSTAL、RES、BUTTON及电源和接地。图如4所示,导入程序如图5所示。利用proteus进行仿真实验时,如何正确画出电路图关系到实验仿真结果的正确以否,所以,需掌握单片机的基本原理,I/0口的功能,然后认真画图,画好后,导入程序进行调式,发现问题进行修改,最后仿真成功。