老师的作业,一个定时器的应用,如题,麻烦大家帮一下,搞了通宵都做不出来.多谢!!!!!!!!!!!!!!!
请问大家有没有定时器的例子,我想在一个程序里,按一个按钮后,当到一定时间时,LED1灯亮起来,另一时段时LED2也亮起来
想实现的功能是:
一直接下A开关9秒后,判断B开关有没有按下,如果没有按下,则led_in亮起来,当15分钟后,Led亮起来,
现在一直按下A开关15分钟后,LED亮起来已可以实现
但A开关保持持续被按下9秒时,判断B开关有没有按下,如果没有按下,则led_in亮起来,这个不知怎样实现.
多谢!!!!!!!!!!!!!!!
下面是我现在的程序:
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit akey=P2^0; //A开关
sbit inkey=P2^1; //B开关
////////////////////////////
sbit led=P1^0; //
sbit led_in=p1^1
bit t_sen_flag=0;
int t_count=0;
///////////////////////////下面为中断程序模块/////////////////////////
void init() //初始化数据
{
TMOD = 0x11;
TH0 = 0x3C; //(12MHZ的晶振赋值TH0=0x3C;TL0=0xB0;)
TL0 = 0xB0;
EA = 1;
ET0 = 1;
TR0 = 0;
}
void Timer0(void) interrupt 1
{
TH0=0x3C;
TL0=0xB0;
t_flag_time=1;
}
////////////////////////////////////////////////////////////////////////////
uchar K=0;
void keyscan() //按键扫描
{
if(akey==0) //"A开关"是否被按下
{
delay(10);
if(akey==0)
{
while(!akey);
K=1;
}
}
if(inkey==0) //"B开关"是否被按下
{
delay(10);
if(inkey==0)
{
while(!inkey);
K=2;
}
}
}
////////////////A开关一直被按下,即就是A开关一直得到信号///////15000/////////////////////////////////////////////////////
if(t_sen_flag==1) //A key一直按着则会启动该程序
{
if(t_count<15000) //十五分钟时间判定
{t_count++;}
else
{
led=1;
t_count=0;
t_sen_flag=0;
TR0=0;}
}
/////////////////////////////////////////////////////////////////////////////
void main()
{
P1=0x90;
led=0;
led_in=0; //LED 初始化
init(); //中断服务初始化
while(1)
{
keyscan();
switch(K)
{
case 1: //按下A开关
{
TR0=0;
t_sen_flag=1;
t_count=0;
TR0=1;
};break;
default:break;
}
}
}
|