永发信息网

高分:求20分钟单片机 延时C程序

答案:3  悬赏:30  手机版
解决时间 2021-03-10 02:30
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-03-09 02:50
要求:
89S51 单片机

四个按键A B C D 分别接到任意四个IO脚和地之间;
如果按一下A键时,过3分钟P2.0输出1;
如果按一下B键时,过10分钟P2.0输出1;
如果按一下C键时,过15分钟P2.0输出1;
如果按一下D键时,过20分钟P2.0输出1;
最佳答案
  • 五星知识达人网友:拜訪者
  • 2021-03-09 03:55


#include

sbit AA=P1^0;
sbit BB=P1^1;
sbit CC=P1^2;
sbit DD=P1^3;

sbit output=P2^0;//电平输出端口

volatile unsigned char complete_flag=1;//4种状态输出完成标志;
unsigned char minute_timer;//定时器定时时间;

void key_delay(unsigned char t)
{
unsigned char i,j;
while(t--)
for(i=10;i>0;i--)
for(j=112;j>0;j--);
}

void timer0_init()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
ET0=1;
EA=1;
}

void key_scan()
{
if((P1&0x0f)!=0x0f)
{

key_delay(10);
switch(P1&0x0F)
{
case 0x0e:TR0=1;minute_timer=3;break;
case 0x0d:TR0=1;minute_timer=10;break;
case 0x0b:TR0=1;minute_timer=15;break;
case 0x07:TR0=1;minute_timer=20;break;
default:break;
}
}
if(TR0)complete_flag=0;
}

void main()
{
timer0_init();
output=0;

while(1)
{
if(complete_flag)
{

key_scan();
}
}
}

void timer_isovf()interrupt 1
{
static unsigned char second,minute;
static unsigned char mini_second_50ms;//50ms

TH0=0x3c;
TL0=0xb0;

if(++mini_second_50ms>=20)
{
mini_second_50ms=0;
if(++second>=60)
{
second=0;
if(++minute>=minute_timer)
{
minute=0;
TR0=0;
complete_flag=1;
output=1;
}
}
}
}
全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-03-09 05:53
#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; } } }
  • 2楼网友:煞尾
  • 2021-03-09 05:25
告诉你大概思路 首先肯定要用个定时器 做成一个1秒的定时中断(我习惯用方式2循环4000次) 定义4个变量,将这4个变量先置0,当按键A B C D 按下时,变量置1 到3分钟时判断A的变量是否为1,为1的话P2.0输出1(P2.0先置0),同时将A的变量清掉,重新赋值,等待下一个3分钟再判断 B C D和A的方法一样
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯