一、实验目的:
(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循环右移一位
}
}