MCU學(xué)習(xí)之按鍵控制LED
程序 :
/**
* 讀IO, 用按鈕控制點(diǎn)燈.
*/
#include
#include
// 10個(gè)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;
// 定義開(kāi)關(guān). 低電平有效.
sbit K1 = P3^2;
sbit K2 = P3^5;
void main( void )
{
while( 1 )
{
if( !K1 ) // K1按下, 點(diǎn)亮LED
{
P10 = 0;
}
if( !K2 ) // K2按下, 熄滅LED
{
P10 = 1;
}
}
}
總結(jié) :
1. 對(duì)于MCU來(lái)說(shuō), 所有的端口永遠(yuǎn)都提供高電平(低電平有效), 如果你想讓某個(gè)端口提供低電平, 必須手工設(shè)定(僅僅是猜測(cè)).
2. 上面的K1, K2在開(kāi)發(fā)板上是以按鈕形式出現(xiàn), 按下就是提供低電平, 彈起就是提供高電平
對(duì)于第2點(diǎn),可以通過(guò)程序來(lái)考證 :
while( 1 )
{
// 當(dāng)K1被按下, 此時(shí)P3^2提供低電平, 彈起后P3^2依然是低電平.
if( !K1 )
{
P10 = 0;
P11 = 1;
}
else
{
P10 = 1;
P11 = 0;
}
}
仿真的時(shí)候, 很明白的看到是P11點(diǎn)亮, P10熄滅. 說(shuō)明執(zhí)行的是else, 也就是K1一直處于電平狀態(tài).
當(dāng)按下K1之后, P10點(diǎn)亮 P11熄滅, 說(shuō)明K1提供了低電平, 按鈕按下起了作用. 然后松手彈起K1, 看看到P10熄滅P11點(diǎn)亮. 說(shuō)明K1又恢復(fù)了高電平.
由此可見(jiàn)按鈕是onPress時(shí)改變了管腳電平, onRelease的時(shí)候又恢復(fù)了.
作業(yè) :
把程序改為: 按K1,P10燈亮,P11燈滅。按K2,P10燈滅,P11燈亮。
/**
* 讀IO, 用按鈕控制點(diǎn)燈.
*/
#include
#include
// 10個(gè)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;
// 定義開(kāi)關(guān)
sbit K1 = P3^2;
sbit K2 = P3^5;
void main( void )
{
while( 1 )
{
if( !K1 ) // K1按下, 點(diǎn)亮LED
{
P10 = 0;
P11 = 1;
}
if( !K2 ) // K2按下, 熄滅LED
{
P10 = 1;
P11 = 0;
}
}
}
編輯:admin 最后修改時(shí)間:2018-05-19