标题: 求高手帮忙改一段代码 [打印本页]

作者: xymiss    时间: 2017-10-3 03:05
标题: 求高手帮忙改一段代码
帮忙改成按一下按键流水灯开始 ,再按一下中段并重新开始。不按不亮 每按一下只走一遍。不循环。谢谢!
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^0;
uchar press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
    uchar x, y;
    for(x = z; x > 0; x--)  for(y = 255; y > 0; y--);
}
void main()
{
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    while(1) {
      if(press == 1)   P1 = 0xff;
      if(press == 0)  {
        P1 = luishui;
        luishui = _crol_(luishui, 1);
        Delay(200);  
      }
    }
}
X0_INT()   interrupt 0
{
    press += 1; if(press == 2)  press = 0;
    Delay(10);  
    while(button == 0);
}



作者: liut_text    时间: 2017-10-3 03:05
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^2;//外部中断P3^2和P3^3
int b=1;
bit press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
    uchar x, y;
    for(x = z; x > 0; x--)  for(y = 255; y > 0; y--);
}
void main()
{
    int i=0;
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    while(press) P1=0xff;
        while(!press)
        {
          b=1;
          luishui=0xfe;
          for(i=0;i<8;i++)
          {
           if(!b)break;
           P1=luishui;
           Delay(200);
           luishui=_crol_(luishui,1);                               
          }         
         if(i==8)press=1;
        }
}
void X0_INT()   interrupt 0
{  
  b=0;
  press=0;  
}
你看看是不是这样
作者: wulin    时间: 2017-10-3 11:37
外部中断P3.2~P3.3
作者: wulin    时间: 2017-10-3 13:42
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^2;
uchar press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
        uchar x, y;
        for(x = z; x > 0; x--)  
                for(y = 255; y > 0; y--);
}
void main()
{
        P3=0x0f;
        IT0 = 1;
        EX0 = 1;
        EA = 1;
        while(1)
        {
                if(press == 1)   
                        P1 = 0xff;
                if(press == 0)  
                {
                        P1 = luishui;
                        luishui = _crol_(luishui, 1);
                        Delay(250);  
                        if(P1 == 0x7f)  
                                press = 1;
                }
        }
}
X0_INT()   interrupt 0
{
        press = 0;
//        if(press == 2)  
//        press = 0;
//        Delay(10);  
//        while(button == 0);
}

作者: 不倒翁.WZT    时间: 2017-10-5 07:07
标题: RE: 求高手帮忙改一段代码
#include<reg51.h>             //51系列单片机头文件
#include<intrins.h>           //左右循环头文件
#define uint unsigned int     //宏定义
#define uchar unsigned char   //宏定义
void delayms(uint);           //声明子函数
uchar n;                      //定义一个变量,用来控制循环次数
uchar aa;                     //定义一个变量,用来给P1口赋值
void main()                   //主函数
{
        IT0=1;       //下降沿触发
        EX0=1;       //INT0中断允许
        IT1=1;       //下降沿触发
        EX1=1;       //INT1中断允许
        EA=1;        //总中断允许        //P1口赋初值11111110
  while(1){}                   //大循环
}
void delayms(uint X)       //延时子函数
{
        uint i,j;                //定义i,j
        for(i=X;i>0;i--)       //i=xms即延时约xms毫秒
        for(j=110;j>0;j--);      
}
void  INT0_1(void) interrupt 0  using 1
{  
        EX0=0;   //进入外部INT0中断关闭,防止误操作
        aa=0x01;
        P0=aa;                //先点亮一个发光管
        aa=_crol_(aa,1);      //将aa循环左移1位后再赋给aa         
        delayms(500);         //调用延时500ms
        EX0=1;   //中断函数结束,外部INT0中断打开,中断生效
}       

作者: xymiss    时间: 2017-10-5 22:43
本帖最后由 xymiss 于 2017-10-6 22:49 编辑
wulin 发表于 2017-10-3 13:42
#include
#include
#define uchar unsigned char
谢谢老师。明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1