实验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。