📄 main_bak.lst
字号:
C51 COMPILER V7.10 MAIN_BAK 03/23/2006 01:25:46 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAIN_BAK
OBJECT MODULE PLACED IN main_bak.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main_bak.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*ADC0809驱动程序,采用AT89C51与ADC0809芯片进行实现,结果在LCD上显示*/
2
3 #include <REG51.H>
4 #include <stdio.h>
5 #include <INTRINS.H> //为调用nop空指令需要
6 #define DS_NOP() _nop_();_nop_();_nop_();_nop_()
7
8 #define REF_Voltage 5.25 //ADC0809基准电压
9 #define PLUS_CH0 1 //各个通道增益
10 #define PLUS_CH1 1
11 #define PLUS_CH2 1
12 #define PLUS_CH3 4
13 #define PLUS_CH4 1
14 #define PLUS_CH5 1
15 #define PLUS_CH6 1
16 #define PLUS_CH7 1
17
18
19
20 /*对ADC0809的控制信号进行设置,使能够进行控制*/
21 sbit ST = P2^5;
22 sbit OE = P2^4;
23 sbit EOC = P2^3;
24 sbit ADC0809_C = P2^2;
25 sbit ADC0809_B = P2^1;
26 sbit ADC0809_A = P2^0;
27 /*
28 sbit RW = P3^6;
29 sbit RS = P3^5;
30 sbit E = P3^7;
31 */
32
33
34 //unsigned char r1[] = {"pass voltage:"};;
35 //void delay();
36
37 /*ADC0809转换函数,通道3输入模拟信号*/
38 unsigned char ADC0809test(unsigned char ch0)
39 {
40 1 unsigned char ADCdata; //AD转换后得到的数字量
41 1
42 1 ST = 0;
43 1 EOC = 1;
44 1 OE = 0;
45 1
46 1 switch(ch0)
47 1 {
48 2 case 0:
49 2 {
50 3 ADC0809_A = 0;
51 3 ADC0809_B = 0;
52 3 ADC0809_C = 0;
53 3 break;
54 3 }
55 2 case 1:
C51 COMPILER V7.10 MAIN_BAK 03/23/2006 01:25:46 PAGE 2
56 2 {
57 3 ADC0809_A = 1;
58 3 ADC0809_B = 0;
59 3 ADC0809_C = 0;
60 3 break;
61 3 }
62 2 case 2:
63 2 {
64 3 ADC0809_A = 0;
65 3 ADC0809_B = 1;
66 3 ADC0809_C = 0;
67 3 break;
68 3 }
69 2 case 3:
70 2 {
71 3 ADC0809_A = 1;
72 3 ADC0809_B = 1;
73 3 ADC0809_C = 0;
74 3 break;
75 3 }
76 2 case 4:
77 2 {
78 3 ADC0809_A = 0;
79 3 ADC0809_B = 0;
80 3 ADC0809_C = 1;
81 3 break;
82 3 }
83 2 case 5:
84 2 {
85 3 ADC0809_A = 1;
86 3 ADC0809_B = 0;
87 3 ADC0809_C = 1;
88 3 break;
89 3 }
90 2
91 2 case 6:
92 2 {
93 3 ADC0809_A = 0;
94 3 ADC0809_B = 1;
95 3 ADC0809_C = 1;
96 3 break;
97 3 }
98 2 case 7:
99 2 {
100 3 ADC0809_A = 1;
101 3 ADC0809_B = 1;
102 3 ADC0809_C = 1;
103 3 break;
104 3 }
105 2 default:break;
106 2 }
107 1 ST = 1;
108 1 ST = 0;
109 1 DS_NOP();
110 1
111 1 while(EOC == 0)
112 1 {
113 2 ;
114 2 }
115 1 if(EOC == 1)
116 1 {
117 2 OE = 1;
C51 COMPILER V7.10 MAIN_BAK 03/23/2006 01:25:46 PAGE 3
118 2 ADCdata = P0;
119 2 return (ADCdata);
120 2 }
121 1 }
122
123 /*******************************************************
124 电压测量并装换成实际的电压值
125 入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择
126 出口参数: 转换后的电压值,实际的值
127 ********************************************************/
128 float VoltageSurvey(unsigned char AD_ChannelNumber)
129 {
130 1 float SurveyVoltage; //测量到的电压值
131 1 float plus_ch; //通道增益
132 1
133 1 switch(AD_ChannelNumber)
134 1 {
135 2 case 0: plus_ch = PLUS_CH0;break;
136 2 case 1: plus_ch = PLUS_CH1;break;
137 2 case 2: plus_ch = PLUS_CH2;break;
138 2 case 3: plus_ch = PLUS_CH3;break;
139 2 case 4: plus_ch = PLUS_CH4;break;
140 2 case 5: plus_ch = PLUS_CH5;break;
141 2 case 6: plus_ch = PLUS_CH6;break;
142 2 case 7: plus_ch = PLUS_CH7;break;
143 2 default:break;
144 2 }
145 1
146 1 SurveyVoltage = ADC0809test(AD_ChannelNumber);
147 1 SurveyVoltage = (SurveyVoltage / 256) * REF_Voltage * plus_ch;
148 1 return(SurveyVoltage);
149 1 }
150
151
152
153
154 //延时程序
155 void delay(unsigned int k)
156 {
157 1 unsigned int i,j;
158 1
159 1 for(i=k; i>0; i--)
160 1 {
161 2 for(j=255; j>0; j--);
162 2 }
163 1 }
164
165
166 /*
167 void enable() //写指令寄存器
168 {
169 RS = 0;
170 RW = 0;
171 E = 0;
172 dealy();
173 E = 1;
174 }
175
176
177 void write_com() //写命令程序
178 {
179 P1 = 0x01;
C51 COMPILER V7.10 MAIN_BAK 03/23/2006 01:25:46 PAGE 4
180 enable();
181 P1 = 0x02;
182 enable();
183 P1 = 0x07;
184 enable();
185 P1 = 0X0F;
186 enable();
187 P1 = 0x1f;
188 enable();
189 P1 = 0x30;
190 enable();
191 }
192
193 void write_data() //写数据寄存器
194 {
195 RS = 1;
196 RW = 0;
197 E = 0;
198 delay();
199 E = 1;
200 }
201
202
203 void enable(); //写数地址和数据到LCD
204 {
205 P1 = 0x80
206 enable();
207 P1 = r1;
208 write_data();
209 P1 = 0xc6;
210 enabke();
211
212 P1 = adc0809test(); //是ADC0809的驱动函数*
213 write_data();
214 P1 = 0xc7;
215 enable();
216 P1 = 'V';
217 write_data();
218 }
219 */
220
221 /*主函数程序, LCD驱动函数*/
222 void main(void)
223 {
224 1 float OutVoltage;
225 1 unsigned int Adc0809CHx;
226 1
227 1 SCON = 0x50; // SCON: mode 1, 8-bit UART, enable rcvr
228 1 TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
229 1 TH1 = 221; // TH1: reload value for 1200 baud @ 16MHz
230 1 TR1 = 1; // TR1: timer 1 run
231 1 TI = 1; // TI: set TI to send first char of UART
232 1
233 1
234 1
235 1
236 1 while(1)
237 1 {
238 2 Adc0809CHx = 3;
239 2 OutVoltage = VoltageSurvey(Adc0809CHx);
240 2 printf("the CH%d",Adc0809CHx);
241 2 printf("Voltage is %1.3f\r\n",OutVoltage);
C51 COMPILER V7.10 MAIN_BAK 03/23/2006 01:25:46 PAGE 5
242 2 delay(100);
243 2 /*
244 2 if(Adc0809CHx < 7)
245 2 {
246 2 Adc0809CHx++;
247 2 }
248 2 else
249 2 {
250 2 Adc0809CHx = 0;
251 2 }
252 2 */
253 2
254 2 }
255 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 323 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -