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