当前位置:文档之家› 单片机并行口实验报告

单片机并行口实验报告

单片机并行口实验报告
实验二并行口实验报告
班级:
学号:
姓名:
教师:
一、实验目的
通过实验了解8051并行口输入方式和输出方式的工作原理及编程方法。

二、实验内容
1、输出实验
如图4-1所示。

以8031的P2口为输出口。

通过程序控制发光二极管的亮灭。

2、输入实验
如图4-1所示。

以8031的P1口为输入口。

用开关向P1.0~P1.3输入不同的状态,控制P2口P2.4~P2.7发光二极管的亮灭。

3、查询输入输出实验
如图1-1所示。

以8051的P1.6或P1.0为输入位,以P2口为输出,二进制计数记录按键的次数。

图1-1
三、编程提示
1、输出实验程序
(1)设计一组显示花样,编程使得P2口按照设计的花样重复显示。

(2)为了便于观察,每一状态加入延时程序。

2、输入实验程序
开关打开,则输入为1;开关闭合,则输入为0。

读取P1.0~ P1.3的状态,并将它们输出到P2.4~ P2.7,驱动发光二极管。

所以发光二极管L1~L4的亮灭应与开关P1.0~ P1.3的设置相吻合。

3、查询输入输出程序
(1)编程计数P1.0按键次数,按键不去抖动。

(2)编程计数P1.6按键次数,按键不去抖动。

(3)编程计数P1.0按键次数,按键软件延时去抖动。

观察(1)、(2)、(3)、的结果。

四、实验器材
计算机,目标系统实验板
五、实验步骤
1、在KEILC中按要求编好程序,编译,软件调试,生成.HEX文件。

2、断开电源,按图1-1所示,连好开关及发光二极管电路。

3、下载程序。

4、调试运行程序,观察发光二极管状态。

六、C源程序清单
1、#include <STC12C5A60S2.h>
#define uchar unsigned char
#define ON 0
#define OFF 1
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;
void delay1(void);
void main(void)
{
led1=led2=led3=led4=led5=led6=led7=led8=O FF;
while(1)
{
led1=led8=ON;
delay1();
led2=led7=ON;
delay1();
led3=led6=ON;
delay1();
led4=led5=ON;
delay1();
led1=led8=OFF;
delay1();
led2=led7=OFF;
delay1();
led3=led6=OFF;
delay1();
led4=led5=OFF;
delay1();
}
}
void delay1(void)
{
uchar i,j,k;
for(i=0;i<10;i++)
for(j=0;j<100;j++)
for(k=0;k<255;k++);
}
2、#include<STC12C5A60S2.H>
#define uchar unsigned char
sbit k8=P1^0; sbit k7=P1^1; sbit k6=P1^2; sbit k5=P1^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void main(void) {
while(1)
{
if(!k8)
led5=0;
if(!k7)
led6=0;
if(!k6)
led7=0;
if(!k5)
led8=0;
if(k8)
led5=1;
if(k7)
led6=1;
if(k6)
led7=1;
if(k5)
led8=1;
}
}
3、(1)和(2)
#include<STC12C5A60S2.H>
#define uchar unsigned char sbit k8=P1^0;
sbit k2=P1^6;
void main(void)
{
uchar num1,num2;
n um1=0;
num2=0;
while(1)
{
if(!k8)
{
num1++;
P2=~num1;
}
if(!k2)
{
num2++;
P2=~num2;
}
}
}
3、(3)
#include<STC12C5A60S2.H>
#define uchar unsigned char
void delay(uchar);
sbit k8=P1^0;
sbit k7=P1^1;
sbit k6=P1^2;
sbit k5=P1^3;
sbit k4=P1^4;
sbit k3=P1^5;
sbit k2=P1^6;
sbit k1=P1^7;
void main(void)
{
uchar num;
n um=0;
while(1)
{
if(!k3||!k4||!k5||!k6||!k7)
{
num++;
P2=~num;
delay(100);
}
if(!k8)
{
num=0;
P2=~num;
delay(100);
}
}
}
void delay(uchar k )
{
uchar x,y,z;
for(x=k;x>0;x--)
for(y=20;y>0;y--)
for(z=250;z>0;z--);
}
七、总结
对于这次的实验来说,还是不难的,因为看懂了图1-1后,在加上原来学过的C语言,所以这三个程序还是很容易搞定的,在按键去抖动的程序中,由于k1和k2和其他的键并不一样,这两个键在硬件上已经去抖动了,。

相关主题