制作一个开关检测装置,用开关闭合状态决定发光二极管的亮灭

一、要求

1、单片机P1.0和P1.1引脚分别接开关S0和S1。

2、单片机P2.0~P2.3引脚接LED0~LED3。

3、当S0,S1均闭合时,LED0亮,其余灭;S0打开,S1闭合,LED1亮,其余灭;S0闭合,S1打开,LED2亮,其余灭;S0,S1均打开时,LED3亮,其余灭。

二、代码部分

#include<reg51.h> // 包含8051单片机的寄存器定义头文件

void main() // 主函数,程序入口点
{
  char state; // 声明一个字符型变量state,用于存储P1端口的状态

  do // 进入无限循环
  {
    P1 = 0xff; // 将P1端口的所有引脚设置为输入模式(逻辑高电平)
    state = P1; // 读取P1端口的当前状态并存储到state变量中
    state = state & 0x03; // 只保留state变量的最低两位(即只关心P1.0和P1.1的状态)
    switch(state) // 根据state变量的值进行分支判断
    {
    case 0: // 如果state为0(即P1.0和P1.1都为低电平)
      P2 =~ 0x01; // 将P2.0引脚设置为相反的状态(原来是高电平则变为低电平,反之亦然)
      break; 

    case 1: // 如果state为1(即只有P1.0为高电平)
      P2 =~ 0x02; // 将P2.1引脚设置为相反的状态
      break;

    case 2: // 如果state为2(即只有P1.1为高电平)
      P2 =~ 0x04; // 将P2.2引脚设置为相反的状态
      break;

    case 3: // 如果state为3(即P1.0和P1.1都为高电平)
      P2 =~ 0x08; // 将P2.3引脚设置为相反的状态
      break;
    }
  }
  while(1);   // 无限循环,程序持续执行上述操作
}

三、硬件仿真

(1)原理图

(2)仿真结果

(1)当S0,S1均闭合时:

(2)S0打开,S1闭合:

(3)S0闭合,S1打开

(4)S0,S1均打开时:

四、思考题

1、读取P1口状态之前为什么要向P1口写0xff?

答:在单片机编程中,通常需要先将某个端口的所有引脚都拉到一个确定的电平状态,然后再去读取这个端口的输入状态。这样做的目的是为了确保在读取输入状态时,所有的输入都是稳定的。在本次实验中,通过将P1口的所有引脚都拉到高电平,可以确保在读取P1口的输入状态时,所有的输入都是高电平,从而避免由于输入不稳定导致的读数错误。

2、C51程序中为什么要包含头文件reg51.h?

答:在C51编程中,<reg51.h>是一个包含了许多特殊功能寄存器的头文件。这些寄存器是8051单片机的一部分,它们用于存储特定的控制信息和状态信息。由于这些寄存器在大多数51单片机程序中都会用到,因此将它们的定义放在一个单独的头文件中,可以方便程序员在编写程序时直接引用,从而提高编程效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值