📄 inandout.lst
字号:
C51 COMPILER V8.01 INANDOUT 09/27/2008 14:40:16 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE INANDOUT
OBJECT MODULE PLACED IN INANDOUT.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE INANDOUT.C ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*按钮的输入说明:
2 1.按钮只能是自复位按钮,即按下接通,松开后即断开
3 2.按钮编号24个,1-3为特殊功能按钮,1代表总开关,
4 总开关功能: 一只作为关闭所有输出的回路使用,具体的使用过程是,
5 主开关按下时如果当前有工作的回路,则保存该当前的工作状态,并将电源关闭
6 如果当前没有任何工作的回路,则按照上次的保存打开工作的回路.
7
8
9 2代表调光第一路,3代表调光第二路,其他按钮均可以设定
10
11 通过通讯设置按钮与开关的对应模式
12 除前3个按钮不可以设置外,其他的按钮都可以设置: 具体设置方法如下
13 1. 每个按钮都可以设定3个对应的输出继电器.即一个按钮可以对应3个输出.
14 2. 输出的的方法有多种,由以下组和的数字表示,组和结构如下所示顺序
15
16 按钮编号(4-24) 按钮所控制的输出个数(1-3)
17 输出编号1(1-23) 输出模式 附加参数1,附加参数2,附加参数3
18 输出编号2(1-23) 输出模式 附加参数1,附加参数2,附加参数3 (如果按钮所控制的输出个数>=2,则具备该项)
19 输出编号3(1-23) 输出模式 附加参数1,附加参数2,附加参数3 (如果按钮所控制的输出个数=3,则具备该项)
20 功能:
21 1. 除上述的描述外,另外具备掉电存储的功能,即停电前存储当前的状态,来电后,按照停电前的状态接通外部回路
22 该功能只针对即时打开的开关和调光的开关起作用,其他的特别是延时操作的开关不起作用.
23 2. 支持通信配置以上参数的功能,暂时不支持开关操作的通信命令,
24 3. 以上与通信相关的条款,由通信规约负责解析.
25 */
26 #include <inandout.h>
27
28 #include <hardconfig.h>
29
30 #define MaxButton 24
31 #define MaxTest 10
32 sbit OEN = P2^7;
33 sbit AL1 = P2^5 ;
34 sbit AL2 = P2^6 ;
35 sbit RL17 = P2^4 ;
36 sbit RL18 = P2^3 ;
37 sbit RL19 = P2^2 ;
38 sbit RL20 = P2^1 ;
39 sbit RL21 = P2^0 ;
40 sbit RL22 = P1^5 ;
41 sbit RL23 = P1^6 ;
42
43 sbit CS0 = P3^7;
44 sbit CS1 = P3^6 ;
45 sbit CS2 = P3^5 ;
46
47 sbit ZMADJ1= P1^0;
48 sbit ZMADJ2= P1^1 ;
49
50
51 uchar bdata IN1,IN2,IN3;
52 uchar bdata OUTREG1=0,OUTREG2=0;
53 uchar ButtonCt[MaxButton+1];
54 sbit RL1 = OUTREG1^0;
55 sbit RL2 = OUTREG1^1;
C51 COMPILER V8.01 INANDOUT 09/27/2008 14:40:16 PAGE 2
56 sbit RL3 = OUTREG1^2;
57 sbit RL4 = OUTREG1^3;
58 sbit RL5 = OUTREG1^4;
59 sbit RL6 = OUTREG1^5;
60 sbit RL7 = OUTREG1^6;
61 sbit RL8 = OUTREG1^7;
62 sbit RL9 = OUTREG2^0;
63 sbit RL10 = OUTREG2^1;
64 sbit RL11 = OUTREG2^2;
65 sbit RL12 = OUTREG2^3;
66 sbit RL13 = OUTREG2^4;
67 sbit RL14 = OUTREG2^5;
68 sbit RL15 = OUTREG2^6;
69 sbit RL16 = OUTREG2^7;
70
71 sbit Bt1 = IN1^0;
72 sbit Bt2 = IN1^1;
73 sbit Bt3 = IN1^2;
74 sbit Bt4 = IN1^3;
75 sbit Bt5 = IN1^4;
76 sbit Bt6 = IN1^5;
77 sbit Bt7 = IN1^6;
78 sbit Bt8 = IN1^7;
79 sbit Bt9 = IN2^0;
80 sbit Bt10 = IN2^1;
81 sbit Bt11 = IN2^2;
82 sbit Bt12 = IN2^3;
83 sbit Bt13 = IN2^4;
84 sbit Bt14 = IN2^5;
85 sbit Bt15 = IN2^6;
86 sbit Bt16 = IN2^7;
87 sbit Bt17 = IN3^0;
88 sbit Bt18 = IN3^1;
89 sbit Bt19 = IN3^2;
90 sbit Bt20 = IN3^3;
91 sbit Bt21 = IN3^4;
92 sbit Bt22 = IN3^5;
93 sbit Bt23 = IN3^6;
94 sbit Bt24 = IN3^7;
95 #define DateBus P0
96 //初始化输出IO ,全部初始化为低电平(低电平即继电器不工作)
97 void GPIO_OUT_Config()
98 {
99 1 AL1 = 0;
100 1 AL2 = 0;
101 1 DateBus = 0;
102 1 OEN = 0;
103 1 AL1 = 1;
104 1 AL1 = 0;
105 1 AL2 = 1;
106 1 AL2 = 0;
107 1 RL17 = 0;
108 1 RL18 = 0;
109 1 RL19 = 0;
110 1 RL20 = 0;
111 1 RL21 = 0;
112 1 RL22 = 0;
113 1 RL23 = 0;
114 1 Disable_InputChip();
115 1 }
116 void ButtonDataConfig()
117 {
C51 COMPILER V8.01 INANDOUT 09/27/2008 14:40:16 PAGE 3
118 1 uchar iloop;
119 1 for(iloop = 0;iloop < MaxButton;iloop++)
120 1 {
121 2 ButtonCt[iloop] = 0;
122 2 }
123 1 }
124 /*输出继电器,参数Number代表第几路,OnOff=0关,=1开*/
125 void RelayOut(unsigned char Number,bit OnOff)
126 {
127 1 DisableInterrupt();
128 1 switch(Number)
129 1 {
130 2 case 1:
131 2 RL1 = OnOff;
132 2 DateBus = OUTREG1;
133 2 AL1=1;
134 2 AL1=0;
135 2 break;
136 2 case 2:
137 2 RL2 = OnOff;
138 2 DateBus = OUTREG1;
139 2 AL1=1;
140 2 AL1=0;
141 2 break;
142 2 case 3:
143 2 RL3 = OnOff;
144 2 DateBus = OUTREG1;
145 2 AL1=1;
146 2 AL1=0;
147 2 break;
148 2 case 4:
149 2 RL4 = OnOff;
150 2 DateBus = OUTREG1;
151 2 AL1=1;
152 2 AL1=0;
153 2 break;
154 2 case 5:
155 2 RL5=OnOff;
156 2 DateBus=OUTREG1;
157 2 AL1=1;
158 2 AL1=0;
159 2 break;
160 2 case 6:
161 2 RL6=OnOff;
162 2 DateBus=OUTREG1;
163 2 AL1=1;
164 2 AL1=0;
165 2 break;
166 2 case 7:
167 2 RL7=OnOff;
168 2 DateBus=OUTREG1;
169 2 AL1=1;
170 2 AL1=0;
171 2 break;
172 2 case 8:
173 2 RL8=OnOff;
174 2 DateBus=OUTREG1;
175 2 AL1=1;
176 2 AL1=0;
177 2 break;
178 2 case 9:
179 2 RL9=OnOff;
C51 COMPILER V8.01 INANDOUT 09/27/2008 14:40:16 PAGE 4
180 2 DateBus=OUTREG2;
181 2 AL2=1;
182 2 AL2=0;
183 2 break;
184 2 case 10:
185 2 RL10=OnOff;
186 2 DateBus=OUTREG2;
187 2 AL2=1;
188 2 AL2=0;
189 2 break;
190 2 case 11:
191 2 RL11=OnOff;
192 2 DateBus=OUTREG2;
193 2 AL2=1;
194 2 AL2=0;
195 2 break;
196 2 case 12:
197 2 RL12=OnOff;
198 2 DateBus=OUTREG2;
199 2 AL2=1;
200 2 AL2=0;
201 2 break;
202 2 case 13:
203 2 RL13=OnOff;
204 2 DateBus=OUTREG2;
205 2 AL2=1;
206 2 AL2=0;
207 2 break;
208 2 case 14:
209 2 RL14=OnOff;
210 2 DateBus=OUTREG2;
211 2 AL2=1;
212 2 AL2=0;
213 2 break;
214 2 case 15:
215 2 RL15=OnOff;
216 2 DateBus=OUTREG2;
217 2 AL2=1;
218 2 AL2=0;
219 2 break;
220 2 case 16:
221 2 RL16=OnOff;
222 2 DateBus=OUTREG2;
223 2 AL2=1;
224 2 AL2=0;
225 2 break;
226 2 case 17:
227 2 RL17=OnOff;
228 2 break;
229 2 case 18:
230 2 RL18=OnOff;
231 2 break;
232 2 case 19:
233 2 RL19=OnOff;
234 2 break;
235 2 case 20:
236 2 RL20=OnOff;
237 2 break;
238 2 case 21:
239 2 RL21=OnOff;
240 2 break;
241 2 case 22:
C51 COMPILER V8.01 INANDOUT 09/27/2008 14:40:16 PAGE 5
242 2 RL22=OnOff;
243 2 break;
244 2 case 23:
245 2 RL23=OnOff;
246 2 break;
247 2 default:
248 2 break;
249 2 }
250 1 EnableInterrupt();
251 1 }
252 /*按钮检测程序*/
253 void task_ruputT1(void) interrupt 3 using 1
254 {
255 1 DateBus=0xFF;
256 1 Sel_InputChip_One();
257 1 IN1= DateBus;
258 1 Sel_InputChip_Two();
259 1 IN2= DateBus;
260 1 Sel_InputChip_Three();
261 1 IN3= DateBus;
262 1 Disable_InputChip();
263 1 /**/
264 1 if((!Bt1)&&(ButtonCt[1]<MaxTest))
265 1 {
266 2 ButtonCt[1]++;
267 2 }
268 1 else if((!Bt4)&&(ButtonCt[4]<MaxTest))
269 1 {
270 2 ButtonCt[4]++;
271 2 }
272 1 else if((!Bt5)&&(ButtonCt[5]<MaxTest))
273 1 {
274 2 ButtonCt[5]++;
275 2 }
276 1 else if((!Bt6)&&(ButtonCt[6]<MaxTest))
277 1 {
278 2 ButtonCt[6]++;
279 2 }
280 1 else if((!Bt7)&&(ButtonCt[7]<MaxTest))
281 1 {
282 2 ButtonCt[7]++;
283 2 }
284 1 else if((!Bt8)&&(ButtonCt[8]<MaxTest))
285 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -