MCU学习3--按键控制LED

来源:互联网 发布:淘宝买家真人秀 编辑:程序博客网 时间:2024/06/05 04:39

程序 :

/**

 * IO, 用按钮控制点灯.

 */

#include <stdio.h>

#include <reg52.h>

 

// 10LED

sbit P10 = P1^0;

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 = P1^4;

sbit P15 = P1^5;

sbit P16 = P1^6;

sbit P17 = P1^7;

 

// 定义开关. 低电平有效.

sbit K1 = P3^2;

sbit K2 = P3^5;

 

void main( void )

{

    while( 1 )

    {

       if( !K1 )  // K1按下, 点亮LED

       {

           P10 = 0;

       }

       if( !K2 )  // K2按下, 熄灭LED

       {

           P10 = 1;

       }

    }

}

 

总结 :

1. 对于MCU来说, 所有的端口永远都提供高电平(低电平有效), 如果你想让某个端口提供低电平, 必须手工设定(仅仅是猜测).

2. 上面的K1, K2在开发板上是以按钮形式出现, 按下就是提供低电平, 弹起就是提供高电平

 

对于第2点,可以通过程序来考证 :

    while( 1 )

    {  

       // K1被按下, 此时P3^2提供低电平,  弹起后P3^2依然是低电平.

       if( !K1 )

       {

           P10 = 0;

           P11 = 1;

       }

       else

       {

           P10 = 1;

           P11 = 0;

       }

   }

仿真的时候, 很明白的看到是P11点亮, P10熄灭. 说明执行的是else, 也就是K1一直处于电平状态.

当按下K1之后, P10点亮 P11熄灭, 说明K1提供了低电平, 按钮按下起了作用. 然后松手弹起K1 看看到P10熄灭 P11点亮. 说明K1又恢复了高电平.

由此可见按钮是onPress时改变了管脚电平, onRelease的时候又恢复了.

 

作业 :

把程序改为: K1P10灯亮,P11灯灭。按K2P10灯灭,P11灯亮。

 

/**

 * IO, 用按钮控制点灯.

 */

#include <stdio.h>

#include <reg52.h>

 

// 10LED

sbit P10 = P1^0;

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 = P1^4;

sbit P15 = P1^5;

sbit P16 = P1^6;

sbit P17 = P1^7;

 

// 定义开关

sbit K1 = P3^2;

sbit K2 = P3^5;

 

void main( void )

{

    while( 1 )

    {

       if( !K1 )  // K1按下, 点亮LED

       {

           P10 = 0;

           P11 = 1;

       }

       if( !K2 )  // K2按下, 熄灭LED

       {

           P10 = 1;

           P11 = 0;

       }

    }

}