?? ad.lst
字號:
C51 COMPILER V8.08 AD 03/22/2009 19:16:12 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include"LCD.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define N 10
6 uchar bai,ge,shi,n;
7 uint temp,tp;temph,templ;
8 uint code ad_date[]={
9 1060,1060,1060,1100,1120,1140,1166,1180,1200,1220,
10 1240,1320,1340,1360,1380,1400,1420,1440,1460,1480,
11 1500,1520,1540,1560,1580,1600,1620,1640,1660,1680,
12 1700,1720,1740,1760,1780,1800,1820,1840,1840,1860,
13 1880,1900,1920,1940,1960,1980,2000,2020,2040,2060,
14 2080,2100,2120,2140,2160,2180,2200,2220,2240,2260,
15 2280,2300,2320,2340,2360,2380,2400,2420,2440,2460,
16 2480,2500,2520,2540,2560,2580,2600,2620,2640,2660,
17 2680,2700,2720,2740,2760,2780,2800,2820,2840,2860,
18 2880,2900,2920,2920,2940,2960,2980,3000,3020,3040,
19 3060,3080,3100,3120,3140,3160,3180,3200,3220,3240,
20 3260,3280,3300,3320,3340,3360,3380,3400,3420,3440,
21 3460,3480,3500,3520,3540,3560,3580,3600,3620,3640,
22 3660,3680};
23 uint code temperiture[]={
24 594,593,586,580,579,560,564,559,552,545,
25 541,518,513,508,503,497,491,488,483,480,
26 473,468,463,458,455,451,447,440,434,433,
27 430,425,420,416,413,409,404,401,401,396,
28 390,386,382,378,374,372,368,364,361,357,
29 354,351,347,343,340,336,333,328,326,322,
30 319,316,313,309,307,303,300,296,294,289,
31 286,283,280,276,274,271,267,264,260,257,
32 253,249,246,243,240,237,233,231,228,224,
33 222,219,214,216,211,209,206,202,198,194,
34 187,184,181,178,175,171,168,164,161,158,
35 154,152,148,146,142,139,136,133,130,126,
36 124,121,116,114,112,108,102,98,96,94,
37 89,86};
38 uchar code table[]=" T:00.0`C";
39 uchar num=0;
40 uchar keynum,max=40,min=0;
41 uchar code Temp_max[]=" Max:40`C",Temp_min[]=" Min:00`C";
42
43 sbit ad_wr=P3^6;
44 sbit ad_rd=P3^7;
45 sbit ad_cs=P3^5;
46 sbit ad_int=P3^2;
47 sbit key1=P0^5;
48 sbit key2=P0^6;
49 sbit key3=P0^7;
50 //sbit Beep=P0^0;
51
52 /*********函數表************/
53 void init(); //初始化
54 void ad_delay(uint t); //延時函數
55 void change(uchar tempture); //分離百位、十位、個位
C51 COMPILER V8.08 AD 03/22/2009 19:16:12 PAGE 2
56 uchar ad_getshuju(); //ad轉換
57 char filter(); //濾波
58 uint convert(); //電壓轉換
59 void tempertur(); //度溫度
60 void keyscan(); //鍵盤掃描
61
62 //主函數
63 void main()
64 {
65 1 init();
66 1 while(1)
67 1 {
68 2 keyscan();
69 2 }
70 1 }
71
72 void init()
73 {
74 1 LCD_init();
75 1 for(num=0;num<10;num++)
76 1 {
77 2 LCD_Write_add_data(num,0,table[num]);
78 2 }
79 1 }
80
81 void ad_delay(uint t)
82 {
83 1 uchar j;
84 1 uint i;
85 1 for(i=0;i<t;i++)
86 1 for(j=0;j<110;j++);
87 1 }
88
89 uchar ad_getshuju()
90 {
91 1 uchar date;
92 1 ad_cs=0;ad_wr=0;ad_rd=1;
93 1 ad_cs=1;ad_wr=1;ad_rd=1;
94 1 while(ad_int==1);
95 1 ad_cs=0;ad_wr=1;ad_rd=0;
96 1 date=P2;
97 1 ad_cs=1;ad_wr=1;ad_rd=1;
98 1 return date;
99 1 }
100
101 char filter() //濾波函數 中位值濾波法
102 {
103 1 uint value_buf[N],temp_f;
104 1 uchar count,i,j;
105 1 for ( count=0;count<N;count++)
106 1 {
107 2 value_buf[count] = ad_getshuju();
108 2 delay(2);
109 2 }
110 1 for (j=0;j<N-1;j++)
111 1 {
112 2 for (i=0;i<N-j;i++)
113 2 {
114 3 if ( value_buf[i]>value_buf[i+1] )
115 3 {
116 4 temp_f = value_buf[i];
117 4 value_buf[i] = value_buf[i+1];
C51 COMPILER V8.08 AD 03/22/2009 19:16:12 PAGE 3
118 4 value_buf[i+1] = temp_f;
119 4 }
120 3 }
121 2 }
122 1 return value_buf[(N-1)/2];
123 1 }
124
125 uint convert()
126 {
127 1 uint temph,templ; //用于存儲讀出數據的高字節和低字節
128 1 uint tmp="0"; //存儲最后處理完的結果 注意數據類型
*** WARNING C260 IN LINE 128 OF AD.C: '=': pointer truncation
129 1 tmp=filter()+tmp; //求濾波后ad值
130 1 temph=tmp&0xf0; //屏蔽低四位
131 1 temph=temph>>4; //右移四位 取出高四位
132 1 templ=tmp&0x0f; //屏蔽高四位 取出低四位
133 1 tmp=templ*20+temph*320; //最后的結果是一個四位數,便于顯示 電壓值
134 1 return tmp; //返回最后處理結果
135 1 }
136
137 void change(uchar tempture)
138 {
139 1 bai=tempture/100;
140 1 shi=tempture%100/10;
141 1 ge=tempture%10;
142 1 }
143
144 void tempertur()
145 {
146 1 for(n=0;temp>=ad_date[n];n++);
147 1 tp=temperiture[n-1];
148 1 change(tp);
149 1 delay(100);
150 1 LCD_Write_add_data(4,0,0x30+bai);
151 1 delay(100);
152 1 LCD_Write_add_data(5,0,0x30+shi);
153 1 delay(100);
154 1 LCD_Write_add_data(7,0,0x30+ge);
155 1 delay(100);;
156 1 }
157
158
159 void keyscan()
160 {
161 1 if(key1==0)
162 1 {
163 2 delay(5);
164 2 if(key1==0)
165 2 {
166 3 while(!key1);
167 3 keynum++;
168 3 if(keynum==1)
169 3 {
170 4 change(max);
171 4 LCD_Write_Com(0x01);
172 4 delay(10);
173 4 LCD_Write_add_str(0,0,10,Temp_max);
174 4 LCD_Write_add_data(6,0,0x30+shi);
175 4 LCD_Write_add_data(7,0,0x30+ge);
176 4 }
177 3 if(keynum==2)
178 3 {
C51 COMPILER V8.08 AD 03/22/2009 19:16:12 PAGE 4
179 4 change(min);
180 4 LCD_Write_Com(0x01);
181 4 min=min>0?min:0;
182 4 delay(10);
183 4 LCD_Write_add_str(0,0,10,Temp_min);
184 4 LCD_Write_add_data(6,0,0x30+shi);
185 4 LCD_Write_add_data(7,0,0x30+ge);
186 4 }
187 3 if(keynum==3)
188 3 {
189 4 keynum=0;
190 4 LCD_Write_Com(0x01);
191 4 delay(10);
192 4 LCD_Write_add_str(0,0,10,table);
193 4 }
194 3 }
195 2 }
196 1 if(keynum==0)
197 1 {
198 2 temp=convert();
199 2 tempertur();
200 2 delay(100);
201 2 }
202 1 else
203 1 {
204 2 if(keynum==1)
205 2 {
206 3 if(key2==0)
207 3 {
208 4 delay(5);
209 4 if(key2==0)
210 4 {
211 5 while(!key2);
212 5 max++;
213 5 change(max);
214 5 delay(1);
215 5 }
216 4 }
217 3 if(key3==0)
218 3 {
219 4 delay(5);
220 4 if(key3==0)
221 4 {
222 5 while(!key3);
223 5 max--;
224 5 change(max);
225 5 delay(1);
226 5 }
227 4 }
228 3 //LCD_Write_add_str(0,0,9,Temp_max);
229 3 LCD_Write_add_data(6,0,0x30+shi);
230 3 LCD_Write_add_data(7,0,0x30+ge);
231 3 }
232 2 if(keynum==2)
233 2 {
234 3 if(key2==0)
235 3 {
236 4 delay(5);
237 4 if(key2==0)
238 4 {
239 5 while(!key2);
240 5 min++;
C51 COMPILER V8.08 AD 03/22/2009 19:16:12 PAGE 5
241 5 change(min);
242 5 min=min>0?min:0;
243 5 delay(1);
244 5 }
245 4 }
246 3 if(key3==0)
247 3 {
248 4 delay(5);
249 4 if(key3==0)
250 4 {
251 5 while(!key3);
252 5 min--;
253 5 change(min);
254 5 delay(1);
255 5 }
256 4 }
257 3 //LCD_Write_add_str(0,0,9,Temp_min);
258 3 LCD_Write_add_data(6,0,0x30+shi);
259 3 LCD_Write_add_data(7,0,0x30+ge);
260 3 }
261 2 }
262 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 913 ----
CONSTANT SIZE = 563 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 29
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -