新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)單按鍵控制LED發(fā)光的程序

單片機(jī)單按鍵控制LED發(fā)光的程序

作者: 時(shí)間:2012-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
51的程序,就是用一個(gè)與P3_0引腳連接的按鍵控制P2_0相連LED的亮和滅兩種狀態(tài)。按一次按鍵燈亮,再按一次按鍵燈滅。再按一次又亮,再按一次燈又滅,本程序出自網(wǎng):http://www.51hei.com,經(jīng)過(guò)測(cè)試已經(jīng)可以成功運(yùn)行。
#include "AT89X51.H"
void main(void) // 主程序
{
bit mark; //定義位變量
unsigned int n; //定義循環(huán)變量
while(1) //無(wú)限循環(huán)
{
if (P3_0==0) //如果按鍵按下
{
for(n=0;n1000;n++); //延時(shí)一段時(shí)間,等待按鍵完全按下
mark=~mark; //翻轉(zhuǎn)標(biāo)記
while(!P3_0) //等待按鍵彈起
for(n=0;n1000;n++); //等待按鍵完全彈起
}
P2_0=mark; //點(diǎn)亮或是關(guān)滅LED燈
}}
while(1) //無(wú)限循環(huán)
{
if(ldelay==1 ) //若是時(shí)間溢出標(biāo)記為1,處理如下語(yǔ)句
{
ldelay=0; //清除時(shí)間溢出標(biāo)記
P2=ledp[ledi]; //讀出一個(gè)表格值送到P2口
ledi++; //指向下一個(gè)表格值
if(ledi==4)
{
ledi=0; //到了最后一個(gè)燈就換到第一個(gè)
sp--; //速度級(jí)別減1
if (sp==3) //如果速度級(jí)別減到3
sp=23; // 恢復(fù)速度最慢的級(jí)別23
}}}}
timer0() interrupt 1 //定時(shí)器0中斷服務(wù)程序
{
static unsigned int kk; //定義靜態(tài)局部變量
kk++; //每次中斷服務(wù),kk加1
if(kk==(100*sp)) //最少次數(shù)為100*sp=300,時(shí)間為300次*0.25ms
//最多次數(shù)為2300次,時(shí)間為2300次*0.25ms
//如果kk=(100*sp),執(zhí)行如下語(yǔ)句
{
kk=0;
ldelay=1; //當(dāng)kk值與100*sp值相等,將ldelay標(biāo)記置1,則處理燈亮與顯示速度
} }


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉