📄 skm_fireserviceinterface.c
字号:
/*
* Project name:
Interface
* Test configuration:
MCU: PIC16F877A
Dev.Board: EasyPIC2
Oscillator: HS, 08.0000 MHz
Ext. Modules: -
SW: mikroC v8.2
* NOTES:
None.
*/
unsigned door;
unsigned st1;
unsigned st2;
unsigned st3;
void interrupt() {
door++; // Increment value of door on every interrupt
st1++; // Increment value of st1 on every interrupt
st2++; // Increment value of st1 on every interrupt
st3++; // Increment value of st1 on every interrupt
TMR0 = 96;
INTCON = 0x20; // Set T0IE, clear T0IF
}
void main() {
char recall = 0;
char on1 = 0;
char on2 = 0;
char on3 = 0;
/* DEFINE INPUTS AND OUTPUTS */
OPTION_REG = 0x84; // Assign prescaler to TMR0
TMR0 = 96; // Timer0 initial value
INTCON = 0xA0; // Enable TMRO interrupt
door = 0; // Initialize door
st1 = 0; // Initialize st1
st2 = 0; // Initialize st2
st3 = 0; // Initialize st3
TRISA = 0; // PORTA is digital output
PORTA = 0;
ADCON0 = 0;
ADCON1 = 6;
CMCON = 7;
TRISB = 0; // PORTB is output
PORTB = 0; // Initialize PORTB (all outputs are 0)
TRISC = 0x07; // PORTC is output Except C0, C1 and C2
PORTC = 0; // Initialize PORTC (all outputs are 0)
TRISD = 0x03; // PORTD is output Except D0 and D1
PORTD = 0; // Initialize PORTD (all outputs are 0)
TRISE = 0x07; // PORTE is output Except E0, E1 and E2
PORTE = 0; // Initialize PORTE (all outputs are 0)
do {
/* RECALL */
if (Button(&PORTE, 0, 20, 1)) // detect logical one on RECALL INPUT pin
recall = 1;
if (recall && Button(&PORTE, 0, 20, 0)) { // detect one-to-zero transition on RECALL INPUT pin
PORTB.F5 = ~PORTB.F5;
recall = 0;
}
/* ON1 */
if (Button(&PORTE, 1, 20, 1)) // detect logical one on ON1 INPUT pin
on1 = 1;
if (on1 && Button(&PORTE, 1, 20, 0)) { // detect one-to-zero transition on ON1 INPUT pin
PORTB.F1 = ~PORTB.F1;
on1 = 0;
}
/* ON2 */
if (Button(&PORTC, 2, 20, 1)) // detect logical one on ON2 INPUT pin
on2 = 1;
if (on2 && Button(&PORTC, 2, 20, 0)) { // detect one-to-zero transition on ON2 INPUT pin
PORTD.F6 = ~PORTD.F6;
on2 = 0;
}
/* ON3 */
if (Button(&PORTC, 0, 20, 1)) // detect logical one on ON3 INPUT pin
on3 = 1;
if (on3 && Button(&PORTC, 0, 20, 0)) { // detect one-to-zero transition on ON3 INPUT pin
PORTD.F4 = ~PORTD.F4;
on3 = 0;
}
/* DOOR */
if (Button(&PORTD, 0, 20, 1)) { //Detect logical zero on DOOR INPUT
PORTD.F2 = 1; // Switch on door lock solenoid
door = 0; //Reser counter
}
if (door == 2000)
PORTD.F2 = 0; // End of delay, Switch off door lock solenoid
/* ST1 */
if (Button(&PORTD, 1, 20, 1)) { //Detect logical zero on ST1 INPUT
PORTD.F7 = 1; // Switch on ST1 OUTPUT
st1 = 0; //Reser counter
}
if (st1 == 400)
PORTD.F7 = 0; // End of delay, Switch off ST1 OUTPUT
/* ST2 */
if (Button(&PORTC, 1, 20, 1)) { //Detect logical zero on ST2 INPUT
PORTD.F5 = 1; // Switch on ST2 OUTPUT
st2 = 0; //Reser counter
}
if (st2 == 400)
PORTD.F5 = 0; // End of delay, Switch off ST2 OUTPUT
/* ST3 */
if (Button(&PORTE, 2, 20, 1)) { //Detect logical zero on ST3 INPUT
PORTD.F3 = 1; // Switch on ST3 OUTPUT
st3 = 0; //Reser counter
}
if (st3 == 400)
PORTD.F3 = 0; // End of delay, Switch off ST3 OUTPUT
} while(1); // endless loop
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -