|
程序名: 占用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;
}
}
}