P口输出流水灯与proteus

发布时间:2023年12月28日

一、实验目的:

(1)学习P1口的使用方法;

(2)学习延时子程序的编写。

(3)学习掌握单片机仿真软件proteus的使用方法

二、实验顶备知识:

(1)Pl口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。

(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。

三、实验内容:

流水灯程序设计:P3.7外接按钮开关(button)S1,P2口连接8只led,每次只点亮一只led 0.5秒,循环点亮,每0.5秒移动一次;S1断开时,led左移点亮,否则右移点亮。要求采用c51程序设计。其中流水灯移动用三种方法实现。

在proteus软件中画出该电路原理图,并导入程序,仿真运行。

四、Proteus的用法主要步骤:

1、打开proteus7.5,在菜单file里new一个design

2、准备元器件:惦记左侧工具列表里的

component mode,pick devices,将元器件添加到列表里

3、放置元器件:从元器件列表里拾取元器件,放置于图纸的合适位置,先放重要、体积大的元器件。

4、连接元器件:可以直接绘制wire,也可通过label建立电气连接。

5、编辑元器件的属性:选中待编辑元器件,右击,edit properties

6、单片机导入hex文件:选中单片机件,右击,edit properties--program files里导入编译好的hex文件

7、仿真运行:点左下角播放键。

#include <reg51.h>
#include <intrins.h> 				//内部函数包含到程序中
#define uchar unsigned char
#define uint unsigned int

sbit S1=P3^7; 						//定义了P3.7为开关输入

void delay(unsigned int i)			//定义延时函数Delay(),i是形式参数,不能赋初值
{
	unsigned int j;
	for(;i>0;i--)
	for(j=0;j<125;j++)				 
	{;}
}


void main(void)
{ 
	unsigned char data led;
	led=0xfe; 						//低电平点亮发光管,初始值对应最低位P1.0为低,即L0点亮
	while(1)
	{ 
		P2=led; 					//将led送到P2口
		delay(500); 				//延时0.5秒
		if(S1) 					    //如果KEY为1(开关断开),则变量led循环左移一位
			led=_crol_(led,1);
		else
			led=_cror_(led,1);		//否则led循环右移一位
	}
}

文章来源:https://blog.csdn.net/weixin_65544554/article/details/135266131
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。