📄 max.lst
字号:
C51 COMPILER V7.50 MAX 02/05/2006 22:13:51 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAX
OBJECT MODULE PLACED IN max.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE max.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include <reg52.h>
4 #include <intrins.h>
5 #include<absacc.h>
6
7 #include "key.h"
*** WARNING C318 IN LINE 7 OF max.c: can't open file 'key.h'
8 #include "led.h"
*** WARNING C318 IN LINE 8 OF max.c: can't open file 'led.h'
9
10 extern uchar key;//存键值
*** ERROR C129 IN LINE 10 OF MAX.C: missing ';' before 'key'
11 extern bit key_flag;//键按下标志
12 extern uchar led_buf[];//显示缓冲区
13
14 #define nop8() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
15
16 #define IN_0_5_BASE 1.220703 // 5/4096,量程为0-5v每单位电压大小
17 #define IN_0_10_BASE 2.441406 // 10/4096 0-10v
18 #define IN_N5_5_BASE 2.441406 // 10/4096 -5v-5v
19 #define IN_N10_10_BASE 4.882813 // 20/4096 -10v-10v
20 //_cs HBEN
21 #define ADCCOM XBYTE[0x7fff] //0 1 控制命令字地址
22 #define ADLO XBYTE[0x3fff] //0 0 低8位地址,
23 #define ADHI XBYTE[0x7Fff] //0 1 高四位地址
24 //内部时钟 内部采样 0 to 5 通道0
25 uchar channel=0; //PD1 PD0 ACQMOD RNG BIP A2 A1 A0
26 uchar volatile bdata command_byte=0x40; //0 1 0 0 0 0 0 0
27 sbit PD1=command_byte^7;
28 sbit PD0=command_byte^6;
29 sbit ACQMOD=command_byte^5;
30 sbit RNG=command_byte^4;
31 sbit BIP=command_byte^3;
32 //###################################################
33 //sbit _WR=P3^6;
34 //sbit _RD=P3^7;
35 //sbit CS=P2^7; //引脚连接
36 //sbit HBEN=P2^6;
37 //###################################################
38
39 void main(void)
40 {
41 uchar msb,lsb;
42 uint volatile data volt;
43 uchar input_mode;
44 CS=HBEN=1;
45
46 key_init();
47
48 led_buf[7]=channel;
49 led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG;
50 //BIP RNG INPUT RANGE (V) 显示
51 // 0 0 0 to 5 a
52 // 0 1 0 to 10 b
C51 COMPILER V7.50 MAX 02/05/2006 22:13:51 PAGE 2
53 // 1 0 ±5 c
54 // 1 1 ±10 d
55 led_update();
56
57 while(1)
58 {
59
60 if(_testbit_(key_flag))
61 {
62 if(read_key())//读按键
63 {
64 if(key==KEY_B)
65 {
66 ADCCOM=command_byte+channel;
67 nop8();//等待8us让其完成转换
68 ADCCOM=command_byte+channel; //让其测三次之后就可以得到稳定的电压了。
69 nop8();//等待8us让其完成转换
70 ADCCOM=command_byte+channel;
71 nop8();//等待8us让其完成转换
72 msb=ADHI&0x0f;
73 lsb=ADLO;
74 volt=msb*256+lsb;
75 lclear(0,5);
76 input_mode=((uchar)BIP<<1)+(uchar)RNG;//由量程来确定如何处理数据
77 switch(input_mode)
78 {
79 case 0:
80 volt*=IN_0_5_BASE;
81 break;
82 case 1:
83 volt*=IN_0_10_BASE;
84 break;
85 case 2:
86 volt*=IN_N5_5_BASE;
87 if(volt>5000)//如是为负电压
88 {
89 led_buf[0]=LED_NEG;
90 volt=10000-volt;
91 }
92 else
93 led_buf[0]=LED_BLANK;//显示负号
94 break;
95 case 3:
96 volt*=IN_N10_10_BASE;
97 if(volt>10000)//如是为负电压
98 {
99 led_buf[0]=LED_NEG;
100 volt=20000-volt;
101 }
102 else
103 led_buf[0]=LED_BLANK;//显示负号
104 break;
105
106 }
107 if(volt>9999)
108 lprinti(volt,0x35,1);//格式输出
109 else
110 {
111 lprinti(volt,0x34,2);//格式输出
112 }
113 led_update();
114 }
C51 COMPILER V7.50 MAX 02/05/2006 22:13:51 PAGE 3
115 else if(key==KEY_C)//按键选择量程为0-5v
116 {
117 BIP=0;
118 RNG=0;
119 }
120 else if(key==KEY_D)//按键选择量程为0-10v
121 {
122 BIP=0;
123 RNG=1;
124 }
125 else if(key==KEY_E)//按键选择量程为-5-5v
126 {
127 BIP=1;
128 RNG=0;
129 }
130 else if(key==KEY_F)//按键选择量程为-10-10v
131 {
132 BIP=1;
133 RNG=1;
134 }
135 else if(key<KEY_8)//选择通道0~7
136 {
137 channel=key;
138 led_buf[7]=channel;//通道送显
139 }
140 led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG;//量程送显
141 led_update();
142 }
143 }
144 }
145 }
146
C51 COMPILATION COMPLETE. 2 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -