📄 main.lst
字号:
203 long int vb,vb_2,vc,ve ,vbe,AD;
204 uchar counter;
205 uchar yow,xolumn;
206 bit enable,b,sb;
207 extern unsigned char row,column;
208 float base;
209
210
211 main(void)
212 {
213 1 unsigned char j=0,k=0;
214 1
215 1 SYSCLK_Init ();
216 1 PORT_Init ();
217 1 Lcd_Ini();
218 1 //Timer0_Init ();
219 1 //Timer3_Init(0XFC);
220 1 ADC0_Init();
221 1 dac0832_1=0x83;
222 1 delay(200,200);
223 1
224 1 dac0832_2=0xc8;
225 1 /* for(j=0;j<64;j++)
226 1 {
227 1 delay(200,200);
228 1 delay(200,200);
229 1 delay(200,200);
230 1 delay(200,200);
231 1 delay(200,200);
232 1 dac0832_1=char7[j];
233 1 } */
234 1 // DAC0_Init ();
235 1 ShowPicture(0,0,16,128,PictureTab,0x0400);
236 1 Send_cmd3(0x00,0x05,0x42); //图形区首址设置
237 1 for(j=0;j<150;j++)
238 1 delay(50,50);
239 1 Send_cmd3(0x00,0x06,0x42); //图形区首址设置
240 1 for(j=0;j<150;j++)
241 1 delay(50,50);
C51 COMPILER V8.02 MAIN 07/09/2007 08:18:06 PAGE 5
242 1 Send_cmd3(0x00,0x07,0x42); //图形区首址设置
243 1 for(j=0;j<150;j++)
244 1 delay(50,50);
245 1 Send_cmd3(0x00,0x04,0x42); //图形区首址设置
246 1 //ShowPicture(0,0,16,64,PictureTab,0x0800);
247 1 /*Clr_Char_Area();
248 1 Clr_Graph_Area();
249 1 Locat_Dot(0,0);
250 1 Locat_Dot(0,10);
251 1 Locat_Dot(0,64);
252 1 Line(10,15,75,30);
253 1 Line(10,15,10,15);
254 1 Line(10,15,20,30);
255 1 Line(70,50,10,18);
256 1 Line(10,20,10,50);
257 1 Line(50,50,50,10);
258 1 Line(10,60,80,15);
259 1 Line(10,60,50,60);
260 1 Line(10,60,20,10);
261 1 Line(30,60,10,10);
262 1 Line(0,0,127,0);
263 1 Line(0,0,0,63); */
264 1 EA = 1; // 允许全部中断
265 1 // EIE2 |= 0x02; // 允许ADC0中断
266 1 while(1)
267 1 {
268 2 read();
269 2 }
270 1 while(1)
271 1 Send_data('a');
272 1
273 1 }
274 //--------------------------------------------------------------------------
275 //--------------------------------------------------------------------------
276 void SYSCLK_Init (void)
277 {
278 1 int i; // 延时计数器
279 1 WDTCN = 0xde; // 禁止看门狗定时器
280 1 WDTCN = 0xad;
281 1 OSCXCN = 0x67; // 开启外部振荡器22.1184MHz晶体
282 1 for (i=0; i < 256; i++) ; // 等待振荡器启振
283 1 while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
284 1 OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
285 1 }
286 //--------------------------------------------------------------------------
287 //--------------------------------------------------------------------------
288 void PORT_Init (void)
289 {
290 1 P1MDOUT=0Xff;
291 1 P2MDOUT=0XFF;
292 1 XBR1 = 0x00;
293 1 XBR2 = 0x40; // 使能数据交叉开关和弱上拉
294 1 P74OUT=0x3f; /*P4 is PUSH-PULL*/
295 1 /*用到显示的时候,必须有这句*/
296 1 }
297 //--------------------------------------------------------------------------
298 //--------------------------------------------------------------------------
299 void ADC0_Init (void)
300 {
301 1 ADC0CN = 0x00; // ADC0 禁止; 正常跟踪模式定时器3溢出ADC0转换开始 ADC0数据右对齐
302 1 REF0CN = 0x03; // 禁止温度传感器, 片内 VREF,和 VREF 输出缓冲器
303 1 AMX0CF = 0x00;
C51 COMPILER V8.02 MAIN 07/09/2007 08:18:06 PAGE 6
304 1 AMX0SL = 0x00; // 选择AIN0作为ADC多路转换输出
305 1 ADC0CF = (SYSCLK/2500000) << 3; // ADC转换时钟2.5MHz
306 1 ADC0CF &= ~0x07; // PGA增益 = 1
307 1 EIE2 &= ~0x02; // 禁止ADC0中断
308 1 AD0EN = 1; // 使能ADC0
309 1 }
310
311 //--------------------------------------------------------------------------
312 //--------------------------------------------------------------------------
313 void lcd_display(void)
314 {
315 1 Clr_Char_Area();
316 1 Clr_Graph_Area();
317 1 ShowChar(1,1,char1);
318 1 ShowChar(2,1,char2);
319 1 ShowChar(3,1,char3);
320 1 ShowChar(4,1,char4);
321 1
322 1
323 1 }
324 void read (void)
325 {
326 1 EA = 0;
327 1 P1=0xf0;
328 1 e=P1;
329 1 if(e!=0xf0) //有输入
330 1 {
331 2 delay(30,30); //去抖
332 2 P1=0xf0;
333 2 e=P1;
334 2 if(e!=0xf0) //确认有键
335 2 {
336 3 P1=0xf0;
337 3 delay(1,10);
338 3 H=P1&0xf0; //读键值高4位
339 3 P1=0x0f;
340 3 delay(1,10);
341 3 L=P1&0x0f; //读键值低4位
342 3 key=H|L;
343 3 key=~key;
344 3 switch(key)
345 3 {
346 4 case 0x11 : dat='0';break;
347 4 case 0x21 : dat='1';break;
348 4 case 0x41 : dat='2';break;
349 4 case 0x81 : dat='3';break;
350 4 case 0x12 : dat='4';break;
351 4 case 0x22 : dat='5';break;
352 4 case 0x42 : dat='6';break;
353 4 case 0x82 : dat='7';break;
354 4 case 0x14 : dat='8';break;
355 4 case 0x24 : dat='9';break;
356 4 case 0x44 : dat='S';break;
357 4 case 0x84 : dat='E';break;
358 4 case 0x18 : dat='a';break;
359 4 case 0x28 : dat='d';break;
360 4 case 0x48 : dat='A';break;
361 4 case 0x88 : dat='D';break;
362 4 default : break;
363 4 }
364 3 P1=0xf0;
365 3 while(P1!=0xf0); //等待键释放
C51 COMPILER V8.02 MAIN 07/09/2007 08:18:06 PAGE 7
366 3 data_deal();
367 3 }
368 2 }
369 1 EA = 1;
370 1 }
371 void data_deal(void)
372 {
373 1 uchar a ,i,j,n,l,p;
374 1 char m,k;
375 1 if(dat=='S') //功能键按下时初始化相应数据
376 1 {
377 2 enable=1;
378 2 lcd_display() ;
379 2 }
380 1 if(enable==1)
381 1 {
382 2 AMX0CF = 0x00;
383 2 AMX0SL = 0x00; //选用通道AIN0测试vb
384 2 delay(10,10);
385 2 adc_change();
386 2 vb=ADc*655L;
387 2 vb=vb/1000;
388 2 AMX0CF = 0x00;
389 2 AMX0SL = 0x05; //选用通道AIN5测试vb_2
390 2 delay(10,10);
391 2 adc_change();
392 2 vb_2=ADc*655L;
393 2 vb_2=vb_2/1000;
394 2 AMX0CF = 0x00;
395 2 AMX0SL = 0x02; //选用通道AIN2测试vc
396 2 delay(10,10);
397 2 PGA();
398 2 vc=AD*655L;
399 2 vc=vc/1000;
400 2 AMX0CF = 0x00;
401 2 AMX0SL = 0x03; //选用通道AIN3测试ve
402 2 delay(10,10);
403 2 adc_change();
404 2 ve=ADc*655L;
405 2 ve=ve/1000;
406 2 if(dat=='1')
407 2 {
408 3 ve=ve*45;
409 3 Amp=ve/vb;
410 3 aa[0]=(uchar)(Amp/100)+'0';
411 3 aa[1]=(uchar)((Amp/10)%10)+'0';
412 3 aa[2]=(uchar)(Amp%10)+'0';
413 3 Clr_Char_Area();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -