⑴ 單片機c語言程序高手進 這個程序應該怎樣實現中斷
給你個思路吧。
首先來個鍵盤掃描程序。採集是A鍵按下還是B鍵按下。如果是A鍵按下的話,就給LED1口輸出高電平然後延時1S,延時程序可以用delay來粗略延時,也可以用定時器精確延時;延時1S過後,讓LED1口輸出低電平,然後再延時1S。給這段程序用while或者for語句來循環5次,這樣就能得到啟動LED1(1S閃爍一次,持續10S)的動作了;
然後再這段語句後面啟動另一個定時器,用來定時20S。可以讓這個定時器定時50ms,然後循環變數加400次,就是20S的定時了。
在此期間,如果A鍵又按下了,就判斷看定時器是否循環超過400次,如果超過了,就說明A鍵按下距離前一個狀態已經超過20S了,這樣的話,就重復 啟動LED1(1S閃爍一次,持續10S)的動作,如果循環變數沒超過400次的話,就說明 20S內A鍵已經被再按一次了,這樣的話,就執行 LED2(0.5秒閃爍一次,持續20S) 這個動作。
而LED2(0.5秒閃爍一次,持續20S)的程序就是 LED2的IO口輸出高電平,然後延時0.5秒,然後LED2口輸出低電平,延時0.5秒。之後再用while或者for語句,循環這段程序10次,就能完成 LED2(0.5秒閃爍一次,持續20S)這個動作了。
當然,再鍵盤掃描程序中,如果按下的是B鍵的話,就直接讓LED2口輸出高電平。這樣,LED2就會一直亮了
⑵ 單片機C語言定時中斷LED燈程序求修改
#include<reg52.h>
sbit P00=P0^復0;
sbit key=P1^0;
unsigned int i=0;
void main(void)
{
TMOD=0x10;//設定定時器制的工作模式為定時器1方式1
TH1=15536/256;//向定時器裝入初值高八位
TL1=15536%256;//向定時器裝入初值低八位
EA=1;//開總開關
ET1=1;//開分開關
TR1=1;//啟動定時器
while(1)
{
if(key==0)TR1=0;
else TR1=1;
}
}
void t1(void) interrupt 3//定時器0服務函數
{
TH1=15536/256;//向定時器裝入初值高八位
TL1=15536%256;//向定時器裝入初值低八位
if(++i==30)//延時1.5S
{
i=0;
P00=~P00;//閃爍
}
}