C语言控制单片机实验 I/O端口实验(流水灯走马灯、开关显示)

实验原理

P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。MCS-51单片机中所有口锁存器在复位时均置为“1”,如果在IO口锁存器写过“0”,在需要输入时应写入一个“1”,使它成为一个输入。MCS-51单片机的4个I/O端口中,P1、P2、P3口各引脚内部均有上拉电阻,唯独P0口没有上拉电阻,因此P0口在做通用IO口使用时,P0口外部要加上拉电阻,而P1、P2、P3口每个引脚可以直接加开关接地。

实验内容

  1. 流水灯实验:P1口做输出口,接八只发光二极管,编写程序,使发光二极管以流水灯形式循环点亮。

  2. I/O口输入输出实验:P0口做输入口,接八个按纽开关;P1口做输出口,接八只发光二极管。编写程序读取8个开关状态,分别在八只发光二极管上显示出来。

  3. 开关控制流水灯方向

实验1

流水灯实验:P1口做输出口,接八只发光二极管,编写程序,使发光二极管以流水灯形式循环点亮。
使用Proteus搭建电路如下图:
在这里插入图片描述
单片机程序如下

#include <reg52.h>
void delays(void);
void main()
{
	while(1)
	{
	P1 = 0xff;
	delays();
	P1 = 0x7f;
	delays();
	P1 = 0x3f;
	delays();
	P1 = 0x1f;
	delays();
	P1 = 0x0f;
	delays();
	P1 = 0x07;
	delays();
	P1 = 0x03;
	delays();
	P1=0x01;
	delays();
	P1 = 0x00;
	delays();
	}
}
void delays()
{
  int i,j;
  for(i = 0; i<100;++i)
    for(j = 0; j<1000;++j)	;
}

将程序编译入Proteus模拟电路中
运行程序,流水灯依次点亮,实验成功。
在这里插入图片描述

实验二

I/O口输入输出实验:P0口做输入口,接八个按纽开关;P1口做输出口,接八只发光二极管。编写程序读取8个开关状态,分别在八只发光二极管上显示出来。
电路图如图
在这里插入图片描述程序如下

#include <reg52.h>
void main()
{
	P0=0xff;
	while(1)
	{
		P1=P0;
	}
}

将程序编译入Proteus电路,运行程序,右侧开关打开时,左侧对应灯亮,试验成功。
在这里插入图片描述

实验三

设计思路如下
在这里插入图片描述

电路图如下

程序如下

#include <reg52.h>
void delays(void)  ;
	sbit a1=P2^0;
void main()
{
	while(1)
	{
		if(a1==0)
		{
				P1 = 0xff;
				delays();
				P1 = 0x7f;
				delays();
				P1 = 0x3f;
				delays();
				P1 = 0x1f;
				delays();
				P1 = 0x0f;
				delays();
				P1 = 0x07;
				delays();
				P1 = 0x03;
				delays();
				P1=0x01;
				delays();
				P1 = 0x00;
				delays();
		}
		else
		{
				P1 = 0xff;
				delays();
				P1 = 0xfe;
				delays();
				P1 = 0xfc;
				delays();
				P1 = 0xf8;
				delays();
				P1 = 0xf0;
				delays();
				P1 = 0xe0;
				delays();
				P1 = 0xc0;
				delays();
				P1=0x80;
				delays();
				P1 = 0x00;
				delays();
		}
	}
}
void delays()
{
  int i,j;
  for(i = 0; i<100;++i)
    for(j = 0; j<1000;++j)	;
}

运行程序,开关打开时,左侧流水灯自上而下亮起,开关闭合是,流水灯自下而上亮起。实验成功。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

feiGeorge

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

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

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

打赏作者

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

抵扣说明:

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

余额充值