📄 23.lst
字号:
C51 COMPILER V8.08 23 08/13/2009 10:05:47 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 23
OBJECT MODULE PLACED IN 23.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 23.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************** writer:shopping.w ******************/
2 #include <reg52.h>
3 #include <intrins.h>
4 #define uint unsigned int
5 #define uchar unsigned char
6 #define Delay4us() {_nop_();_nop_();_nop_();_nop_();}
7
8 sbit LCD_RS = P2^0;
9 sbit LCD_RW = P2^1;
10 sbit LCD_EN = P2^2;
11 sbit SCL = P1^0;
12 sbit SDA = P1^1;
13
14 uchar Recv_Buffer[4];
15 uint Voltage[]={'0','0','0','0'};
16 bit bdata IIC_ERROR;
17 uchar LCD_Line_1[] = {"1- . V 2- . V"};
18 uchar LCD_Line_2[] = {"3- . V 4- . V"};
19
20 void Delay(uint ms)
21 {
22 1 uchar i;
23 1 while(ms--)
24 1 {
25 2 for(i=0;i<120;i++);
26 2 }
27 1 }
28
29 bit LCD_Busy_Check()
30 {
31 1 bit Result;
32 1 LCD_RS = 0;
33 1 LCD_RW = 1;
34 1 LCD_EN = 1;
35 1 Delay4us();
36 1 Result = (bit)(P0&0x80);
37 1 LCD_EN = 0;
38 1 return Result;
39 1 }
40
41 void LCD_Write_Command(uchar cmd)
42 {
43 1 while(LCD_Busy_Check());
44 1 LCD_RS = 0;
45 1 LCD_RW = 0;
46 1 LCD_EN = 0;
47 1 _nop_();
48 1 _nop_();
49 1 P0 = cmd;
50 1 Delay4us();
51 1 LCD_EN = 1;
52 1 Delay4us();
53 1 LCD_EN = 0;
54 1 }
55
C51 COMPILER V8.08 23 08/13/2009 10:05:47 PAGE 2
56 void LCD_Write_Data(uchar dat)
57 {
58 1 while(LCD_Busy_Check());
59 1 LCD_RS = 1;
60 1 LCD_RW = 0;
61 1 LCD_EN = 0;
62 1 P0 = dat;
63 1 Delay4us();
64 1 LCD_EN = 1;
65 1 Delay4us();
66 1 LCD_EN = 0;
67 1 }
68
69 void LCD_Initialise()
70 {
71 1 LCD_Write_Command(0x38);Delay(5);
72 1 LCD_Write_Command(0x0c);Delay(5);
73 1 LCD_Write_Command(0x06);Delay(5);
74 1 LCD_Write_Command(0x01);Delay(5);
75 1 }
76
77 void LCD_Set_Position(uchar pos)
78 {
79 1 LCD_Write_Command(pos | 0x80);
80 1 }
81
82 void LCD_Display_A_Line(uchar Line_Addr,uchar s[])
83 {
84 1 uchar i;
85 1 LCD_Set_Position(Line_Addr);
86 1 for(i=0;i<16;i++)
87 1 {
88 2 LCD_Write_Data(s[i]);
89 2 }
90 1 }
91
92 void Convert_To_Voltage(uchar val)
93 {
94 1 uchar Tmp;
95 1 Voltage[2] = val/51+'0';
96 1 Tmp = val%51*10;
97 1 Voltage[1] = Tmp/51+'0';
98 1 Tmp = Tmp%51*10;
99 1 Voltage[0] = Tmp/51+'0';
100 1 }
101
102 void IIC_Start()
103 {
104 1 SDA = 1;
105 1 SCL = 1;
106 1 Delay4us();
107 1 SDA = 0;
108 1 Delay4us();
109 1 SCL = 0;
110 1 }
111
112 void IIC_Stop()
113 {
114 1 SDA = 0;
115 1 SCL = 1;
116 1 Delay4us();
117 1 SDA = 1;
C51 COMPILER V8.08 23 08/13/2009 10:05:47 PAGE 3
118 1 Delay4us();
119 1 SCL = 0;
120 1 }
121
122 void Slave_ACK()
123 {
124 1 SDA = 0;
125 1 SCL = 1;
126 1 Delay4us();
127 1 SCL = 0;
128 1 SDA = 1;
129 1 }
130
131 void Slave_NOACK()
132 {
133 1 SDA = 1;
134 1 SCL = 1;
135 1 Delay4us();
136 1 SCL = 0;
137 1 SDA = 0;
138 1 }
139
140 void IIC_SendByte(uchar wd)
141 {
142 1 uchar i;
143 1 for(i=0;i<8;i++)
144 1 {
145 2 SDA=(bit)(wd&0x80);
146 2 _nop_();
147 2 _nop_();
148 2 SCL = 1;
149 2 Delay4us();
150 2 }
151 1 Delay4us();
152 1 SDA = 1;
153 1 SCL = 1;
154 1 Delay4us();
155 1
156 1 IIC_ERROR = SDA;
157 1 SCL = 0;
158 1 Delay4us();
159 1 }
160
161 uchar IIC_ReceiveByte()
162 {
163 1 uchar i,rd = 0x00;
164 1 for(i=0;i<8;i++)
165 1 {
166 2 SCL = 1;
167 2 rd <<= 1;
168 2 rd |= SDA;
169 2 Delay4us();
170 2 SCL = 0;
171 2 Delay4us();
172 2 }
173 1 SCL = 0;
174 1 Delay4us();
175 1 return rd;
176 1 }
177
178 void ADC_PCF8591(uchar CtrlByte)
179 {
C51 COMPILER V8.08 23 08/13/2009 10:05:47 PAGE 4
180 1 uchar i;
181 1 IIC_Start();
182 1 IIC_SendByte(0x90);
183 1 if(IIC_ERROR == 1) return;
184 1
185 1 IIC_SendByte(CtrlByte);
186 1 if(IIC_ERROR == 1) return;
187 1
188 1 IIC_Start();
189 1 IIC_SendByte(0x91);
190 1 if(IIC_ERROR == 1) return;
191 1 IIC_ReceiveByte();
192 1 Slave_ACK();
193 1 for(i=0;i<4;i++)
194 1 {
195 2 Recv_Buffer[i++] = IIC_ReceiveByte();
196 2 Slave_ACK();
197 2 }
198 1 Slave_NOACK();
199 1 IIC_Stop();
200 1 }
201
202 void DAC_PCF8591(uchar CtrlByte,uchar dat)
203 {
204 1 IIC_Start();
205 1 Delay4us();
206 1 IIC_SendByte(0x90);
207 1 if(IIC_ERROR == 1) return;
208 1 IIC_SendByte(CtrlByte);
209 1 if(IIC_ERROR == 1) return;
210 1 IIC_SendByte(dat);
211 1 if(IIC_ERROR == 1) return;
212 1 IIC_Stop();
213 1 Delay4us();
214 1 Delay4us();
215 1 }
216
217 void main()
218 {
219 1 LCD_Initialise();
220 1 while(1)
221 1 {
222 2 ADC_PCF8591(0x40);
223 2 Convert_To_Voltage(Recv_Buffer[0]);
224 2 LCD_Line_1[2]=Voltage[2];
225 2 LCD_Line_1[4]=Voltage[1];
226 2 LCD_Line_1[5]=Voltage[0];
227 2 Convert_To_Voltage(Recv_Buffer[1]);
228 2 LCD_Line_1[11]=Voltage[2];
229 2 LCD_Line_1[13]=Voltage[1];
230 2 LCD_Line_1[14]=Voltage[0];
231 2 Convert_To_Voltage(Recv_Buffer[2]);
232 2 LCD_Line_2[2]=Voltage[2];
233 2 LCD_Line_2[4]=Voltage[1];
234 2 LCD_Line_2[5]=Voltage[0];
235 2 Convert_To_Voltage(Recv_Buffer[3]);
236 2 LCD_Line_2[11]=Voltage[2];
237 2 LCD_Line_2[13]=Voltage[1];
238 2 LCD_Line_2[14]=Voltage[0];
239 2
240 2 LCD_Display_A_Line(0x00, LCD_Line_1);
241 2 LCD_Display_A_Line(0x40, LCD_Line_2);
C51 COMPILER V8.08 23 08/13/2009 10:05:47 PAGE 5
242 2
243 2 DAC_PCF8591(0x40,Recv_Buffer[0]);
244 2 }
245 1 }
246
247
248
249
250
251
252
253
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 591 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 40 3
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -