程序 :
/**
* 读IO, 用按钮控制点灯.
*/
#include
#include
// 10个LED
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的时候又恢复了.
作业 :
把程序改为: 按K1,P10灯亮,P11灯灭。按K2,P10灯灭,P11灯亮。
/**
* 读IO, 用按钮控制点灯.
*/
#include
#include
// 10个LED
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;
}
}
}