⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saver.c

📁 Night Light use by PIC12c508 with C language, including circuit. Anyone can do it yourself.
💻 C
字号:
// Night Lamp Saver V3.2
// PIC12C508 LP Xtal 32768Hz runs saver.c
// The SAVER.C was compiled by PCW PIC C Compiler V2.266
// March 6,1999
// Copyright(C) 1999 W.SIRICHOTE


#include <SAVER.H>
#fuses LP,NOPROTECT,NOWDT // must include this line !!

// installation test 1 min turn on
#define onHour1   8
#define onMin1    0
#define offHour1  8
#define offMin1   1

// daily on/off, say 19:00 to 22:00
#define onHour2   19
#define onMin2    0
#define offHour2  22
#define offMin2   0

// set clock to 8:00 when press set time button once
#define setHour   8
#define setMin    0

// rename i/o devices
#define LAMP PIN_B0
#define LED  PIN_B1
#define KEY  PIN_B2

// variables declaration
char sec,min,hour,flag1,rate,temp;

// Bit assignment of flag1
// mask byte   effect
// 0x20        installation test on/off(0)
// 0x40        compare time enable bit(1)
// 0x10        blink disable (1)
// 0x01        button pressed (1)

time() // update clock every 1 second
{
   sec++;
   if ( sec >= 60)
      {
       sec = 0;
       min++;
          if ( min >= 60)
             {
             min = 0;
             hour++;
               if ( hour >= 24)
                  hour = 0;
             }
      }
 }

testOnOff()
{
    if ((flag1 & 0x20) == 0)
    {
        if(hour == onHour1 && min == onMin1)
            {
            flag1 |= 0x10; // disable blink
            output_high(LAMP); // on triac
            }
        if(hour == offHour1 && min == offMin1)
            {
             output_low(LAMP); // off triac
             flag1 |= 0x20; // disable further test on off
             flag1 &= ~0x10; // reenable blink
            }
    }
}

compareTimeOn_Off()
{
    if((flag1 & 0x40) != 0) // allow entering only after 8:00 has been set
    {
       testOnOff();
    if(hour == onHour2 && min == onMin2)
        {
        flag1 |= 0x10; // disable further blink
        output_high(LAMP); // turn lamp on
        }
    if(hour == offHour2 && min == offMin2)
        {
        output_low(LAMP); // turn lamp off
        flag1 &= ~0x10; // reenable blink
        }
    }
}

setTime()
{
   if ((flag1 & 0x01) != 0) //input(KEY)==0)
      {
      hour = setHour;
      min = setMin;
      sec = 0;
      flag1 |= 0x40;  // enable compare time
      flag1 &= ~0x20;  // reenable test on off
      flag1 &= ~0x01; // clear key press bit
      rate = 5;
      }
}

blink() // turn LED on 100 ms
 {
   output_low(LED);
   delay_ms(100);
   output_high(LED);
 }


fireLED()
{
   if ((flag1 & 0x10) == 0) // blink only triac is not turned on
   {
   temp++;
	if ( temp == rate)
      {
      blink();
      temp = 0;
      }
   }
}

chkKEY()
{
   if(input(KEY)==0)
      {flag1 |= 0x01; // set bit 0 telling key been pressed
       flag1 |= 0x10; // disable firing LED
       output_high(LAMP); // turn on lamp when press button
      }
}


main()
{

   setup_counters(RTCC_INTERNAL,RTCC_DIV_32); // [32768/4]/32 = 256Hz

   output_low(LAMP);
   output_high(LED);
   flag1 = 0;
   rate = 1;
   temp = 0;
   tmr0 = 0;
   hour = 18;
   min = 0;
   sec = 0;

   while(1)
   {
      while( tmr0 != 0) // while waiting 1sec elapsed check button also
        chkKEY();
   // the following tasks executed every 1 second
        time();
        compareTimeOn_Off();
        fireLED();
        setTime();

   }
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -