专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用C语言实现键控彩灯系统

作者:佚名   来源:本站原创   点击数:  更新时间:2011年06月08日   【字体:

      用按键(采用外部中断方式)控制彩灯的运行。通过按动按键,彩灯在三种闪亮方式(左移,右移和自定义花样)之间切换。

        在主程序中,设置一个判断的的标志变量flag,当没有中断发生时,标志flag的值没有被改变,程序保持运行使彩灯按其中某一种花样闪亮显示。若按下键后,使单片机产生中断,中断函数被调用,则标志flag的值将发生一次改变(这里的中断函数就是修改flag的值),在退出中断后,主程序再次执行到判断标志flag时,由于标志flag的值已经是新的值,所以将执行另一彩灯控制子程序,彩灯将按另一种花样进行显示。

        需要说明一点是:如果产生中断的是低电平不是由按键产生的,而是由于其他按键产生的没有抖动的信号,在中断程序中则不需要消抖处理。

 源程序:

#include     "reg51.h"

#define   uchar  unsigned  char

uchar   flag;

uchar   light,assum;

void  delay05s()

{

    unsigned  char   i,j,k;

     for(i=5;i>0;i--)

      for(j=200;j>0;j--)

        for(k=250;k>0;k--);

}

void   delay10ms(void)

{

    unsigned   char  i,j;

   for(i=20;i>0;i--)

     for(j=250;j>0;j--)

} 

void   left()

{

   light=light<<1;

   if(light==1)  light=0x01;

   P2=~light;

}

void  right()

{

    light=light>>1;

    if(light==0)  light=0x80;

    P2=~light;

}

void  assum()

{

   uchar  code  dispcode[8]={0x7e,0xbd.0xdb,0xe7,0xdb,0xbd,0x7e,0xff};

   if(assum==7)   assum=0;

   else

  assum++;

}

void  main()

{

   IT0=1;

  EX0=1;

  EA==1;

  flag=1;

  light=0x01;

  assum=0;

  while(1)

    {

         switch(flag)

             {

                   case  1:  left();   break;

                   case  2:   right();    break;

                   case  3:   assum()   break;

             }

        delay05s();

    }

}

void  int-0()   interrupt   0

{

     delay10ms();

     if(INT0==0)

       {

          flag++;

          if(flag>3)   flag=1;

       }

}
关闭窗口

相关文章