- 实验目的
- 掌握P1口、P2口的输入输出的简单的连接与使用方法;
- 熟悉由输入对输出进行控制的方法。
- 实验内容
仿真部分:参照教材例题5-4进行硬件连接、编程并实现其功能。具体连接关系:P1.0和P1.1引脚接有两只开关s0和s1,两引脚上的高低电平共4种组合,4种组合分别点亮P2.0~P2.3引脚控制的4只LED,即S0、S1均闭合,LEDO亮,其余灭;s1闭合、so打开,LED1亮,其余灭; S0闭合、S1打开,LED2亮,其余灭; S0、S1均打开,LED3亮,其余灭。编程实现此功能。
实物部分:结合开发板的5只按键和8只LED灯的实际连接关系,修改程序并实现其功能。
三、 程序流程图和仿真实验的电路原理图
四、 实验步骤
1. keil5仿真部分:
- 用keil5仿真,如下图所示。
2.Proteus仿真部分:
(1)用仿真软件proteus画原理图;
(2)用keil软件编写功能程序并生成hex文件
(3)在仿真软件proteus中进行仿真:
加载(烧写)程序,观察实验现象;
修改程序以使每次只有一个灯亮;
3.实物开发板部分:
(1)开发板实际电路分析
8只LED灯的连接关系:
5只按键的关系:
(2)修改程序
利用实物的按键K1 (已连到P1.4口线)和K2 (已连到P1.5口线)代替开关例题5~4中的
开关so和S1,控制P2口低4位连接的4只LED灯(即不用变) ,修改程序并实现其功能。
4)扩展部分
增加数码管输出(其电路连接关系参见下图),并将2个开关或按键输入的编码
值(0~3) 用数码管显示出来。
开发板数码管连接关系:
开发板数码管实例:
(由于开发板数码管显示问题,导致部分数码管不亮)
- 程序代码
- pretus仿真代码
#include<reg51.h>
main(){
char state;
do{
P1=0xff;
state=P1;
state=state&0x03;
switch(state){
case 0: P2=0xFE; break;
case 1: P2=0xFD; break;
case 2: P2=0xFB; break;
case 3: P2=0xF7; break;
}
}
}
(3)修改代码在板子上按键k1、k2实现
#include <reg51.h>
#include <intrins.h>
sbit K1 = P1^4; // 定义K1开关引脚
sbit K2 = P1^5; // 定义K2开关引脚
main()
{
do{
P1=0xff;
if(K1 == 0 && K2 == 0) { // S0和S1均闭合
P2=0xfe;
}
else if(K1 == 1 && K2 == 0) { // S1闭合,S0打开
P2=0xfd;
}
else if(K1 == 0 && K2 == 1) { // S0闭合,S1打开
P2=0xfb;
}
else if(K1 == 1 && K2 == 1)// S0和S1均打开
P2=0xf7;
}while(1);
}
(4)数码管代码
#include <reg51.h>
#include <intrins.h>
sbit K1 = P1^4; // 定义K1开关引脚
sbit K2 = P1^5; // 定义K2开关引脚
#define uchar unsigned char
#define uint unsigned int
#define out P0
uchar code seg[]={0xc0,0xa4,0x99,0x82};
void delaym(uint j) {
uchar i;
for(;j>0;j--)
{
i=250;
while(--i);
i=249;
while(--i);
}
}
void main()
{
do{
P1=0xff;
if(K1 == 0 && K2 == 0) { // S0和S1均闭合
P2=0xfe;
out=seg[0];
}
else if(K1 == 1 && K2 == 0) { // S1闭合,S0打开
P2=0xfd;
out=seg[1];
}
else if(K1 == 0 && K2 == 1) { // S0闭合,S1打开
P2=0xfb;
out=seg[2];
}
else if(K1 == 1 && K2 == 1){// S0和S1均打开
P2=0xf7;
out=seg[3];
}
delaym(100);
}while(1);
}
- 实验结果
当程序下载到开发板中时,可以通过K1、K2两个按键控制四个灯的亮灭,通过改写,实现不同灯的亮灭;并通过K1,K2在数码管上输出数字1、2、3、4。
八、 实验分析与总结
通过这次实验,让我觉得书上的东西不是一味的照搬就可以实现的,需要理解和明白开发板的原理图,引脚的地方,P接口一定要大写,sbit定义一定要最开始,烧录数码管时,液晶显示器需要拆除,不然引脚重复了,本次实验最大的困难就是开关的改写花了许多时间,数码管的物理条件导致数字不能显示完整。下次实验还得优先预习,找到问题所在,提前发现,提前解决!