找回密码
 立即注册

QQ登录

只需一步,快速开始

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

帮忙看一下单片机流水灯程序哪里错了(亮灯控制出现问题) 请教高人

[复制链接]
跳转到指定楼层
楼主
ID:217754 发表于 2017-10-7 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在论坛找的一个流水灯程序 ,原来是p1一组流水灯。。自己改了一下。加了一组p2流水灯。增加p3-2和p3-3二个中断开关。

效果主要是,初始全灭,初按p3-2,开启流水灯,在流水灯亮一半时,如果遇到再按开关。流水灯会中断,从头再来。亮到尾。就是8次。停止,不循环。

二组灯不冲突。p3-2按下后,P0口亮一次。p3-3如果中途按下。则二个流水灯同时亮一次。

修改如下。修改后。亮灯控制出现问题:


#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;
sbit button1 = P3^3;//外部中断P3^2和P3^3
int b1=1;
bit press1 = 1;
uchar luishui1 = 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;
}

void main1()
{
    int j=0;
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    while(press1) P2=0xff;
        while(!press1)
        {
          b1=1;
          luishui1=0xfe;
          for(j=0;j<8;j++)
          {
           if(!b1)break;
           P1=luishui1;
           Delay(200);
           luishui1=_crol_(luishui1,1);                              
          }         
         if(j==8)press=11;
        }
}
void X1_INT()   interrupt 1
{  
  b1=0;
  press1=0;  
}

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

使用道具 举报

沙发
ID:232524 发表于 2017-10-8 11:09 | 只看该作者
兄弟,main函数不是这样用的啊,你这C语言掌握的不是很好啊,有时间还是先看看C语言再编程,加油
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^2;//外部中断P3^2和P3^3使用中断可以不用位定义
sbit button1 = P3^3;//外部中断P3^2和P3^3使用中断可以不用位定义
int i=8,j=8;
bit press = 1;
uchar luishui = 0xfe;
uchar luishui1 = 0xfe;

//*******延时函数*********//
void Delay(uchar z)
{
    uchar x, y;
    for(x = z; x > 0; x--)  for(y = 255; y > 0; y--);
}

//*********流水灯函数**********//
int choose()
{
  
  if(i>7)          //判断P0流水灯是否循环了1次(依次点亮8个灯)
  {
  P0=0xff;          //P0消隐
  }
  else                  //流水灯循环
  {
  P0=luishui;
  luishui=_crol_(luishui,1);
  i++;                 //判断点亮的次数
  }
  if(j>7)        //判断P1流水灯是否循环了一次
  {
  P1=0xff;
  }
  else
  {
  P1=luishui1;
  luishui1=_crol_(luishui1,1);
  j++;
  }
Delay(200);  //延时
if(i>7&&j>7)  //判断两个灯是否都循环完
return 0;
else
return 1;
}

//*********主函数***********//
void main()
{
    int k=1;
    IT0 = 1;//中断初始化
    EX0 = 1;
        IT1 = 1;
        EX1 = 1;
    EA = 1;
    while(press) {P1=0xff;P0=0xff;}        //等待按键按下
        while(!press)
        {
          while(k)
                  {
                   k=choose();
                  }      
         if(i==8&&j==8)press=1;
        }
}
//**********中断0子程序*********//
void X0_INT()   interrupt 0           //中断0的中断号为0
{
  press=0;
  luishui=0xfe;
  i=0;
}
//**********中断1子程序*********//
void X1_INT()   interrupt 2         //中断1的中断号为2,中断号1是定时器0的中断号
{  
  press=0;
  luishui1=0xfe;
  j=0;  
}

评分

参与人数 1黑币 +10 收起 理由
zqy181818 + 10 赞一个!

查看全部评分

回复

使用道具 举报

板凳
ID:217754 发表于 2017-10-8 12:06 | 只看该作者
liut_text 发表于 2017-10-8 11:09
兄弟,main函数不是这样用的啊,你这C语言掌握的不是很好啊,有时间还是先看看C语言再编程,加油
#include ...

谢谢老师。我刚学一周。在尝试跟一些例程。边写边学。。
回复

使用道具 举报

地板
ID:217754 发表于 2017-10-8 12:27 | 只看该作者
liut_text 发表于 2017-10-8 11:09
兄弟,main函数不是这样用的啊,你这C语言掌握的不是很好啊,有时间还是先看看C语言再编程,加油
#include ...

试了。真的很好。学习了。我今天又可以玩一天。慢慢看你的思路。再来谢谢你。。跟 我想的一样一样的
回复

使用道具 举报

5#
ID:232524 发表于 2017-10-8 18:08 | 只看该作者
xymiss 发表于 2017-10-8 12:27
试了。真的很好。学习了。我今天又可以玩一天。慢慢看你的思路。再来谢谢你。。跟 我想的一样一样的

保持这样的热情,会有进步的
回复

使用道具 举报

6#
ID:111634 发表于 2017-10-9 15:44 | 只看该作者
玩的实例很多,给你介绍仿真玩100例,《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行,可演示,可观测,程序语句条条有注解。与其他书比较一下,有比较才能有鉴别!绝不忽悠你!
回复

使用道具 举报

7#
ID:217754 发表于 2017-10-26 21:48 | 只看该作者
liut_text 发表于 2017-10-8 11:09
兄弟,main函数不是这样用的啊,你这C语言掌握的不是很好啊,有时间还是先看看C语言再编程,加油
#include ...

大哥。能不能帮忙加个看门狗,程序运行久了会卡住,灯一直亮着。再按也没效果了。需要手工重置程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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