📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f020.h>
2 #include <stdio.h>
3 #include "CPU_Init.h"
4 #include "RS485M.h"
5 #include "LCD_send.h"
6 #include "ZLG7290_key.h"
7
8 void LCDSend_Int(void);
9 void Key_Disp(void);
10 void UARTRX_Disp(void);
11 void Help_1(void);
12 void KeyDisp_F0(void);
13 void KeyDisp_KX(unsigned char pass_data);
14 void PASS_Disp(unsigned char pass_data);
15 unsigned char Sum_verify(unsigned char verify[],unsigned char ii);
16 void CYC_Disp(void);
17
18 unsigned char RX[10];//UART0接收数据存放数组
19 unsigned char TX[10];//UART0发送数据存放数组
20 unsigned char key; //按键键值
21 unsigned char pass_data;//选择的采集通道
22
23 bit ReceiveBit=0; //接收完成标志
24 bit key_sign=0; //按键标志
25 bit F0_sign=0; //F0按键标志
26 bit KX_sign=0; //处理通道已选标志
27 bit F2_sign=0; //循环采集标志
28
29 void main(void)
30 {
31 1 WDTCN = 0xde; //关闭看门狗
32 1 WDTCN = 0xad;
33 1 Init_Device();
34 1 LCDSend_Int();
35 1 EA=1;
36 1 DE_RE = 0;
37 1 while(1)
38 1 {
39 2 if(key_sign==1) //有按键
40 2 {
41 3 key_sign=0;
42 3 Key_Disp(); //按键处理
43 3 }
44 2 }
45 1 }
46
47 void UARTRX_Disp(void)
48 {
49 1 UART0_TX(TX,5);
50 1 }
51
52 void Key_Disp(void)
53 {
54 1 if(key==F0)
55 1 {
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 2
56 2 F0_sign=1;
57 2 KX_sign=0;
58 2 F2_sign=0;
59 2 lcd_init();
60 2 send_asc16str(0,0,"->");
61 2 send_hz(1,0,"请选择采集通道");
62 2 send_asc16str(2,16,"K1-K8:");
63 2 send_hz(4,1,"通道");
64 2 send_asc16str(12,16,"1-8");
65 2 send_asc16str(2,32,"F2:");
66 2 send_hz(3,2,"循环采集");
67 2 }
68 1 if(key==F1)
69 1 {
70 2 Help_1();
71 2 }
72 1 if(F0_sign==1&&F2_sign==0&&(key==K1||key==K2||key==K3||key==K4||key==K5||key==K6||key==K7||key==K8))
73 1 {
74 2 KX_sign=1; //单路采集模式
75 2 F2_sign=0; //选择循环采集模式
76 2 pass_data=(key%8)+(key/8)*4;
77 2 lcd_init(); //通道已选择显示
78 2 send_hz(1,0,"单路采集模式");
79 2 send_hz(1,1,"采集通道");
80 2 send_asc16str(10,16,":");
81 2 send_ascii16(12,16,pass_data+0x30);
82 2 send_asc16str(4,32,"F3->");
83 2 send_hz(4,2,"确定");
84 2 send_asc16str(4,48,"F0->");
85 2 send_hz(4,3,"返回");
86 2 }
87 1 if(F0_sign==1&&key==F2&&KX_sign==0)
88 1 {
89 2 F2_sign=1; //选择循环采集模式
90 2 KX_sign=0; //关闭通道选择
91 2 lcd_init();
92 2 send_hz(1,0,"循环采集模式");
93 2 send_asc16str(4,16,"F3->");
94 2 send_hz(4,1,"确定");
95 2 send_asc16str(4,32,"F0->");
96 2 send_hz(4,2,"返回");
97 2 }
98 1 if(KX_sign==1&& key==F3)
99 1 {
100 2 KX_sign=0; //只有再次按下F0键以后才能重新操作
101 2 F0_sign=0;
102 2 F2_sign=0;
103 2 PASS_Disp(pass_data);//通道选择确定后数据处理
104 2 }
105 1 if(F2_sign==1&& key==F3)
106 1 {
107 2 KX_sign=0; //只有再次按下F0键以后才能重新操作
108 2 F0_sign=0;
109 2 F2_sign=0;
110 2 CYC_Disp();
111 2 }
112 1
113 1 }
114
115 void LCDSend_Int(void)
116 {
117 1 lcd_init();
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 3
118 1 send_asc16str(0,0,"**");
119 1 send_asc16str(14,0,"**");;
120 1 send_hz(1,0,"多路采集系统");
121 1 send_asc16str(2,16,"F0:");
122 1 send_hz(3,1,"通道选择");
123 1 send_asc16str(2,32,"F1:");
124 1 send_hz(3,2,"帮助");
125 1 }
126
127 void Help_1(void) //显示帮助内容
128 {
129 1 lcd_init();
130 1 send_asc16str(0,0,"**");
131 1 send_asc16str(14,0,"**");;
132 1 send_hz(1,0,"按键功能定义");
133 1 send_asc16str(2,16,"F0:");
134 1 send_hz(3,1,"通道选择");
135 1 send_asc16str(2,32,"F2:");
136 1 send_hz(3,2,"选择确定");
137 1 send_asc16str(2,48,"K1-K8:");
138 1 send_hz(4,3,"通道");
139 1 }
140
141 void PASS_Disp(unsigned char pass_data)
142 {
143 1 bit exit_sign=0; //数据处理结束标志
144 1 unsigned char TX_time=0;//数据重发次数计数
145 1 unsigned char Verify_data=0;//接收和检验值
146 1 unsigned char Verify_ET=0; //和校验错误发生次数
147 1 unsigned char anew_TX[3]={0x01,0x00,0x00};//要求从机重发指令数组
148 1 unsigned char send_Num=0; //条码显示计数
149 1 unsigned char delay_num=0; //超时计数
150 1 bit RX_sign=0;//接收数据是否为第一次数据标志
151 1 unsigned int i;//定时控制变量
152 1
153 1 lcd_init();
154 1 send_asc16str(2,0,"->");
155 1 send_hz(2,0,"采集通道");
156 1 send_asc16str(12,0,":");
157 1 send_ascii16(13,0,pass_data+0x30);
158 1 send_hz(0,1,"系统处理中请稍后");
159 1 TX[0]=0x01; //从机地址
160 1 TX[1]=0x01; //数据采集命令字
161 1 TX[2]=0x02; //数据长度
162 1 TX[3]=pass_data-1;//采集通道值(0-7)
163 1 TX[4]=pass_data-1;//和检验
164 1 UART0_TX(TX,5);
165 1 while(exit_sign==0)
166 1 {
167 2 for(i=65535;i>0;i--);
168 2 if(ReceiveBit==0)
169 2 {
170 3 UART0_TX(TX,5);
171 3 }
172 2 if(RX_sign==0)
173 2 {
174 3 send_asc16str(send_Num,32,">");//动态显示系统处理状态">>>>>>>>>>>>>>>>"
175 3 send_Num++;
176 3 if(send_Num==15)
177 3 {
178 4 send_Num=0;
179 4 send_asc16str(0,32," ");
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 4
180 4 delay_num++;
181 4 if(delay_num==3)
182 4 {
183 5 delay_num=0;
184 5 lcd_init();
185 5 send_hz(2,1,"通讯超时");
186 5 send_asc16str(0,32,"->");
187 5 send_hz(1,2,"请检查通信网络");
188 5 exit_sign=1;
189 5 }
190 4 }
191 3 }
192 2 if(ReceiveBit==1) //接收到一帧数据
193 2 {
194 3 ReceiveBit=0; //清除接收完成标志
195 3 if(RX[1]==0) //从机要求重发数据
196 3 {
197 4 REN0=1;//重新允许接收
198 4 UART0_TX(TX,5);
199 4 TX_time++;
200 4 if(TX_time==3)//重发次数超过三次报警
201 4 {
202 5 TX_time=0;
203 5 lcd_init();
204 5 send_hz(1,1,"从机通讯错误");
205 5 send_asc16str(0,32,"->");
206 5 send_hz(1,2,"请检查通讯线路");
207 5 exit_sign=1;
208 5 }
209 4 }
210 3 else
211 3 {
212 4 if(RX[1]==1)
213 4 {
214 5 Verify_data=Sum_verify(RX+3,4);//对接收的数据(一字节通道字节数据)进行和校验
215 5 if(Verify_data==RX[7]) //和校验正确,显示采集数值
216 5 {
217 6 if(RX_sign==0)//第一次数据发送
218 6 {
219 7 RX_sign=1;
220 7 lcd_init();
221 7 send_asc16str(0,0,">> <<");
222 7 send_hz(1,0,"采集通道");
223 7 send_asc16str(10,0,":");
224 7 send_ascii16(12,0,RX[3]+0x30);
225 7 send_hz(1,2,"采集值");
226 7 send_asc16str(8,32,":");
227 7 send_ascii16(9,32,RX[4]+0x30);
228 7 send_ascii16(10,32,'.');
229 7 send_ascii16(11,32,RX[5]+0x30);
230 7 send_ascii16(12,32,RX[6]+0x30);
231 7 send_ascii16(13,32,'V');
232 7 }
233 6 else
234 6 {
235 7 send_ascii16(12,0,RX[3]+0x30);
236 7 send_ascii16(9,32,RX[4]+0x30);
237 7 send_ascii16(11,32,RX[5]+0x30);
238 7 send_ascii16(12,32,RX[6]+0x30);
239 7 }
240 6 for(i=65535;i>0;i--);
241 6 TX[0]=0x01; //从机地址
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 5
242 6 TX[1]=0x01; //数据采集命令字
243 6 TX[2]=0x02; //数据长度
244 6 TX[3]=pass_data;//采集通道值
245 6 TX[4]=pass_data;//和检验
246 6 UART0_TX(TX,5);
247 6 REN0=1;//重新允许接收
248 6 if(key_sign==1) //有按键
249 6 exit_sign=1;
250 6 }
251 5 else //和校验错误
252 5 {
253 6 REN0=1;//重新允许接收
254 6 UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
255 6 Verify_ET++;
256 6 if(Verify_ET==3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -