3648|8

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

希望大虾们能来帮帮忙啊!!! [复制链接]

小弟现在想实现下面的一个控制(C语言):有三组开关,每组三个开关,第一组开关任意一个闭合,那么1号灯立刻亮,延时5秒4号灯亮;
                                                                 第二组开关任意一个闭合,那么2号灯立刻亮,延时5秒5号灯亮;
                                                                 第三组开关任意一个闭合,那么3号灯立刻亮,延时5秒6号灯亮;  这三组互不干扰。


小弟用时间片轮循的方法做 但是仍然会出现各个灯延时时间不一的情况 先按的5秒左右 第二个7秒左右 第三个9秒左右  如果同时按的话也不一样..... 希望大虾们帮帮忙啊!!!

最新回复

谢谢你们 给我这么多提示 做得啦  尤其要谢谢lbing7 !   详情 回复 发表于 2008-9-2 16:13
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
代码贴出来吧
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
估计逻辑有点混乱。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
定时器不停计时,如果延迟5秒,就给这个任务一个flag=5,定时器到的时候触发中断,在中断里减这个flag,具体的参照ucos的任务调度。。。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
你怎么延时的?

感觉是你的延时被别的地方给占用了...


 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
把一个灯看成是这样的一个东西:

structled
{
    bool State;
    unsigned int timeLeave;
}

在main里死循环查控制,有合适的状态
就把State打开,把timerLeave初始化够5S

在中断里面,不停地减timeLeave

如果为0,则关灯...

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
小弟第一次发帖 能得到你们的帮助 真是感到很幸运  谢谢   下面是我的程序  还是那个问题  

(我用P1_0——P1_3作为第一组开关(4个开关),
                                P1_4——P1_7作为第二组开关(4个),
                                P2_0——P2_2作为第三组开关(3个开关),
                                P0_0——P0_2作为立刻亮的那三盏灯(1,2,3号),
                                P0_3——P1_5作为延时亮的那三盏灯(4,5,6号),所有的开关和灯都是低电平有效.....


#include
#include
  unsigned char status=0;
  unsigned long time1=0,time2=0,time3=0;
  unsigned int flag1=0,flag2=0,flag3=0;


void delay(void){
        for(;flag1==1||flag2==1||flag3==1;){
                if(flag1==1){
                        time1--;
                        if(time1==0){
                                flag1=0;
                                P0_0=0;
                        }
                }
                if(flag2==1){
                        time2--;
                        if(time2==0){
                                flag2=0;
                                P0_1=0;
                        }
                }

                if(flag3==1){
                        time3--;
                        if(time3==0){
                                flag3=0;
                                P0_2=0;
                        }
                }
        }
}
       


void t0(void) interrupt 1
{

           if((P1_0==0||P1_1==0||P1_2==0||P1_3==0)&&flag1==0){
                P0_3=0;
                flag1=1;
                time1=50000;
        }

           if((P1_4==0||P1_5==0||P1_6==0||P1_7==0)&&flag2==0){
                P0_4=0;
                flag2=1;
                time2=50000;
        }

                   if((P2_0==0||P2_1==0||P2_2==0)&&flag3==0){
                P0_5=0;
                flag3=1;
                time3=50000;
        }




}



void main(void)

{
  
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  TR0=1;
  ET0=1;
  EA=1;


        while(1){
                delay();
        }
       
                                                          
}


我也看了 一点实时多任务的程序设计,虽然不是很懂,不过它们都是分优先级 而我的任务 我不太懂该怎么分 因为是哪一组开关先按哪一个的优先级高 如果同时按 那大家都应该一样 而且互不干扰  希望大虾们能给些更具体的建议 !谢谢!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
不好意思哈 上面那个有点错  应该是 P0_3——P0_5作为立刻亮的那三盏灯(1,2,3号),
                                                            P0_0——P0_2作为延时亮的那三盏灯(4,5,6号),所有的开关和灯都是低电平有效.....

  
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

9
 
谢谢你们 给我这么多提示 做得啦  尤其要谢谢lbing7 !
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表