实验1 流水灯设计

实验1 流水灯设计
实验1 流水灯设计

实验1 流水灯设计

一、实验目的

1、熟悉51系列单片机及实验开发板的组成和使用方法。

2、学会使用Keil集成调试软件编写程序,使用PZ-ISP普中自动下载软件。掌握实验的步骤并能得到正确的实验结果。

3、学会用C语言进行并行口控制跑马灯应用程序的设计。

二、实验内容

1、用并行口P1(或其他I/O口)接8个发光二级管,编程序实现8个灯同时闪烁。

2、用并行口P1(或其他I/O口)接8个发光二级管,编程序实现8路跑马,从左到右逐个点亮8个LED灯。

3、提高部分(流水灯设计):编写程序,实现下面流水灯。

(1)从中间到左右逐个点亮8个LED灯

(2)隔灯逐个点亮8个LED灯

三、实验步骤

1、调试软件的使用

使用keil-uvision5,建立工程并存储、选择芯片89S51、

新建文件输入程序并保存,将文件加入到工程中,编译生成

HEX文件。

2、硬件连接

(1)使用MicroUSB数据线,将实验开发板与微型计算机连

接起来;

(2)在实验开发板上,用8P数据线将JP10和J12两个8位接

口连接起来;

3、编程软件的使用

(1)鼠标右键点击“我的电脑”-“管理”-“设备管理

器”,打开“端口(COM和LPT)”,检查“USB-SERIAL

CH340(COMx)”,x就是你正确接上MicroUSB数据线后连接电脑

的串口号码。(正确安装好驱动后此步可省略)

(2)打开桌面的“PZ-ISP普中自动下载软件”,如下图所示:

四、实验结果——源代码

1、用并行口P2接8个发光二级管,编程序实现8

个灯同时闪烁。

#include "reg52.h"

typedef unsigned char u8;

typedef unsigned int u16;

void Delay(u16 i)

{

while(i--);

}

void main()

{

while(1)

{

P2=0x00;

Delay(50000);

P2=0xFF;

Delay(50000);

}

}

2、用并行口P2接8个发光二级管,编程序实现8路跑马,从上到下逐个点亮8个LED灯。

#include "reg52.h"

#include

typedef unsigned char u8;

typedef unsigned int u16;

void Delay(u16 i)

{

while(i--);

}

void main()

{

u8 i;

while(1)

{

P2=0xfe; //1111 1110

Delay(50000);

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

{

P2=_crol_(P2,1);

Delay(50000);

}

}

}

3、提高部分(流水灯设计):编写C语言程序,

实现下面流水灯作业。

(1)从上到下逐个点亮8个LED灯,再从左到右逐个点亮8个LED灯

#include "reg52.h"

#include

typedef unsigned char u8;

typedef unsigned int u16;

void Delay(u16 i)

{

while(i--);

}

void main()

{

u8 i;

while(1)

{

P2=0xfe; //1111 1110

Delay(50000);

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

{

P2=_crol_(P2,1);

Delay(50000);

}

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

{

P2=_cror_(P2,1);

Delay(50000);

}

}

}

(2)从中间到左右逐个点亮8个LED灯#include "reg52.h"

void Delay(unsigned int i)

{ while(i--);}

unsigned char code led[4]={0xe7, 0xdb, 0xbd, 0x7e};

void main()

{

unsigned int i=0;

while(1)

{

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

{

P2=led[i];

Delay(50000);

}

}

}

(3)隔灯逐个点亮8个LED灯

#include "reg52.h"

void Delay(unsigned int i)

{ while(i--);}

unsigned char code led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

static unsigned char Oddnum[4]={1,3,5,7};

static unsigned char Evennum[4]={0,2,4,6};

void main()

{

unsigned int i;

while(1)

{

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

{

P2 = led[Evennum[i]];

Delay(50000);

}

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

{

P2 = led[Oddnum[i]];

Delay(50000);

}

}

}

五、实验体会——结果分析

实验结果一分析:

八个灯同时亮和灭,闪烁间隔大约为450ms。

实验结果二分析:

使用位移函数,这里是左移,让P2口的八个位依次为低电平0,实现流水效果,小灯从左到右逐个点亮,间隔大约为450ms。

实验结果三分析:

(1)使用位移函数,让P2口的八个位从低位到高位依次为低电平0,再从高位到低位依次为低电平0,实现小灯从左到右依次点亮,再从右到左依次点亮,闪烁间隔大约为450ms。

(2)P2口的八个位依次赋值为1110 0111、1101 1011、1011 1101、0111 1110,由于是低电平点亮,所以实验结果为从中间(4、5)小灯开始到左右逐个点亮八个LED灯,闪烁间隔大约为450ms。

(3)用两个数组保存1-8的奇数和偶数,用两个循环实现隔灯逐个点亮八个LED灯,具体为1、3、5、7亮,再2、4、6、8亮,闪烁间隔大约为450ms。

相关主题
相关文档
最新文档