-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathswitch.h
118 lines (85 loc) · 2.46 KB
/
switch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* switch.h
*
* Created: 2012/6/15 0:29:29
* Author: Administrator
*/
#ifndef __SWITCH_H__
#define __SWITCH_H__
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
//#include "voltage_index.h"
#define SWITCH_AC_DDR DDRD
#define SWITCH_AC_PORT PORTD
#define SWITCH_AC_PIN PIND
#define SWITCH_AC_BIT 3
#define SWITCH_BC_DDR DDRD
#define SWITCH_BC_PORT PORTD
#define SWITCH_BC_PIN PIND
#define SWITCH_BC_BIT 1
#define Channel_select_DDR DDRC
#define Channel_select_PORT PORTC
#define Channel_A_select Channel_select_PORT&=(~(1<<PC4)) // C:PC5 B:PC3 A:PC4
#define Channel_B_select Channel_select_PORT&=(~(1<<PC3))
#define Channel_C_select Channel_select_PORT&=(~(1<<PC5))
#define Channel_clear Channel_select_PORT|=((1<<PC3)|(1<<PC4)|(1<<PC5))
/*
#define SWITCH_EN_DDR DDRD
#define SWITCH_EN_PORT PORTD
#define SWITCH_EN_PIN PIND
#define SWITCH_EN_BIT 4
#define VID_OUT_DDR DDRB
#define VID_OUT_PORT PORTB
#define Buttom_EN_DDR DDRD
#define Buttom_EN_PORT PORTD
#define Buttom_EN_PIN PIND
#define Buttom_EN_BIT 3
*/
#define AC_status() SWITCH_AC_PIN&(1<<SWITCH_AC_BIT)
#define BC_status() SWITCH_BC_PIN&(1<<SWITCH_BC_BIT)
//#define EN_status() SWITCH_EN_PIN&(1<<SWITCH_EN_BIT)
//#define Buttom_set() Buttom_EN_PIN&(1<<Buttom_EN_BIT)
void SWITCH_PORT_INI(void)
{
SWITCH_AC_DDR &= ~(1<<SWITCH_AC_BIT);
SWITCH_BC_DDR &= ~(1<<SWITCH_BC_BIT);
// SWITCH_EN_DDR &= ~(1<<SWITCH_EN_BIT);
// Buttom_EN_DDR &= ~(1<<Buttom_EN_BIT);
// VID_OUT_DDR=0xFF;
/*****atmega48***************************************/
EICRA |= (1<<ISC10); //INT1 下降沿触发中断
EIFR |= (1<<INTF1); //clear INTF1 flag
EIMSK |= (1 << INT1); //外部中断请求1中断使能
/**************************************************/
/***************ATmega8*************************/
/************************************************/
}
void Channel_init(void)
{
Channel_select_PORT|=0x38;//PC3,4,5 output high
Channel_select_DDR|=(1<<PC3)|(1<<PC4)|(1<<PC5);//PC3--5 output
}
//external interrupt 1 process
SIGNAL(INT1_vect)
{
//external interupt on INT1
cli(); //关闭总中断
// if(AC_status()) //猽牟祇, ┮A狠﹚琌筿キ, ぃノ耞
if(!(BC_status()))
{
if(volume_data>1)
volume_data--;
else
volume_data=1;
}
else
{
if(volume_data<255)
volume_data++;
else
volume_data=255;
}
sei();
}
#endif /* SWITCH_H_ */