📄 all-test.lst
字号:
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ALL_TEST
OBJECT MODULE PLACED IN All-test.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE file\All-test.c BROWSE DEBUG OBJECTEXTEND PRINT(.\All-test.lst) OBJECT(All-
-test.obj)
line level source
1 #include <at89x51.h>
2 #include <i2c.h>
3 #include <math.h>
4
5 #define uint unsigned int
6 #define uchar unsigned char
7 #define comm 0
8 #define dat 1
9
10 sbit e = P2^2; //input enable; // e
11 sbit rw = P2^1; //H=read; L=write; // rw
12 sbit rs = P2^0; //H=data; L=command; // rs
13
14 uchar xdata eeprom_buffer[5];
15 uchar code keycode[8]={1,2,3,4,5,6,7,8};
16 uchar xdata e_key,key_buf;
17 float xdata temp;
18 bit bkey=0;
19 bit state=0; // 0 : r457 1: ry // just have a test
20
21 //uchar xdata gg[32]={"Preheating... "
22 // "1234567890123456"};
23 uchar code cgram_char[][8]={0x11,0x0a,0x04,0x0a,0x11,0x00,0x00,0x00,
24 0x00,0x00,0x0A,0x0A,0x0F,0x02,0x02,0x00,
25 0x00,0x00,0x0F,0x08,0x0E,0x01,0x0E,0x00,
26 0x00,0x00,0x0F,0x01,0x02,0x04,0x04,0x00,
27 0x00,0x00,0x09,0x09,0x06,0x04,0x08,0x00
28 };
29 uchar xdata lcd_display[32];
30 bit down_time;
31 uchar time_inc=0,count;
32 uchar code pre[10]={"Preheating"};
33 uchar code name[13]={"White measure"};
34 uchar code sequence[8]={"01234567"};
35 uchar code step[3]={">^/"};
36 uchar code init_result[]={"Data Check:Good"};
37
38 bit pr=0,flash;
39 uchar inc=0,other_flash_cnt=0;
40
41 bit r457,b_enprint=0;
42 uchar byte_dat;
43 bit u_afunction=0;
44 bit r457zeroflag,ryzeroflag,r457adflag,ryadflag;
45 bit bfail=0,b_ini_fail=0,flashzero=0;
46 float xdata r457se,ryse,r457ade,ryade,r457ad0,ryad0,r457s0,rys0;
47 float xdata r457adc,ryadc,r457sc,rysc,r0sc,fsc,F;
48 float xdata r0adc,fadc;
49 float xdata r457sc_com[20],rysc_com[20];
50 float xdata ucof,gcof;
51 float xdata standard_L,standard_H; //标准上下限数值
52 float xdata u_B,u_A;
53
54 uint xdata zero_inc=0,cut_time;
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 2
55
56 uchar read_count=0;
57 float xdata s=0;
58 int xdata dats;
59 int xdata min1,min2,max1,max2;// ADC比较数据
60 //uchar xdata read_count=0;
61
62 uchar cs_temp=0xff;
63 bit bell=0;
64
65 //------------------------------------------------//
66 void lcddis_series(uchar lcd_pos ,uchar num, uchar *p, uchar p_n, bit dig);
67 void write_DDRAM(uchar pos ,uchar cont );
68 //------------------------------------------------//
69
70 void delay_lcd (uchar ms) //delay time
71 {
72 1 int i,j;
73 1 for(i=0;i<ms;i++)
74 1 for(j=0;j<123;j++);
75 1 }
76
77 void delayms(uchar time)
78 {
79 1 uchar del,i;
80 1 for(i=time;i>0;i--)
81 1 for(del=80;del>0;del--);
82 1 }
83
84 uchar keyscan(void)
85 {
86 1 uchar s,i;
87 1 P0=0x00;
88 1 P2_7=0;
89 1 P2_6=1;
90 1 P3_7=0;
91 1 P3_7=1;
92 1 if((P1&0x18)!=0x18) //以按下键有效
93 1 { delay_lcd(2);
94 2 if((P1&0x18)!=0x18)
95 2 {
96 3 s=0x80;
97 3 for(i=0;i<8;i++)
98 3 {
99 4 if(i==0)
100 4 s=s;
101 4 else
102 4 s=(s>>1);
103 4 P0=~s;
104 4 P2_7=0;
105 4 P2_6=1;
106 4 P3_7=0;
107 4 P3_7=1;
108 4 if((P1&0x10)==0)
109 4 {
110 5 key_buf=keycode[i];
111 5 bkey=1;
112 5 break;
113 5 }
114 4 if((P1&0x08)==0)
115 4 {
116 5 key_buf=keycode[i]+8;
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 3
117 5 bkey=1;
118 5 break;
119 5 }
120 4 }
121 3 } // <--break跳出地址
122 2 }
123 1 else
124 1 {
125 2 if(bkey)
126 2 {
127 3 e_key=key_buf;
128 3 bkey=0;
129 3 }
130 2 }
131 1 return(e_key);
132 1 }
133
134 void split_data(float f) //具有把float类型数据拆分
135 {
136 1 uint dis_r;
137 1 eeprom_buffer[0]=((uint)f/10000); //modified...
138 1 dis_r=((uint)f%10000); /////
139 1 eeprom_buffer[1]=(dis_r/1000);
140 1 dis_r=(dis_r%1000);
141 1 eeprom_buffer[2]=(dis_r/100);
142 1 dis_r=(dis_r%100);
143 1 eeprom_buffer[3]=(dis_r/10);
144 1 dis_r=(dis_r%10);
145 1 eeprom_buffer[4]=dis_r;
146 1 }
147
148 void ReadStatusLCM(void) //读LCM状态,检测忙信号,无返回
149 {
150 1 P0=0xFF;
151 1 rs=0;
152 1 rw=1;
153 1 e=1;
154 1 e=0;
155 1 while (P0 & 0x80); //检测忙信号
156 1 }
157
158 void wr_lcd (uchar dat_comm,uchar content, bit busy)
159 {
160 1 if(busy)
161 1 ReadStatusLCM();
162 1 P0=content; //output data or comm
163 1 if(dat_comm)
164 1 {
165 2 rs=1; //data
166 2 rw=0; //write
167 2 }
168 1 else
169 1 {
170 2 rs=0; //command
171 2 rw=0; //write
172 2 }
173 1
174 1 e=1;
175 1 delay_lcd(1);
176 1 e=0;
177 1 }
178
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 4
179 /*------------------初始化------------------*/
180 void init_lcd (void)
181 {
182 1 uchar i;
183 1 e=0;
184 1 wr_lcd (comm,0x06,0); /*光标的移动方向*/
185 1 wr_lcd (comm,0x0c,0); /*开显示,关光标*/
186 1 wr_lcd (comm,0x38,0); /*8位接口两行显示模式*/
187 1 for(i=0;i<32;i++)
188 1 lcd_display[i]=' '; //全部为空,针对MCU物理内部
189 1 wr_lcd (comm,0x01,0); /*清屏,地址指针指向00H*/
190 1 }
191
192
193
194 ///*----------------显示字符-----------------*/
195 //void char_disp (uchar *chrt)
196 //{
197 // uchar i,j;
198 // wr_lcd (comm,0x80,1); // DDRAM首地址设置 // 00H
199 // j=0;
200 // for (i=0;i<16;i++)
201 // wr_lcd (dat,chrt[j*16+i],1);
202 // j=1;
203 // wr_lcd(comm,0xc0,1); // 40H
204 // for (i=0;i<16;i++)
205 // wr_lcd (dat,chrt[j*16+i],1);
206 // wr_lcd (comm,0x0c,1);
207 //}
208
209 void cgram_wr (uchar addr, uchar n, uchar *p) //---- test OK ---//
210 {
211 1 uchar i;
212 1 wr_lcd (comm,(0x40+addr*8),1); //自定义字符字模数据存储地址
213 1 for(i=0;i<8;i++)
214 1 wr_lcd (dat,*(p+n*8+i),1);
215 1
216 1 }
217
218 //void all_display(uchar *chrt)
219 //{
220 // uchar i,j;
221 // wr_lcd (comm,0x80,1); // DDRAM首地址设置,用于显示 , 地址:80H + 00H
222 // j=0;
223 // for(i=0;i<16;i++)
224 // wr_lcd (dat,chrt[j*16+i],1);
225 //
226 // wr_lcd (comm,0xc0,1); // 地址:80H + 40H
227 // j=1;
228 // for(i=0;i<16;i++)
229 // wr_lcd (dat,chrt[j*16+i],1);
230 //
231 // wr_lcd (comm,0x0c,1);
232 //}
233
234 int measure(void) // 之前P1.7 =0,之后关闭
235 {
236 1 // uint dat; // ADC转换过来的数据,这里不考虑负数。
237 1 uchar buf_adc;
238 1 do
239 1 {
240 2 ACC=P0; //第一次读数判断
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 5
241 2 }while(!ACC4); //ds=1
242 1 if(!ACC3&&ACC0) //over range
243 1 {
244 2 dats=1999; //when over range , It reaches to max.
245 2 goto end;
246 2 }
247 1 if(!ACC2)
248 1 {
249 2 dats=0; //负数为0
250 2 goto end;
251 2 }
252 1 if(ACC3)
253 1 buf_adc=0; //第一位为1或0
254 1 else
255 1 buf_adc=1;
256 1 dats=buf_adc*1000;
257 1
258 1 do ////第二次读数判断
259 1 {
260 2 ACC=P0;
261 2 }while(!ACC5);
262 1 buf_adc=(ACC&0x0f);
263 1 dats=dats+buf_adc*100;
264 1
265 1 do //第3次读数判断
266 1 {
267 2 ACC=P0;
268 2 }while(!ACC6);
269 1 buf_adc=(ACC&0x0f);
270 1 dats=dats+buf_adc*10;
271 1
272 1 do //第4次读数判断
273 1 {
274 2 ACC=P0;
275 2 }while(!ACC7);
276 1 buf_adc=(ACC&0x0f);
277 1 dats=dats+buf_adc;
278 1
279 1 end: read_count++;
280 1 // P3_7=1; //关闭
281 1 s=s+dats;
282 1 return(dats);
283 1 }
284
285 void compare_four_data(void)
286 {
287 1 if(dats>max2)
288 1 {
289 2 max1=max2;
290 2 max2=dats;
291 2 }
292 1 else
293 1 {
294 2 if(dats>max1)
295 2 max1=dats;
296 2 else
297 2 {
298 3 if(dats<min1)
299 3 {
300 4 min2=min1;
301 4 min1=dats;
302 4 }
C51 COMPILER V8.02 ALL_TEST 06/15/2007 10:53:26 PAGE 6
303 3 else
304 3 {
305 4 if(dats<min2)
306 4 min2=dats;
307 4 }
308 3 }
309 2 }
310 1
311 1 }
312
313 void adc_idle(void)
314 {
315 1 // uchar xdata i;
316 1 float r; //余数部分
317 1 float dp; //整数部分
318 1 min1=2000;
319 1 min2=2000;
320 1 max1=-1;
321 1 max2=-1;
322 1
323 1
324 1 wr_lcd (comm,0x01,1); /*清屏,地址指针指向00H*/
325 1 lcddis_series(0,7,name,6,0);
326 1 write_DDRAM(7,'.');
327 1 write_DDRAM(8,'.');
328 1 write_DDRAM(9,'.');
329 1 wr_lcd (comm,0x0c,1); /*开显示,关光标*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -