搜索
bottom↓
回复: 5

流水灯控制程序

[复制链接]

出0入0汤圆

发表于 2013-12-23 22:32:18 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include<intrins.h>
void delay_ms(unsigned int x)   //误差 0us
{
    unsigned char a,b,c;
    for(c=x;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}
void main(void)
{
ET0=1;//外部中断0、1下降沿中断
ET1=1;
EX0=1;
EX1=1;
EA=1;
while(1)
      P0=0x00;  // P1的8个LED,高电平亮
}

void int0_int()  interrupt 0
{
        unsigned char i ,j, tmp=0x01;
        for(i=3; i>0; i--)
                   for(j=8; j>0; j--)
                   {
                           P0=tmp;
                           delay_ms(500); //500ms闪烁
                        tmp = _crol_(tmp,1);
                }       
}
void int1_int()  interrupt 2
{
        unsigned char i ,j, tmp=0x80;
        for(i=3; i>0; i--)
                   for(j=8; j>0; j--)
                   {
                           P0=tmp;
                           delay_ms(500); //500ms闪烁
                        tmp = _cror_(tmp,1);
                }       
}
请大家帮忙指导,我想点击中断0时,流水灯不断的工作,如果点击中断2,流水能马上转换,也要不断的工作。如果用一个中断控制多个流水灯状态,需要怎么修改程序,谢谢大家指点。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-12-24 23:04:03 | 显示全部楼层
修改了代码,为什么每次点击只运行一次就停了,我想如果点击一次流水灯不停的闪动,如果我再点击一次又换一个方式不停的闪动,请大家指点,谢谢!!!!

#include <reg51.h>
#include<intrins.h>

unsigned char tmod=0;
unsigned char i ,j,tmp;

void delay_1ms(void)
{
unsigned int i;
for (i=1;i<(unsigned int)(1144-2);i++);
}


void delay_ms(unsigned int n)
{
unsigned int i=0;
while(i<n)
{
  delay_1ms();
  i++;
}
}


void main(void)
{
ET0=1;
ET1=1;
EX0=1;
EX1=1;
EA=1;
while(1)
      P0=0x00;  
}

void int0(void)  interrupt 0
{

                switch(tmod)
                {
                case 0:
                                        tmp=0x01;
                                        for(j=8; j>0; j--)
                                        {
                                        P0=~tmp;
                                        delay_ms(50);
                                        tmp =tmp<<1;
                                        }       
                                        break;
                case 1:
                                        tmp=0x80;
                                        for(j=8; j>0; j--)
                                        {
                                        P0=~tmp;
                                        delay_ms(50);
                                        tmp = tmp>>1;
                                        }       
                                        break;
                case 2:
                           break;
               
                }
                tmod+=1;
                if(tmod==2)tmod=0;

        }

出0入0汤圆

发表于 2013-12-25 01:20:59 来自手机 | 显示全部楼层
点击一次,中断函数运行一次,运行完了中断函数后就执行main函数while(1)里代码了。

出0入0汤圆

 楼主| 发表于 2013-12-25 07:38:56 | 显示全部楼层
要点击一下不停地闪动那样怎麼修改代碼请大家指点,谢谢。

出0入0汤圆

 楼主| 发表于 2013-12-26 21:46:44 | 显示全部楼层
最新修改代码,为什么在中断内切换流水灯显示方式,要一直按住按键才能转换,请大家详解指导,谢谢。。




  1. #include <reg51.h>

  2. unsigned char temp;
  3. unsigned char Tmod=0,i = 0;

  4. void delay_1ms(void)
  5. {
  6. unsigned int i;
  7. for (i=1;i<(unsigned int)(1144-2);i++);
  8. }

  9. void delay_ms(unsigned int n)
  10. {
  11. unsigned int i=0;
  12. while(i<n)
  13. {
  14.   delay_1ms();
  15.   i++;
  16. }
  17. }

  18. void martix(unsigned int n)
  19. {
  20.         switch(n)
  21.         {
  22.                 case 0:
  23.                                                 temp= 0x80;
  24.                                                 for(i = 0; i < 8; i++)
  25.                                                         {
  26.                                                                 P0=~temp;
  27.                                                                 delay_ms(50);
  28.                                                                 temp >>= 1;
  29.                                                          }
  30.                                                         break;
  31.                         case 1:
  32.                                                 temp= 0x08;
  33.                                                 for(i = 0; i < 8; i++)
  34.                                                         {
  35.                                                                 P0=~temp;
  36.                                                                 delay_ms(50);
  37.                                                                 temp <<= 1;
  38.                                                          }
  39.                                                         break;
  40.         }
  41. }

  42. void init()
  43. {
  44.                                 temp= 0x01;
  45.                         for(i = 0; i < 8; i++)
  46.                                 {
  47.                                         P0=~temp;
  48.                                         delay_ms(50);
  49.                                         temp<<= 1;
  50.                           }
  51. }

  52. void main(void)
  53. {
  54. IT0=1;
  55. EX0=1;
  56. EA=1;
  57. P0 = 0xff;
  58. while(1)
  59.         {
  60.    init();
  61.   }
  62. }

  63. void int0(void)  interrupt 0
  64. {
  65.         EA=0;
  66.         delay_ms(10);
  67.         while(1)
  68.         {
  69.                 martix(Tmod);
  70.                 if (!INT0)
  71.                         {
  72.                                 delay_ms(50);
  73.                                 Tmod+=1;
  74.                                 if(Tmod==2)Tmod=0;
  75.                         }
  76.         }

  77. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-12-27 14:42:12 | 显示全部楼层
看帖要顶帖
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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