📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 06/30/2000 09:45:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "T6963_Driver.c"
2 #include "logo.h"
3 #include "tlv5618.c"
4 #include "common.h"
5 #include "ds1302.c"
6 #include "tlv2544.c"
7 #include "ch452w2.c"
8 #include "18b20.c"
9 #include "iap.c"
10 #include "fault.c"
11 #include "modbus.c"
12
13 /*
14 void show_days(void)
15 {
16 ShowChar(7,10,Days_Passed/10000+0x30);
17 ShowChar(7,11,Days_Passed%10000/1000+0x30);
18 ShowChar(7,12,Days_Passed%1000/100+0x30);
19 ShowChar(7,13,Days_Passed%100/10+0x30);
20 ShowChar(7,14,Days_Passed%10+0x30);
21 }
22 */
23
24 void delay(unsigned int i)
25 {
26 1 while(i--);
27 1 }
28
29 //键值转换函数
30 //根据键盘按键排列不同在此修改case后的键值
31 unsigned char Key_value_conver(unsigned char key1)
32 {
33 1 // ShowChar(0,0,key1/100+0x30);
34 1 // ShowChar(0,1,key1%100/10+0x30);
35 1 // ShowChar(0,2,key1%10+0x30);
36 1
37 1 switch(key1)
38 1 {
39 2 case 0x75: return 1;
40 2 case 0x7D: return 2;
41 2 case 0x6D: return 3;
42 2 case 0x65: return 4;
43 2 case 0x5D: return 5;
44 2 case 0x55: return 6;
45 2 case 0x4D: return 7;
46 2 case 0x45: return 8;
47 2 case 0x6E: return 9;
48 2 case 0x66: return 0;
49 2 case 0x46: return 10; //向左键
50 2 case 0x67: return 11; //确认键
51 2 case 0x57: return 12; //启动
52 2 case 0x4F: return 13; //停止
53 2 case 0x56: return 14; //上
54 2 case 0x4E: return 15; //下
55 2 case 0x5E: return 16; //ESC
C51 COMPILER V7.06 MAIN 06/30/2000 09:45:23 PAGE 2
56 2 case 0x6F: return 17; //向右键
57 2 case 0x5F: return 18; //设置
58 2 case 0x47: return 19; //S15
59 2 default: return 100;
60 2 }
61 1 }
62
63 //按键中断
64 //产生按键声音和读取按键码
65 void Key_interrupt(void) interrupt 0
66 {
67 1 unsigned char i,j;
68 1
69 1 // EX0 = 0;
70 1 BEEP = 0;
71 1 for(i = 0;i < 200;i++) for(j = 0;j < 200;j++);
72 1 if(!sound) BEEP = 1;
73 1 key = CH452_Read();
74 1 // send_char(key);
75 1 key = Key_value_conver(key);
76 1 // CH452_Write(CH452_RESET);
77 1 // EX0 = 1;
78 1 }
79
80 //设置继电器状态
81 //id:1-16对应K1-K16
82 //staus:状态,1:吸合,2:释放
83 void Set_Relay(unsigned char id,unsigned char staus)
84 {
85 1 switch(id)
86 1 {
87 2 case 1: if(staus) Relay_1|=0x01; else Relay_1&=0xfe; break; //稳流/稳压继电器
88 2 case 2: if(staus) Relay_1|=0x02; else Relay_1&=0xfd; break; //封脉继电器
89 2 case 3: if(staus) Relay_1|=0x04; else Relay_1&=0xfb; break; //快熔故障报警继电器
90 2 case 4: if(staus) Relay_1|=0x08; else Relay_1&=0xf7; break; //水温高报警继电器
91 2 case 5: if(staus) Relay_1|=0x10; else Relay_1&=0xef; break; //母排温度高报警继电器
92 2 case 6: if(staus) Relay_1|=0x20; else Relay_1&=0xdf; break; //过流故障报警继电器
93 2 case 7: if(staus) Relay_1|=0x40; else Relay_1&=0xbf; break; //过压故障报警继电器
94 2 case 8: if(staus) Relay_1|=0x80; else Relay_1&=0x7f; break; //冷却水水压低报警继电器
95 2 case 9: if(staus) Relay_2|=0x01; else Relay_2&=0xfe; break; //网电电压低报警继电器
96 2 case 10: if(staus) Relay_2|=0x02; else Relay_2&=0xfd; break; //网电电压高报警继电器
97 2 case 11: if(staus) Relay_2|=0x04; else Relay_2&=0xfb; break; //总报警继电器
98 2 case 12: if(staus) Relay_2|=0x08; else Relay_2&=0xf7; break; //跳闸继电器
99 2 case 13: if(staus) Relay_2|=0x10; else Relay_2&=0xef; break; //启动/停止继电器
100 2 case 14: if(staus) Relay_2|=0x20; else Relay_2&=0xdf; break; //稳流状态指示继电器
101 2 case 15: if(staus) Relay_2|=0x40; else Relay_2&=0xbf; break; //稳压状态指示继电器
102 2 case 16: if(staus) Relay_2|=0x80; else Relay_2&=0x7f; break; //闭环继电器
103 2 default: break;
104 2 }
105 1 P4_1 = 0; //选通HC138(3/8译码器),将数据输入到指定的锁存器
106 1 P4_2 = 0;
107 1 P4_3 = 0;
108 1 P0 = Relay_1;
109 1 P4_1 = 1;
110 1 P4_2 = 0;
111 1 P4_3 = 0;
112 1 P0 = Relay_2;
113 1 P4_1 = 1;
114 1 P4_2 = 1;
115 1 P4_3 = 1;
116 1 }
117
C51 COMPILER V7.06 MAIN 06/30/2000 09:45:23 PAGE 3
118 //显示时间
119 void Show_Realtime()
120 {
121 1 ShowChar(7,2,ucCurtime[6]/16+0x30); //年
122 1 ShowChar(7,3,ucCurtime[6]%16+0x30);
123 1 ShowChar(7,6,ucCurtime[4]/16+0x30); //月
124 1 ShowChar(7,7,ucCurtime[4]%16+0x30);
125 1 ShowChar(7,10,ucCurtime[3]/16+0x30); //日
126 1 ShowChar(7,11,ucCurtime[3]%16+0x30);
127 1 ShowChar(7,16,ucCurtime[2]/16+0x30); //时
128 1 ShowChar(7,17,ucCurtime[2]%16+0x30);
129 1 ShowChar(7,19,ucCurtime[1]/16+0x30); //分
130 1 ShowChar(7,20,ucCurtime[1]%16+0x30);
131 1 ShowChar(7,22,ucCurtime[0]/16+0x30); //秒
132 1 ShowChar(7,23,ucCurtime[0]%16+0x30);
133 1 }
134
135 void Show_Alarm_prompt(void)
136 {
137 1 unsigned char i;
138 1 unsigned char code Alarm_message[19][21]={
139 1 {"正常 "}, //0
140 1 {"快熔报警,封脉 "}, //1
141 1 {"水温高报警, 分后封脉"}, //2
142 1 {"正排温度高, 分后封脉"}, //3
143 1 {"负排温度高, 分后封脉"}, //4
144 1 {"水温高报警, 分后封脉"}, //5
145 1 {"正排温度高, 分后封脉"}, //6
146 1 {"负排温度高, 分后封脉"}, //7
147 1 {"变压器温高, 分后封脉"}, //8
148 1 {"缺相故障,封脉 "}, //9
149 1 {"水压低报警,封脉 "}, //10
150 1 {"过流报警,封脉 "}, //11
151 1 {"过压报警,封脉 "}, //12
152 1 {"网电压高报警,封脉 "}, //13
153 1 {"网电压低报警,封脉 "}, //14
154 1 {"水温高报警,封脉 "}, //15
155 1 {"正排温度高,封脉 "}, //16
156 1 {"负排温度高,封脉 "}, //17
157 1 {"变压器温高,封脉 "}, //18
158 1 };
159 1
160 1 if(Alarm==Alarm_old) return; //防止反复刷新显示
161 1 if(Alarm_old < 19 && Alarm_old > 14 && Alarm < 9 && Alarm > 1) return; //高温封脉后不再对高温进行处理
162 1 if(Alarm_old!=0xff) Add_Fault_List();
163 1 Alarm_old = Alarm;
164 1
165 1 if(Alarm==0) High_temperatuer_Off_Delay = High_temperatuer_Off_Delay_Set;
166 1
167 1 for(i = 10;i < 30;i++) ShowChar(6,i,' ');
168 1 ShowLine(6,10,Alarm_message[Alarm]);
169 1 if(Alarm > 1 && Alarm < 9) ShowChar(6,21,High_temperatuer_Off_Delay+0x30);
170 1 if(Alarm)
171 1 {
172 2 Set_Relay(11,1); //所有报警均启动总报警继电器
173 2 BEEP = 0; //蜂鸣器
174 2 sound=1;
175 2 }
176 1 if(Alarm==1 || Alarm>8)
177 1 {
178 2 Set_Relay(2,1); //封脉继电器动作
179 2 Set_Relay(13,0); //启动停止继电器释放
C51 COMPILER V7.06 MAIN 06/30/2000 09:45:23 PAGE 4
180 2 system_staus=0;
181 2 ShowLine(0,12,"停止");
182 2 Set_DAC(1,0); //0输出
183 2 Set_Relay(12,1); //跳闸继电器动作
184 2 }
185 1 switch(Alarm)
186 1 {
187 2 case 1: Set_Relay(3,1); break; //快熔报警
188 2 case 2: Set_Relay(4,1); break; //水温高
189 2 case 5: Set_Relay(4,1); break; //水温高
190 2 case 3: Set_Relay(5,1); break; //排温高
191 2 case 4: Set_Relay(5,1); break; //排温高
192 2 case 6: Set_Relay(5,1); break; //排温高
193 2 case 7: Set_Relay(5,1); break; //排温高
194 2 case 10: Set_Relay(8,1); break; //水压低
195 2 case 11: Set_Relay(6,1); break; //过流
196 2 case 12: Set_Relay(7,1); break; //过压
197 2 case 13: Set_Relay(10,1); break; //网电压高
198 2 case 14: Set_Relay(9,1); break; //网电压低
199 2 }
200 1 }
201
202 //显示ADC数值
203 void Show_Current_ADC(void)
204 {
205 1 unsigned long d;
206 1 unsigned char i;
207 1
208 1 ReadAD(0);//读0通道
209 1
210 1 ADC[0] = ReadAD(2);
211 1 ADC[1] = ReadAD(4);
212 1 ADC[2] = ReadAD(6);
213 1 ADC[3] = ReadAD(0);
214 1
215 1 d = ADC[0]; //显示当前电流值
216 1 d*=Current_Measuring_Range;
217 1 d*=100;
218 1 d = d/ADC0_coefficients;
219 1 if(d > Current_Upper_Bound) //过流报警
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -