📄 adc0832.lst
字号:
C51 COMPILER V7.06 ADC0832 01/04/2008 18:23:27 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ADC0832
OBJECT MODULE PLACED IN adc0832.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE adc0832.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 /*******LCD口线定义*******/
8 #define LCD_DATA P0 //定义数据线D0-D7
9 sbit LCD_RS=P1^0; //定义寄存器选择位
10 sbit LCD_RW=P1^1; //定义读写信号线位
11 sbit LCD_E=P1^2; //定义使能信号位
12 sbit LCD_BUSY=LCD_DATA^7;//检测LCD状态字中BUSY标识
13
14 /*******ADC0832口线定义*******/
15 sbit AD_CLK=P3^6;
16 sbit AD_CS=P2^0;
17 sbit AD_DI=P3^7;
18
19 /*******通道定义*******/
20 sbit CH1=P3^0;
21 sbit CH2=P3^1;
22 /*******函数申明*******/
23 void LCD_Init(void);
24 void LCD_Write_Data(uchar dat);
25 void LCD_Write_Cmd(uchar cmd,BusyC);
26 void LCD_Disp_Char(uchar X,uchar Y,uchar DData);
27 void LCD_Disp_String(uchar X,uchar Y,uchar code *DData);
28 void LCD_Delay(uint ms);
29 uchar LCD_Check_Busy(void);
30 uchar readadc(void);
31
32 uchar code disptab[]={'0','1','2','3','4','5','6','7','8','9'};//字符代表码;
33 uchar code a_1[]={"WILLAR"};
34 uchar code a_2[]={"DIGITAL"};
35 uchar code a_3[]={"VOLTMETER"};
36 uchar code dispstring1[]={"VOLTAGE:"};
37 uchar code channel[]={"INPUT"};
38 uchar code channel2[]={"CHANNEL"};
39 /*******LCD函数部分*******/
40 void LCD_Init(void)
41 {
42 1 LCD_DATA=0;
43 1 LCD_Write_Cmd(0x38,0); //三次显示模式设置,不检测忙信号
44 1 LCD_Delay(5);
45 1 LCD_Write_Cmd(0x38,0);
46 1 LCD_Delay(5);
47 1 LCD_Write_Cmd(0x38,0);
48 1 LCD_Delay(5);
49 1
50 1 LCD_Write_Cmd(0x38,1); //显示模式设置,开始要求检测忙信号:8位、2行、5X7点阵
51 1 LCD_Write_Cmd(0x08,1); //关闭显示
52 1 LCD_Write_Cmd(0x01,1); //清屏
53 1 LCD_Write_Cmd(0x06,1); //显示光标移动设置:文字不动,光标自动右移
54 1 LCD_Write_Cmd(0x0C,1); //显示开及光标设置:光标关、光标不闪烁
55 1 }
C51 COMPILER V7.06 ADC0832 01/04/2008 18:23:27 PAGE 2
56
57 void LCD_Write_Cmd(uchar cmd,BusyC)
58 {
59 1 if(BusyC) LCD_Check_Busy();
60 1 LCD_DATA=cmd;
61 1 LCD_RS=0;
62 1 LCD_RW=0;
63 1 LCD_E=0;
64 1 LCD_Delay(5);
65 1 LCD_E=1;
66 1 }
67
68 void LCD_Write_Data(uchar dat)
69 {
70 1 LCD_Check_Busy();
71 1 LCD_DATA=dat;
72 1 LCD_RS=1;
73 1 LCD_RW=0;
74 1 LCD_E=0;
75 1 LCD_Delay(5);
76 1 LCD_E=1;
77 1 }
78
79 void LCD_Disp_Char(uchar X,uchar Y,uchar DData)
80 {
81 1 Y &=0x01;
82 1 X &=0x0F;
83 1 if(Y) X|=0x40;
84 1 X|=0x80;
85 1 LCD_Write_Cmd(X,0);
86 1 LCD_Write_Data(DData);
87 1 }
88
89 void LCD_Disp_String(uchar X,uchar Y,uchar code *DData)
90 {
91 1 uchar StringLength;
92 1 StringLength=0;
93 1 Y &=0x01;
94 1 X &=0x0F;
95 1 while(DData[StringLength]>0x20)
96 1 {
97 2 if(X<=0x0F)
98 2 {
99 3 LCD_Disp_Char(X,Y,DData[StringLength]);
100 3 StringLength++;
101 3 X++;
102 3 }
103 2 }
104 1 }
105
106
107 uchar LCD_Check_Busy(void)
108 {
109 1 LCD_DATA=0xFF;
110 1 LCD_RS=0;
111 1 LCD_RW=1;
112 1 LCD_E=0;
113 1 LCD_Delay(5);
114 1 LCD_E=1;
115 1 while(LCD_DATA & 0x80);
116 1 return(LCD_DATA);
117 1 }
C51 COMPILER V7.06 ADC0832 01/04/2008 18:23:27 PAGE 3
118
119 void LCD_Delay(uint ms)
120 {
121 1 uchar i;
122 1 while(ms--)
123 1 {
124 2 for(i=0;i<250;i++);
125 2 }
126 1 }
127
128
129 /*******ADC0832函数部分*******/
130
131 uchar readadc1(void)
132 {
133 1 uchar dat,i;
134 1
135 1 AD_CS=1; //芯片复位
136 1 AD_CLK=0;
137 1 _nop_();
138 1
139 1 AD_CS=0; //CS拉低,启动A/D转换
140 1 _nop_();
141 1
142 1 AD_DI=1; //启动标志位
143 1 AD_CLK=1; //第一个脉冲
144 1 _nop_();
145 1 AD_DI=0; //在负跳变之前加一个DI反转操作
146 1 AD_CLK=0;
147 1
148 1 AD_DI=1; //配置位1,单通道/差分输入选择
149 1 _nop_();
150 1 AD_CLK=1; //第二个脉冲
151 1 _nop_();
152 1 AD_CLK=0;
153 1
154 1 AD_DI=0; //配置位2
155 1 _nop_();
156 1 AD_CLK=1; //第三个脉冲
157 1 _nop_();
158 1 AD_CLK=0;
159 1
160 1 AD_DI=1;
161 1 _nop_(); //空闲位
162 1 AD_CLK=1; //第四个脉冲
163 1
164 1 for(i=0;i<=8;i++){ //读出8字节数据
165 2 dat=dat<<1;
166 2 _nop_();
167 2 AD_CLK=1; //这里要先1后0...如果是先0后1则输出结果错误...
168 2 if(AD_DI){
169 3 dat|=0x01;
170 3 }
171 2 _nop_();
172 2 AD_CLK=0;
173 2 }
174 1
175 1 AD_CS=1; //关闭芯片
176 1 return(dat); //返回数据
177 1 }
178
179 uchar readadc2(void)
C51 COMPILER V7.06 ADC0832 01/04/2008 18:23:27 PAGE 4
180 {
181 1 uchar dat,i;
182 1
183 1 AD_CS=1; //芯片复位
184 1 AD_CLK=0;
185 1 _nop_();
186 1
187 1 AD_CS=0; //CS拉低,启动A/D转换
188 1 _nop_();
189 1
190 1 AD_DI=1; //启动标志位
191 1 AD_CLK=1; //第一个脉冲
192 1 _nop_();
193 1 AD_DI=0; //在负跳变之前加一个DI反转操作
194 1 AD_CLK=0;
195 1
196 1 AD_DI=1; //配置位1,单通道/差分输入选择
197 1 _nop_();
198 1 AD_CLK=1; //第二个脉冲
199 1 _nop_();
200 1 AD_CLK=0;
201 1
202 1 AD_DI=1; //配置位2
203 1 _nop_();
204 1 AD_CLK=1; //第三个脉冲
205 1 _nop_();
206 1 AD_CLK=0;
207 1
208 1 AD_DI=1;
209 1 _nop_(); //空闲位
210 1 AD_CLK=1; //第四个脉冲
211 1
212 1 for(i=0;i<=8;i++){ //读出8字节数据
213 2 dat=dat<<1;
214 2 _nop_();
215 2 AD_CLK=1; //这里要先1后0...如果是先0后1则输出结果错误...
216 2 if(AD_DI){
217 3 dat|=0x01;
218 3 }
219 2 _nop_();
220 2 AD_CLK=0;
221 2 }
222 1
223 1 AD_CS=1; //关闭芯片
224 1 return(dat); //返回数据
225 1 }
226 /*******主函数部分*******/
227
228 void main(void)
229 {
230 1 uint dat1,dat2;
231 1 LCD_Delay(400);
232 1 LCD_Init();
233 1
234 1 LCD_Disp_String(1,0,a_1);
235 1 LCD_Disp_String(8,0,a_2);
236 1 LCD_Disp_String(4,1,a_3);
237 1
238 1 LCD_Delay(1000);
239 1 LCD_Init();
240 1
241 1 LCD_Disp_String(1,0,channel);
C51 COMPILER V7.06 ADC0832 01/04/2008 18:23:27 PAGE 5
242 1 LCD_Disp_String(7,0,channel2);
243 1 LCD_Disp_String(2,1,dispstring1);
244 1 LCD_Disp_Char(11,1,'.');
245 1 LCD_Disp_Char(14,1,'V');
246 1 while(1)
247 1 {
248 2 while(!CH1)
249 2 {
250 3 dat1=readadc1()/0.51;
251 3 LCD_Disp_Char(15,0,'0');
252 3 LCD_Disp_Char(10,1,disptab[dat1/100]);
253 3 LCD_Disp_Char(12,1,disptab[(dat1%100)/10]);
254 3 LCD_Disp_Char(13,1,disptab[dat1%10]);
255 3 LCD_Delay(400);
256 3 }
257 2
258 2 while(!CH2)
259 2 {
260 3 dat2=readadc2()/0.51;
261 3 LCD_Disp_Char(15,0,'1');
262 3 LCD_Disp_Char(10,1,disptab[dat2/100]);
263 3 LCD_Disp_Char(12,1,disptab[(dat2%100)/10]);
264 3 LCD_Disp_Char(13,1,disptab[dat2%10]);
265 3 LCD_Delay(400);
266 3 }
267 2
268 2 }
269 1
270 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 750 ----
CONSTANT SIZE = 58 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -