|
程序名: 占用CPU延時程序應用實例
硬件支持: 12MHz
接口說明: P1接口8個LED
/*********************************************************************************************
說明:本程序可使單片機P1.0接口上的LED燈以4秒為周期閃爍。
/*********************************************************************************************/
#include <AT89X52.h> //頭文件定義
/*************************************************************
* IO定義 *
/*************************************************************/
sbit LED = P1 ^ 0; //定義P1.7為LED控制口,低電平使能
/*************************************************************
* 毫秒級延時函數 *
調用函數必須給延時函數一個0~65535的延時值對應0MS到65535MS
/*************************************************************/
void Delay (unsigned int a){ //需要輸入變量值0~65535
unsigned int i;
while( --a != 0){ //i 從0加到600,CPU大概就耗時1毫秒
for(i = 0; i < 600; i++); //空指令循環
}
}
/*************************************************************
* 主函數 *
實驗板上連接到單片機上的LED閃爍程序
/*************************************************************/
void main (void){ //
while(1){ //無限循環以下程序
LED = ~LED; //取LED相反狀態,閃爍
Delay(4000); //修改這里的數值看看會有什么變化
} //(0~65535之間)
}
要求:
89C52 IC 單片機
4分半鐘 IC 1腳 低電平
5分鐘 IC 2腳 低電平
10分鐘 IC 3腳 低電平
15分鐘 IC 4腳 低電平
注:1.硬件應使用12MHz晶振;
2.程序使用定時器0,溢出周期50ms,計90次溢出為
4分半,其它以此類推,15分到時IC4腳(P1.3)輸
出低電平,然后關閉定時器,停止計數。
-------------------------------------------------*/
#include<reg52.h>
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
unsigned char Count=0;
unsigned char Half_Min=0;
void main()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
ET0=1;
EA=1;
TR0=1;
while(1);
}
void timer_0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
Count++;
if(Count>10) //大于10則為500ms
{Half_Min++;
Count=0;
switch(Half_Min)
{
case 9:P10=0;break; //4分半
case 10:P11=0;break; //5分
case 20:P12=0;break; //10分
case 30:P13=0;TR0=0;break; //15分
default:break;
}
}
}