[C语言]楼梯灯控制的 C 编程 for循环实现C语言精确延迟

两层楼楼梯中间有一灯 C,一层设置按钮开关 A,二层设置按钮开关 B;

希望达到以下功能:
1)如果灯不亮,按 A、B 两按钮均能时灯 C 点亮;
2)如果灯亮着,按 A、B 两按钮均能时灯 C 灭掉;
3)如果灯亮着,但是 5 分钟没有按键,则关掉灯 C;

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<dos.h>
#include<windows.h>
void delay(int t){
 int i, j, k,z;
 for (z = t; z > 0; z--){
  for (i = 4; i > 0; i--){
   for (j = 5; j > 0; j--){
    for (k = 248; k > 0; k--);
   }
  }
 }//由于不能直接使用delay函数;
} // 建立一个使用机器周期延迟时间的函数,循环次数时4*5*248=4960次,每次循环都会判断i>0和
//i++,因此每次循环会消耗两个机器周期,则sum=sum*2=9920;又因为每个机器周期时1us所以9920us=
//9.920ms约等于10毫秒 把辅助语句加起来差不多是10毫秒;
int main(){
 int A=0;
 int B=0;
 int C=0;
 int t = 300000;  //延迟300秒
 while (1){
  printf("1.请输入决定开关A是否是高电平:\n");
  scanf("%d", &A);
  printf("1.请输入决定开关B是否是高电平:\n");
  scanf("%d", &B);
  if (C==0 && (A == 0 && B == 0)){//开始时灯灭 判断A和B是否是低电平 如果是低电平灯C熄灭
   delay(3);
   C = 0;
   printf("灯熄灭\n");
  }
  else if (C == 0 && (A == 1 && B == 1)){ //判断A和B是否是高电平 如果是低电平灯C点亮
    delay(3);
    C = 1;
    printf("灯点亮\n");
    printf("选择是否关闭,若不按开关则输入和首次输入相同的值\n"); //灯打开后进行再次进行按下开关的判断
    printf("2.请输入决定开关A是否是高电平:\n");
    scanf("%d", &A);
    printf("2.请输入决定开关B是否是高电平:\n");
    scanf("%d", &B);
    if (A == 0 && B == 1){//若开关发生变动则会熄灭
     C = 0;
     printf("灯熄灭\n");
    }
    if (A == 1 && B == 0){//若开关发生变动则会熄灭
     C = 0;
     printf("灯熄灭\n");
    }
    delay(t);//开关没有变动 进入延迟函数delay进行延迟    
    C = 0;
    printf("五分钟内开关没有按键灯熄灭\n");
   }  
  else if (C == 0 && (A == 0 && B == 1)){ //判断A和B是否是高电平 如果是低电平灯C点亮
   delay(3);
   C = 1;
   printf("灯点亮\n");
   printf("选择是否关闭,若不按开关则输入和首次输入相同的值\n"); //灯打开后进行再次进行按下开关的判断
    printf("2.请输入决定开关A是否是高电平:\n");
   scanf("%d", &A);
   printf("2.请输入决定开关B是否是高电平:\n");
   scanf("%d", &B);
   if (A == 1 && B == 1){//若开关发生变动则会熄灭
    C = 0;
    printf("灯熄灭\n");
   }
   if (A == 0 && B == 0){//若开关发生变动则会熄灭
    C = 0;
    printf("灯熄灭\n");
   }
   delay(t);//开关没有变动 进入延迟函数delay进行延迟    
   C = 0;
   printf("五分钟内开关没有按键灯熄灭\n");
  }
  else if (C == 0 && (A == 1 && B == 0)){ //判断A和B是否是高电平 如果是低电平灯C点亮
   delay(3);
   C = 1;
   printf("灯点亮\n");
   printf("选择是否关闭,若不按开关则输入和首次输入相同的值\n"); //灯打开后进行再次进行按下开关的判断
    printf("2.请输入决定开关A是否是高电平:\n");
   scanf("%d", &A);
   printf("2.请输入决定开关B是否是高电平:\n");
   scanf("%d", &B);
   if (A == 1 && B == 1){//若开关发生变动则会熄灭
    C = 0;
    printf("灯熄灭\n");
   }
   if (A == 0 && B == 0){//若开关发生变动则会熄灭
    C = 0;
    printf("灯熄灭\n");
   }
   delay(t);//开关没有变动 进入延迟函数delay进行延迟    
   C = 0;
   printf("五分钟内开关没有按键灯熄灭\n");
  }
   else {
    printf("输入错误\n");//如果数值输入错误则会报错;
   }
 }
 system("pause");
 return 0;
}

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值