一个曝光箱 定时器+紫外灯管+程序

2020-02-04 09:03发布

本帖最后由 wzhllqwzc 于 2012-4-29 23:52 编辑

程序贴出来,高手指点!!


//**************************//
//MCU:STC11F02
//FREQ:内部
//程序功能:倒计时开关
//编写:
//编写日期:2011.11.06
//调试:
//修改时间:
//***********************************//


#include <reg51.h>
#define unchar unsigned char
#define unint unsigned int
//*************
sbit key_enter   =P3^3;   //按键:"确定" 外部中断1
sbit key_min =P3^4;   //按键:"减"
sbit key_add =P3^5;  //按键:"加"
sbit wei_min   =P3^0;    //位选秒百位
sbit wei_sec1  =P3^1;   //位选秒十位
sbit wei_sec0  =P3^2;   //位选秒个位
sbit ctr       =P3^7;        //控制端
sbit beep      =P1^0;       //声音控制位

unchar        t0_con,t0_con1; //T0计时器内部累加
unchar num;            //定义键盘输入值
//*******共阳极七段数码管数组******//
unchar code seg7[10]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
//*************//

//*****初始显示数组*******//
unchar code ready[3]={0x02,0x00,0xfc};
//*************//
/*************************************************************
* 毫秒级延时函数 *
调用函数必须给延时函数一个0~65535的延时值对应0MS到65535MS
/*************************************************************/
void delay (unint a){                //需要输入变量值0~65535
                unsigned char i;
                while( --a != 0){                //i 从0加到125,CPU大概就耗时1毫秒
                                for(i = 0; i < 125; i++);                //空指令循环125次               
                }
}
/*************************************************************

/**********显示程序***********************/
void display(unsigned char num,unsigned char t0_con1)
{
unint k,m,n;
k=t0_con1;
m=(num%100)/10;
n=(num%100)%10;
wei_min=0;
wei_sec1=0;
wei_sec0=0;
                                       
wei_min=1;
wei_sec1=0;
wei_sec0=0;
P1=seg7[k];

delay(10);  
wei_min=0;
wei_sec1=0;
wei_sec0=0;

wei_min=0;
wei_sec1=1;
wei_sec0=0;
P1=seg7[m];

delay(10);
wei_min=0;
wei_sec1=0;
wei_sec0=0;

wei_min=0;
wei_sec1=0;
wei_sec0=1;
P1=seg7[n];

delay(10);
wei_min=0;
wei_sec1=0;
wei_sec0=0;
}

/*****************************************************************************/


void display1(void)
{
wei_min=0;
wei_sec1=0;
wei_sec0=0;
delay(1);
wei_min=1;
wei_sec1=1;
wei_sec0=1;
P1=ready[0];
delay(1000);
wei_min=0;
wei_sec1=0;
wei_sec0=0;
delay(10);
wei_min=1;
wei_sec1=1;
wei_sec0=1;
P1=ready[1];
delay(1000);

wei_min=0;
wei_sec1=0;
wei_sec0=0;
delay(10);
wei_min=1;
wei_sec1=1;
wei_sec0=1;
P1=ready[2];
delay(1000);

}
/*******************

//*****************************************************************************/

/*****************************************************************************/
/*****************************************************************************/
//外部中断处理(扫描)//
void int1() interrupt 2 using 2
{
   if(INT1==0)
   {   TR0=1;
                  ctr=1;
        }
}
/*****************************************************************************/


/*****************************************************************************/


//时间发生程序(计数器中断T0)//
void t0_init (void) {//T0定时器初始化//
        TH0                =        0x3c;//载入初值 50ms(12MHZ)
        TL0                =        0xb0;
        TMOD          =        0x01;//定时计数器0工作方式1
        ET0                =        1;//开定时器中断
        TR0                =        0;//启动定时器
//        EA                   =        1;//开总中断
        t0_con        =        10;//1s

                    }
//********************
void t0 (void) interrupt 1 using 1{//定时器中断处理程序//
unchar i;
        TH0                =        0x3c;//载入初值          15536
        TL0                =        0xb0;
             t0_con--;         //到50ms计数减1
           if(t0_con <= 0){//到1s的处理
                          t0_con        =        10;
                        num--;
                        
                         if(num<=0&&t0_con1>0)
                                         {
                                           num=60;
                                                t0_con1--;
                                                 if(num<=0&&t0_con1<=0)
                                                  {
                                             num=0;
                                                  t0_con1=0;
                                                  }
                                          }

                 if (t0_con1==0&&num==0)
                 { ctr=0;
              TR0=0;
                        EA=0;
              display(num,t0_con1);
                                for (i=0;i<5;i++)
                                {beep=1;
                                delay(1000);
                           }
                  }
           }                                                       
        }       
               
/*****************************************************************************/

/*****************************************************************************/
void init1(void)
{
IT0=1;
IT1=1;
EX0=1;
EX1=1;
// EA=1;
PX1=1;
}

/*****************************************************************************/
//主程序//
void main(void){
  unchar i;
  
   init1();
   t0_init();
        beep=1;
        delay(10000);
        for (i=0;i<5;i++)
        {
        display1();
        }
        ctr=0;
        delay(100);
while(1){                  
    display(num,t0_con1);
    if(key_add==0)         // 时间调整加
           { delay(10);
                 if(key_add==0)
                   {delay(10);
                         EA=1;
                          if(num<60&&t0_con1<=9)
                           { num++;
                                 if(num>=60&&t0_con1<9)
                                {
                                num=0;
                                t0_con1++;
                                                                                    
                                         if(t0_con1>=9&&num>=60)
                                          {
                                          t0_con1=9;
                                          num=60;
                                          }
                                   }
                                  }
                        }                  
                 }
                  
                 
    if(key_min==0)                // 时间调整减
           { delay(10);
                         if(key_min==0)
                            delay(10);
                                  if(num>0&&t0_con1>=0)
                                  { num--;
                                         if(num<=0&&t0_con1>0)
                                         {
                                             t0_con1--;
                                        num=60;
                                                   if(num<=0&&t0_con1<=0)
                                                                  num=0;
                                                                  t0_con1=0;
                                                                  EA=0;
                                                                }
                                                 
                                         }

                               
                                   }

                                  
                                          
                                 }
                 
                }
   
          
图片发不上来,稍后上图



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。