1. 实验原理
P0口是个多功能的引脚,它既可以向外部存储器传送地址信息和数据信息,也可以作为一个通用的I/O接口和其他硬件之间来传输数据信息,但是P0口无法输出高电平,本实验为实现四个LED灯的闪烁,在P0口外加一个上拉电阻来实现其引脚输出高电平,从而实现4个LED灯闪烁。
2.Proteus仿真电路图
3.所用元器件图
4.C51代码
#include<reg51.h> //定义头文件
sbit LED1=P0^0;
sbit LED2=P1^0;
sbit LED3=P0^1;
sbit LED4=P1^1; //定义引脚
void delay(int ms) //定义延时子函数
{
int i,j;
for(i=ms;i>0;i--) //通过改变ms的次数来改变延时时间
for(j=110;j>0;j--);
}
void main() //main代表主函数,程序执行的部分
{
LED1=1; //初始化
LED2=1;
LED3=0;
LED4=0;
while(1)
{
LED1=0; //点亮
delay(1000); //延时,调用延时子函数
LED1=1; //熄灭
delay(1000);
LED2=0;
delay(1000);
LED2=1;
delay(1000);
LED3=1; //点亮
delay(1000);
LED3=0; //熄灭
delay(1000);
LED4=1;
delay(1000);
LED4=0;
delay(1000);
}
}
5.问题分析及解决
①三极管及符号
三极管分为NPN型和PNP型(P为正极,N为负极)
(B为基极,C为集电极,E为发射极)
NPN型
PNP型
特性:例如用NPN型,当给基极B通高电平时,C与E是导通的,当给基极B通低电平时,C与E是截止的。
②P0口内部结构
P0口是个多功能的引脚,它既可以向外部存储器传送地址信息和数据信息,也可以作为一个通用的I/O接口和其他硬件之间来传输数据信息,P0口就是通过多路开关来实现这两个功能的切换,当开关打到a时就执行第一个功能,当开关打到b时就执行第二个功能。
关于D锁存器,当给它一个高电平1时,他的Q¯引脚就输出低电平0,当给它输入低电平0时,Q¯就输出高电平1。
V1,V2这两个MOS管的性质和NPN型的三极管是相似的,也就是给它输入一个高电平时,是导通的,反之,给他输一个低电平时,是截止的。
③P0无法输出高电平之问题分析及解决
当P0口作为通用I/O接口时(开关打到b),也就是V1这个MOS管是截止的,此时高电平不可以通过V1传输到P0引脚, 也就是不能输出高电平。
当给D锁存器一个高电平1时,则Q¯输出0低电平,V2截止,
当给D锁存器一个低电平0时,则Q¯输出1低电平,V2导通,P0口输出低电平0(V2接地),为了输出高电平1,可外加一个上拉电阻来实现,此时D3就可以被点亮,而程序无需再做改动。