按鍵實驗電路如下,10K電阻與按鍵串聯(lián)在VCC與GND之間,當按鍵沒有按下時,PB2處的電壓為5V,即高電平;當按鍵按下時,PB2處的電壓為0V,即低電平。
一、庫函數(shù)1、打開DAHUME MINI.stw文件;
2、在STVD左側(cè)Workspace窗口Source Files目錄下找到main.c,雙擊打開;
3、setup();函數(shù)代碼如下,pinMode(PB2, INPUT);即將PB2引腳設置為輸入模式;
void setup(void)
{
delay(10);
CLOCK(_16MHz);
pinMode(PC1, OUTPUT);
pinMode(PB2, INPUT);
}
4、主函數(shù)代碼如下
main()
{
setup();
while (1)
{
if (digitalRead(PB2) == HIGH)
{
digitalWrite(PC1, LOW);
}
else if(digitalRead(PB2) == LOW)
{
digitalWrite(PC1, HIGH);
}
}
}
_Bool digitalRead(char pin);是布爾型函數(shù),調(diào)用此函數(shù)返回引腳的高低電平值。
if語句,小括號里的表達式運算結(jié)果為真時,執(zhí)行一次后面大括號里的代碼;為假時,跳過大括號里的代碼。if語句有如下兩種結(jié)構(gòu)
1)1個if+n個else if,n=0,1,2……。
if (表達式)
{
代碼;
}
else if(表達式)
{
代碼;
}
2)1個if+n個else if+1個else,n=0,1,2……。if和else if表達式運算結(jié)果都為假時,則執(zhí)行else大括號里的代碼。
if (表達式)
{
代碼;
}
else if(表達式)
{
代碼;
}
else
{
代碼;
}
==用于左右運算結(jié)果等值判斷,是等于運算符,!=是不等于運算符,都屬于相等運算符。常用于條件判斷還有<、<=、>、>=,此四項為關(guān)系運算符。
if (表達式1 &&表達式2)
&&是邏輯與運算符,即并且。表達式1和表達式2同時為真則為真,一者為假則為假。
if (表達式1 ||表達式2)
||是邏輯或運算符,即或者。表達式1和表達式2一者為真則為真,同時為假則為假。
更多C語言運算關(guān)鍵字、C語言運算符知識,請看百度百科。
開發(fā)板上KEY1按鍵一端與GND相連,另一端與PB2引腳的排針相連。本例程所實現(xiàn)效果是當KEY1松開時,LED1熄滅;當KEY1按住時,LED1點亮。
二、寄存器pinMode(PB2, INPUT);
用寄存器寫即
PB_DDR_2 = 0;
PB_CR1_2 = 1;
或者
PB_DDR = PC_DDR & 0b11111011;
PB_CR1 = PC_CR1 | 0b00000010;
或者
PB_DDR &= 0b11111011;
PB_CR1 |= 0b00000010;
IO引腳作為輸入模式,配置模式如下。PB2引腳作為上拉輸入模式。
IO口配置表
配置模式
DDR位
CR1位
CR2位
配置模式
上拉電阻
輸入
0
0
0
懸浮輸入
OFF
0
1
0
上拉輸入
ON
0
0
1
中斷懸浮輸入
OFF
0
1
1
中斷上拉輸入
ON
懸浮輸入模式的引腳在不接任何元器件時,讀取的電平值不穩(wěn)定,即不確定的信號。當串聯(lián)一個電阻連到VCC時,可將信號鉗位在高電平,電阻同時起限流作用。此為外接上拉電阻。CR1寄存器某位置1,對應引腳可使用芯片內(nèi)置上拉電阻,即上拉輸入模式。
if (digitalRead(PB2) == HIGH)
else if (digitalRead(PB2) == LOW)
用寄存器寫即
if (PB_IDR_2 == 1)
else if (PB_IDR_2 == 0)
或者
if (PB_IDR_2)
else if (!PB_IDR_2)
三、練習1、在while (1)循環(huán)中用if+else if+else if+else結(jié)構(gòu):
1)僅KEY1按住時,LED1亮;
2)僅KEY2按住時,LED2亮;
3)KEY1、KEY2同時按住時,LED3亮;
4)以上都不滿足時,3個燈全滅。
2、在while (1)循環(huán)中用if語句:
1)KEY1短按一下,LED1亮2秒;
2)KEY2短按一下,LED2亮2秒。