Keil uVision4 兩個(gè)按鍵控制燈效果編程
在這個(gè)項(xiàng)目中,我們將使用Keil uVision4來編寫一個(gè)程序,通過兩個(gè)按鍵來控制LED燈的亮滅效果。我們將使用P1口連接LED照明燈,同時(shí)使用S2和S3來模擬兩個(gè)開關(guān)。 新建項(xiàng)目 首先,在Ke
在這個(gè)項(xiàng)目中,我們將使用Keil uVision4來編寫一個(gè)程序,通過兩個(gè)按鍵來控制LED燈的亮滅效果。我們將使用P1口連接LED照明燈,同時(shí)使用S2和S3來模擬兩個(gè)開關(guān)。
新建項(xiàng)目
首先,在Keil uVision4中新建一個(gè)項(xiàng)目。然后,添加頭文件#include lt;reg52.hgt;以引入所需的庫文件。
定義變量
接下來,我們需要定義一些變量。使用sbit關(guān)鍵字來定義LED燈的引腳為P1^3,并分別定義s2和s3作為按鍵S2和S3的引腳。
sbit LED P1^3;
sbit s2 P3^0;
sbit s3 P3^1;
bit X, s2sta, s3sta;
主函數(shù)
現(xiàn)在,我們可以創(chuàng)建主函數(shù)來完成整個(gè)程序的邏輯。
void main()
{
int i;
while(1)
{
if(s2 ! s2sta || s3 ! s3sta) // 判斷是否有一個(gè)按鈕改變了狀態(tài)
{
X (s2 << 1) | s3; // 進(jìn)行狀態(tài)判斷
s2sta s2;
s3sta s3;
}
switch(X) // 根據(jù)狀態(tài)進(jìn)行相應(yīng)的操作
{
case 0: LED 0; break; // 如果狀態(tài)為0,LED燈熄滅
case 1: LED !LED; break; // 如果狀態(tài)為1,LED燈取反效果
case 2: break; // 如果狀態(tài)為2,不做任何操作
case 3: for(i0;i<5;i ) { LED 1; Delay(); LED 0; Delay(); } break; // 如果狀態(tài)為3,LED燈閃爍效果
}
}
}
循環(huán)效果
在主函數(shù)中,我們使用一個(gè)無限循環(huán)來不斷檢測按鍵狀態(tài)的變化,并根據(jù)狀態(tài)的不同進(jìn)行相應(yīng)的操作。
掃描按鍵狀態(tài)是否變化
我們使用s2sta和s3sta兩個(gè)變量來記錄上一次按鍵的狀態(tài)。通過比較當(dāng)前按鍵的狀態(tài)和上一次按鍵的狀態(tài),我們可以判斷是否有按鈕改變了狀態(tài)。
進(jìn)行判斷
如果有按鈕被按下,我們根據(jù)按鍵的狀態(tài)進(jìn)行判斷并執(zhí)行相應(yīng)的操作。當(dāng)狀態(tài)為0時(shí),LED燈熄滅;當(dāng)狀態(tài)為1時(shí),LED燈取反效果;當(dāng)狀態(tài)為2時(shí),不做任何操作;當(dāng)狀態(tài)為3時(shí),LED燈閃爍效果。
通過以上的邏輯和代碼,我們可以實(shí)現(xiàn)用兩個(gè)按鍵來控制LED燈的亮滅效果。