找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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









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

使用道具 举报

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

使用道具 举报

板凳
ID:582087 发表于 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. }
复制代码


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

使用道具 举报

地板
ID:582087 发表于 2019-7-15 09:16 | 只看该作者




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

使用道具 举报

5#
ID:951817 发表于 2021-7-11 16:41 | 只看该作者
伽蓝半城沙 发表于 2019-7-15 09:16
程序在这里,只能用图片格式

在板子上按+按键和0按键,出现的5100是什么意思?
回复

使用道具 举报

6#
ID:844772 发表于 2021-7-11 19:59 | 只看该作者
你就只管到点开或关就行,不用反复判断是否该开或关;这样就跟手动不冲突了。
回复

使用道具 举报

7#
ID:161164 发表于 2021-7-12 01:24 | 只看该作者
自動化控制,手動的權限大於自動
你必需讓系統知到什麼命令是自動什麼是手動
方法有二
1. 為各燈加上各自的手/自控制切換按鈕
2. 把某按鈕命令(如關燈)設為手動,當後就開燈把權限交還自動
如按鈕有限,就選方法2
  1.                                                 switch(num)
  2.                                                 {//Manual_LEDx 为bit类型
  3.                                                         case 1:Manual_LED1=~Manual_LED1;break;
  4.                                                         case 4:Manual_LED2=~Manual_LED2;break;
  5.                                                         case 7:Manual_LED3=~Manual_LED3;break;
  6.                                                         case 0:Manual_LED4=~Manual_LED4;break;
  7.                                                         default:break;
  8.                                                 }

  9. void kai(void)//开灯
  10. {        //此方法使用bit位对单个端口赋值
  11.         //将P1.0口赋值 0,对外输出低电平
  12.         LED1=Manual_LED1;
  13.         LED2=Manual_LED2;
  14.         LED3=Manual_LED3;
  15.         LED4=Manual_LED4;
  16. }
复制代码



评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:934353 发表于 2021-7-12 17:27 | 只看该作者
设置手动开关灯的权限大于自动的,我觉得可以用中断,外部中断或者定时器中断都可
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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