打印
[PIC®/AVR®/dsPIC®产品]

请问诸位大神,为啥我这段程序急停无效啊??(完全自学,唉,没头绪!)

[复制链接]
1264|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wei565831866|  楼主 | 2015-11-3 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//采用芯片为:PIC16F877A
//实现LED灯的顺启逆停与急停
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define IN 4                //定义进去时间为4s
#define OUT 3               //定义3s后出来
#define DOWN 6              //定义下压时间为6s
__CONFIG(0X3F32);
uchar LEIJIA,SEC;               //声明变量;累加,秒

void delay(uint x)
{
    uint i,j;
    for(i=x;i>0;i--)
        for(j=123;j>0;j--);
}

void init_IO()
{
    TRISB = 0xFF;               //按键为输入
    TRISC = 0X00;               //RC口输出为LED
//    TRISE = 0X00;
   
    RC1 = 0;
    RC2 = 1;
}

void init_timer0()
{
    GIE = 1;
    PEIE = 0;
    T0IE = 0;
    T0IF = 0;
    T0CS = 0;
    T0SE = 0;
    PSA = 0;
    PS2 = 1;PS1 = 1;PS0 = 1;
    LEIJIA = 0;
}

void start_timer0()
{
    GIE = 1;
    PEIE = 1;
    T0IE = 1;
    T0IF = 0;
}

void stop_timer0()
{
    T0IE = 0;
    T0IF = 0;
    TMR0 = 0X00;
    LEIJIA = 0;
}

void interrupt ISR()
{
    TMR0 = 70;
    if(T0IF == 1)
        T0IF = 0;
        LEIJIA ++;
        
    if(LEIJIA == 20)                //定时到1s
        {
        LEIJIA = 0;
        SEC--;
    }
}

void key_scan()
{
    if((RB0) == 0)              //按下按钮1(启动)
    {
        delay(2);
        if((RB0) == 0)
        {
            while(!RB0);
            RC1 = 0;            //LED1----亮

            SEC = IN;           //亮4s
            start_timer0();
            while(!(SEC == 0));
            stop_timer0();
            RC2 = 0;            //LED2----亮

            SEC = DOWN;         //亮6s
            start_timer0();
            while(!(SEC == 0));
            stop_timer0();
            RC1 = 1;            //LED1----灭

            SEC = OUT;          //亮3s
            start_timer0();
            while(!(SEC == 0));
            stop_timer0();
            RC2 = 1;            //LED2----灭
            
            if(RB1 == 0)                    //按下按钮2(急停)
            {
                delay(10);
                if(RB1 == 0)
                {
                    while(!RB1);
                    RC1 = 1;                //LED1----灭
                    RC2 = 1;                //LED2----灭
                }
            }
        }
    }
}

void main()
{
    init_IO();
    init_timer0();
    start_timer0();
    stop_timer0();
    while(1)
    {
        key_scan();
    }
}
沙发
NE5532| | 2015-11-4 08:35 | 只看该作者
我拿到楼主的程序也没头绪,急停无效是啥意思?

使用特权

评论回复
板凳
wei565831866|  楼主 | 2015-11-4 08:43 | 只看该作者
NE5532 发表于 2015-11-4 08:35
我拿到楼主的程序也没头绪,急停无效是啥意思?

就是在灯亮的过程中,按下急停,灯不会灭啊。

使用特权

评论回复
地板
yklstudent| | 2015-11-4 11:07 | 只看该作者
流水线程序,一撸到底

使用特权

评论回复
5
mzb2012| | 2015-11-4 13:00 | 只看该作者
本帖最后由 mzb2012 于 2015-11-4 13:01 编辑
if(RB1 == 0)                    //按下按钮2(急停)
            {
                delay(10);
                if(RB1 == 0)
                {
                    while(!RB1);
                    RC1 = 1;                //LED1----灭
                    RC2 = 1;                //LED2----灭
                }
            }

不能放在  if((RB0) == 0)     的大括号里,这样的话就是按下RB0同时在按下RB1

使用特权

评论回复
6
JY-DX-JY| | 2015-11-5 09:09 | 只看该作者
灯亮灭的时间太长了,没时间响应按键。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

34

帖子

1

粉丝