📄 opm-main.lst
字号:
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE OPM_MAIN
OBJECT MODULE PLACED IN OPM-MAIN.OBJ
COMPILER INVOKED BY: D:\Electron\Keil707\C51\BIN\c51.exe OPM-MAIN.c DB OE
stmt level source
1
2 /*****************************************************************
3
4 应 用:光功率计(LCD版) 作 者:姚虹
5 文 件 名:OPM-LCD.c 编译系统:Keil C51
6 起止时间:2008.7.22 版 本:V1.00
7
8 基本功能:
9 1、通道采样,平滑滤波
10 2、数据转换
11 3、本地显示-送LCD显示
12 4、数据传送-送串口
13
14 *****************************************************************/
15
16 #include "c8051F060.h"
17 #include <intrins.h>
18 #include <math.h>
19
20 #define uchar unsigned char
21 #define uint unsigned int
22 #define ulong unsigned long
23
24 //---------------------------数据采集与处理
25 uint idata ADC0G[20]; //采样数组
26 uint idata ADC1G[20];
27
28 ulong idata ADC0_S; //和
29 ulong idata ADC1_S;
30
31 uint idata ADC0_M; //均值-积分项
32 uint idata ADC1_M;
33
34 float idata ADC0_MP;
35 float idata ADC1_MP;
36
37 float idata ADC0_M1;
38 float idata ADC0_M2;
39 float idata ADC1_M1;
40 float idata ADC1_M2;
41
42 uchar idata N;
43
44 float idata ADC0_F;
45 float idata ADC1_F;
46
47 float * ip;
48
49 float idata FloatDec;
50
51 uint idata F_Int;
52 uint idata F_Dec;
53
54 #define Vref 2.45
55
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 2
56 //--------------------------数据传送与处理
57 uchar idata Command;
58 bit CommSign = 0;
59
60 uchar xdata HoldData[16]; //非易失数据保存包:1-、2-、
61
62 //--------------------------数据显示与处理
63 sbit CS1 = P1 ^ 0;
64 sbit CS2 = P1 ^ 1;
65 sbit RES = P1 ^ 2;
66 sbit RW = P1 ^ 3;
67 sbit DI = P1 ^ 4;
68 sbit EE = P1 ^ 5;
69
70 uchar idata Bcd[6]; //二进制转BCD码组
71
72 uchar xdata ShowPage1[256]; //开机页面
73 uchar xdata ShowPage2[256];
74 uchar xdata ShowPage3[256];
75 uchar xdata ShowPage4[256];
76
77 uchar xdata ShowPage5[256]; //仪表页面
78 uchar xdata ShowPage6[256];
79 uchar xdata ShowPage7[256];
80 uchar xdata ShowPage8[256];
81
82 uint TT = 5000;
83
84 bit Ty;
85
86 //--------------------------键盘数据处理
87 sbit KEY1 = P0 ^ 4; //键盘中断检测线
88 sbit KEY2 = P0 ^ 5;
89 sbit KEY3 = P0 ^ 6;
90 sbit KEY4 = P0 ^ 7;
91
92 bit DataCapture = 1;
93 bit Instrument = 1;
94
95 /*======================================================*/
96
97 void Init_Device(void);
98 char code BS_Pape[];
99 char code Meter_Pape[];
100
101 char code Asc_Z[];
102
103
104 /*======================================================*/
105 /*------------------------------------延时*/
106 Delay(uchar Cyc)
107 {
108 1 uchar i;
109 1 for (i = 0;i < Cyc;i ++)
110 1 {
111 2 _nop_();
112 2 }
113 1 }
114 /*------------------------------------二进制-BCD转换*/
115 Hex_Asc(uint value)
116 {
117 1 Bcd[1] = (value / 10000);
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 3
118 1 Bcd[2] = ((value % 10000) / 1000);
119 1 Bcd[3] = ((value % 1000) / 100);
120 1 Bcd[4] = ((value % 100) / 10);
121 1 Bcd[5] = (value % 10);
122 1 }
123 /*------------------------------------写flash*****/
124 WRflash()
125 {
126 1 uchar i;
127 1 uchar xdata * pwrite; //程序存储器空间的指针(FLASH),指向待写地址
128 1
129 1 SFRPAGE = LEGACY_PAGE;
130 1 pwrite = 0x0000; //初始化CODE读指针
131 1 FLSCL = 0x21; //置位FLWE
132 1 PSCTL = 0x07; //置位SFLE,PSEE,PSWE
133 1 * pwrite = 0; //启动擦除过程
134 1 PSCTL = 0x05; //清除PSEE
135 1 pwrite = 0x0000;
136 1
137 1 for (i = 0;i < 16;i ++)
138 1 * pwrite ++ = HoldData[i];
139 1
140 1 PSCTL = 0x00; //复位SFLE,PSEE,PSWE
141 1 }
142 /*------------------------------------读flash*****/
143 RDflash()
144 {
145 1 uchar i;
146 1 uchar code * pread; //程序存储器空间的指针(FLASH),指向待读地址
147 1
148 1 SFRPAGE = LEGACY_PAGE;
149 1 PSCTL = 0x04; //访问FLASH时将访问128B的临时存储器扇区
150 1 pread = 0x0000; //初始化CODE读指针
151 1
152 1 for (i = 0;i < 16;i ++)
153 1 HoldData[i] = * pread ++;
154 1
155 1 PSCTL = 0x00;
156 1 }
157 /*------------------------------------通讯数据发送*/
158 Data_PC(uint A0,A1)
159 {
160 1 uchar ADC0_L,ADC0_H,ADC1_L,ADC1_H;
161 1
162 1 ADC0_L = A0;
163 1 ADC0_H = A0 >> 8;
164 1
165 1 ADC1_L = A1;
166 1 ADC1_H = A1 >> 8;
167 1
168 1 SFRPAGE = UART0_PAGE;
169 1 TI0 = 0;
170 1 SBUF0 = ADC0_H;
171 1 while (TI0 == 0);
172 1 TI0 = 0;
173 1 SBUF0 = ADC0_L;
174 1 while (TI0 == 0);
175 1 TI0 = 0;
176 1 SBUF0 = ADC1_H;
177 1 while (TI0 == 0);
178 1 TI0 = 0;
179 1 SBUF0 = ADC1_L;
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 4
180 1 while (TI0 == 0);
181 1 }
182 /*------------------------------------写LCD命令*/
183 LCD_Command(uchar SW)
184 {
185 1 DI = 0;
186 1 EE = 1;
187 1 P2 = SW;
188 1 Delay(15);
189 1 EE = 0;
190 1 }
191 /*------------------------------------刷新LCD-开始页*/
192 LCD_DataRefurbish1()
193 {
194 1 uint i;uchar j;
195 1
196 1 CS1 = 1;
197 1 CS2 = 0;
198 1 LCD_Command(0x40);
199 1
200 1 for (j = 0;j < 4;j ++)
201 1 {
202 2 LCD_Command(0xb8 + j);
203 2 DI = 1;
204 2 for (i = 0;i < 64;i ++)
205 2 {
206 3 EE = 1;
207 3 P2 = ShowPage1[i + (j * 64)];
208 3 Delay(15);
209 3 EE = 0;
210 3 }
211 2 }
212 1 for (j = 0;j < 4;j ++)
213 1 {
214 2 LCD_Command(0xb8 + j + 4);
215 2 DI = 1;
216 2 for (i = 0;i < 64;i ++)
217 2 {
218 3 EE = 1;
219 3 P2 = ShowPage2[i + (j * 64)];
220 3 Delay(15);
221 3 EE = 0;
222 3 }
223 2 }
224 1
225 1 CS1 = 0;
226 1 CS2 = 1;
227 1 LCD_Command(0x40);
228 1
229 1 for (j = 0;j < 4;j ++)
230 1 {
231 2 LCD_Command(0xb8 + j);
232 2 DI = 1;
233 2 for (i = 0;i < 64;i ++)
234 2 {
235 3 EE = 1;
236 3 P2 = ShowPage3[i + (j * 64)];
237 3 Delay(15);
238 3 EE = 0;
239 3 }
240 2 }
241 1 for (j = 0;j < 4;j ++)
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 5
242 1 {
243 2 LCD_Command(0xb8 + j + 4);
244 2 DI = 1;
245 2 for (i = 0;i < 64;i ++)
246 2 {
247 3 EE = 1;
248 3 P2 = ShowPage4[i + (j * 64)];
249 3 Delay(15);
250 3 EE = 0;
251 3 }
252 2 }
253 1 }
254 /*------------------------------------刷新LCD-仪表面页*/
255 LCD_DataRefurbish2()
256 {
257 1 uint i;uchar j;
258 1
259 1 CS1 = 1;
260 1 CS2 = 0;
261 1 LCD_Command(0x40);
262 1
263 1 for (j = 0;j < 4;j ++)
264 1 {
265 2 LCD_Command(0xb8 + j);
266 2 DI = 1;
267 2 for (i = 0;i < 64;i ++)
268 2 {
269 3 EE = 1;
270 3 P2 = ShowPage5[i + (j * 64)];
271 3 Delay(15);
272 3 EE = 0;
273 3 }
274 2 }
275 1 for (j = 0;j < 4;j ++)
276 1 {
277 2 LCD_Command(0xb8 + j + 4);
278 2 DI = 1;
279 2 for (i = 0;i < 64;i ++)
280 2 {
281 3 EE = 1;
282 3 P2 = ShowPage6[i + (j * 64)];
283 3 Delay(15);
284 3 EE = 0;
285 3 }
286 2 }
287 1
288 1 CS1 = 0;
289 1 CS2 = 1;
290 1 LCD_Command(0x40);
291 1
292 1 for (j = 0;j < 4;j ++)
293 1 {
294 2 LCD_Command(0xb8 + j);
295 2 DI = 1;
296 2 for (i = 0;i < 64;i ++)
297 2 {
298 3 EE = 1;
299 3 P2 = ShowPage7[i + (j * 64)];
300 3 Delay(15);
301 3 EE = 0;
302 3 }
303 2 }
C51 COMPILER V7.07 OPM_MAIN 09/11/2008 15:25:32 PAGE 6
304 1 for (j = 0;j < 4;j ++)
305 1 {
306 2 LCD_Command(0xb8 + j + 4);
307 2 DI = 1;
308 2 for (i = 0;i < 64;i ++)
309 2 {
310 3 EE = 1;
311 3 P2 = ShowPage8[i + (j * 64)];
312 3 Delay(15);
313 3 EE = 0;
314 3 }
315 2 }
316 1 }
317 /*------------------------------------LCD初始化*/
318 LCD_initialize()
319 {
320 1 uint i;
321 1
322 1 RES = 0;
323 1 // Delay(1);
324 1
325 1 RES = 1;
326 1
327 1 EE = 0;
328 1 RW = 0;
329 1 CS1 = 0;
330 1 CS2 = 0;
331 1
332 1 for (i = 0;i < 256;i ++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -