单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 296|回复: 3
打印 上一主题 下一主题
收起左侧

教学楼照明灯单片机控制系统的时间判断程序怎么写?求思路

[复制链接]
跳转到指定楼层
楼主
向大佬求助啊!这个是教学楼照明灯控制系统的部分程序,case 9 的单独控制LED灯的程序单独使用时可以的,但是想要他在规定时间里面完成自动打开或者关闭的话就会有冲突,我知道从case 9出来就会进入tcontrol的判断,所以会出现LED灯闪现的情况,现在就是想怎么让灯能够在设置的时间里面自动开关同时又能够手动干涉!其中的h1,h2……就是四个时间段的时钟,m1,m2……就是四个时间段的分钟。









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
xiaozhong1314 发表于 2019-7-14 12:30 | 只看该作者
程序呢
回复

使用道具 举报

板凳
 楼主| 伽蓝半城沙 发表于 2019-7-15 09:11 | 只看该作者
  1. void main (void)
  2. {
  3.         unsigned char num;
  4.         kai();//打开所有灯
  5.         Init_Timer0();
  6.         Init_INT0();
  7.         while (1)         //主循环
  8.         {
  9.                 KeyPort=0xf0;// 赋值用于中断检测
  10.                 if(KeyPressFlag==1)
  11.                 {
  12.                         KeyPressFlag=0;  //按键标志清零,以便下次检测
  13.                         num=KeyPro();    //按键响应返回给num
  14.                         if(num!=0xff)
  15.                         {
  16.                                 switch(num)
  17.                                 {
  18.                                         case 12://九个模式,第九个为单独控灯
  19.                                         {
  20.                                                 MODE=MODE+1;
  21.                                                 if(MODE>9)MODE=0;       
  22.                                                 break;
  23.                                         }
  24.                                        
  25.                                         case 0:
  26.                                         case 1:
  27.                                         case 2:
  28.                                         case 3:
  29.                                         case 4:
  30.                                         case 5:
  31.                                         case 6:
  32.                                         case 7:
  33.                                         case 8:
  34.                                         case 9:
  35.                                         {}
  36.                                         default:break;
  37.                                 }
  38.                         }
  39.                 }
  40.                 switch(MODE)
  41.                 {
  42.                         case 0://显示所有时分秒
  43.                         {}
  44.                         case 1://S1        时间段1的hour1
  45.                         {}
  46.                         case 2://F1        时间段1的minute1
  47.                         {}
  48.                         case 3://S2        时间段2的hour2
  49.                         {}
  50.                         case 4://F2        时间段2的minute2
  51.                         {}
  52.                         case 5://S3        时间段3的hour3
  53.                         {}
  54.                         case 6://F3        时间段3的minute3
  55.                         {}
  56.                         case 7://S4        时间段4的hour4
  57.                         {}
  58.                         case 8://F4        时间段4的minute4
  59.                         {}
  60.                         case 9://单独控制LED灯
  61.                         {
  62.                                 TempData[0]=0x39;//高电平有效 C
  63.                                 TempData[1]=0x3f;//高电平有效 O
  64.                                 TempData[2]=0x37;//高电平有效 N
  65.                                 TempData[3]=0x78;//高电平有效 t
  66.                                 TempData[4]=0x70;//高电平有效 r
  67.                                 TempData[5]=0x3f;//高电平有效 O
  68.                                 TempData[6]=0x38;//高电平有效 L
  69.                                 TempData[7]=0;
  70.                                 if(KeyPressFlag==1)
  71.                                 {
  72.                                         KeyPressFlag=0;  //按键标志清零,以便下次检测
  73.                                         num=KeyPro();    //按键响应返回给num
  74.                                         if(num!=0xff)
  75.                                         {
  76.                                                 switch(num)
  77.                                                 {
  78.                                                         case 1:LED1=~LED1;break;
  79.                                                         case 4:LED2=~LED2;break;
  80.                                                         case 7:LED3=~LED3;break;
  81.                                                         case 0:LED4=~LED4;break;
  82.                                                         default:break;
  83.                                                 }
  84.                                         }
  85.                                 }
  86.                         }
  87.                 }
  88.                 tcontrol(hour,minute);
  89.         }
  90. }

  91. void guan(void)//关灯
  92. {        //此方法使用bit位对单个端口赋值
  93.         //将P1.0口赋值 1,对外输出高电平
  94.         LED1=1;
  95.         LED2=1;
  96.         LED3=1;
  97.         LED4=1;
  98. }
  99. void kai(void)//开灯
  100. {        //此方法使用bit位对单个端口赋值
  101.         //将P1.0口赋值 0,对外输出低电平
  102.         LED1=0;
  103.         LED2=0;
  104.         LED3=0;
  105.         LED4=0;
  106. }
  107. void stay(void)//保持
  108. {
  109.         LED1=LED1;
  110.         LED2=LED2;
  111.         LED3=LED3;
  112.         LED4=LED4;
  113. }
  114. void tcontrol(int hour,int minute)//时间控制开关
  115. {
  116.         stay();
  117.         if(hour>=h1||hour<h2)        //时间段1        关
  118.         {
  119.                 guan();
  120.                 if(minute>=m1||minute<m2)guan();
  121.         }
  122.         else if(hour>=h2&&hour<h3)        //时间段2        开
  123.         {
  124.                 kai();
  125.                 if(minute>=m2||minute<m3)kai();
  126.         }
  127.         else if(hour>=h3&&hour<h4)        //时间段3        关
  128.         {
  129.                 guan();
  130.                 if(minute>=m3||minute<m4)guan();
  131.         }
  132.         else if(hour>=h4&&hour<h1)        //时间段4        开
  133.         {
  134.                 kai();
  135.                 if(minute>=m4||minute<m1)kai();
  136.         }
  137. }
复制代码


程序可能审核没通过,在这里,这是部分程序
回复

使用道具 举报

地板
 楼主| 伽蓝半城沙 发表于 2019-7-15 09:16 | 只看该作者




程序在这里,只能用图片格式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表