📄 saver.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 + -