📄 lm75a.lst
字号:
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LM75A
OBJECT MODULE PLACED IN lm75a.OBJ
COMPILER INVOKED BY: D:\Keil C51\C51\BIN\C51.EXE lm75a.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "VIIC_C51.h"
2 #include <reg51.h>
3 #include <intrins.h>
4 #include "lcd1602.h"
5 #include "type.h"
6 #include <string.h>
7 #include <stdio.h>
8
9 #define uchar unsigned char
10
11
12 uchar data LM75A=0x90; // LM75A 的I2C 地址
13 //uchar data MWD[2]={9}; //发送缓冲区
14 uchar data MRD[2]={204}; //接收缓冲区
15 uchar data MWD[2]={0};
16
17 uchar dis[16];
18 //long int m=0 ;
19
20 void delayms(UINT t);
21 Is_busy();
22 void WriteOrder(UCHAR Order);
23 void WriteData(UCHAR y,UCHAR x,unsigned char LcdData[]);
24 void LCD_Init(void);
25 int BinaryToDecimal(int bina) ;
26 void Decimal_Display(uchar recv[]);
27 void WriteSChar(UCHAR y,UCHAR x,UCHAR z);
28
29 void Binary_Display(uchar recv[]) ;
30
31 void main(void)
32 {
33 1 LCD_Init();
34 1
35 1 while(1)
36 1 {
37 2
38 2 IRcvStr(LM75A,0x00,MRD,2); //读取LM75A 温度值
39 2 //Binary_Display(MRD);
40 2
41 2 Decimal_Display(MRD);
42 2 // while(1);
43 2
44 2 }
45 1 }
46 //*****************二进制转换成十进制***********
47 // bina 为输入的二进制数,d用来处理该数。
48 // k为标志位,当k为1时表示输入的数有问题
49 //为每次分解的个位数;j为二进制的权值;m为累计的十进制和;p为输入的数的位数
50 //超过8时,该数越界,需要重新输入,定k=1
51 //***********************************************
52
53 int BinaryToDecimal(int bina)
54 {
55 1 int i=0,j=1,m=0;
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 2
56 1
57 1 while(bina)
58 1 {
59 2 i=bina%10;
60 2
61 2 m+=i*j;
62 2 j=j*2;
63 2 bina/=10;
64 2
65 2 }
66 1 //if(k=1)WriteData(2,0,"over!");
67 1 return m;
68 1 }
69
70
71
72 //**********************二 进制显示子函数***************************//
73
74
75 void Binary_Display(uchar recv[])
76 {
77 1 int a=1,b,c=0;
78 1 int i;
79 1
80 1 for(a=1;a>=0;a--)
81 1 {
82 2 int m=0x01;
83 2 for(b=0;b<8;b++)
84 2 {
85 3 dis[c]=recv[a]&m;
86 3 c++;
87 3 m<<=1;
88 3 }
89 2 }
90 1
91 1
92 1
93 1 for ( i=0;i<15;i++)
94 1 {
95 2 if (dis[14-i])
96 2 WriteSChar(1,i+1,0x31);
97 2 //WriteData(1,i+1,"1");
98 2 else
99 2 WriteSChar(1,i+1,0x30);
100 2
101 2 //WriteData(1,i+1,"0");
102 2 }
103 1
104 1 if(!dis[15])WriteData(1,0,"") ;
105 1 else
106 1 WriteData(1,0,"-") ;
107 1 }
108
109
110 //**********************Last 进制显示子函数***************************//
111
112 void Decimal_Display(uchar recv[])
113 {
114 1 int a=1,b,c=0;
115 1 int i;
116 1 int k=0;
117 1 long int m=0,j=1;
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 3
118 1
119 1 for(a=1;a>=0;a--)
120 1 {
121 2 int n=0x01;
122 2 for(b=0;b<8;b++)
123 2 {
124 3 dis[c]=recv[a]&n;
125 3 c++;
126 3 n<<=1;
127 3 }
128 2 }
129 1
130 1 if(!dis[15])WriteData(1,0,"") ;
131 1 else
132 1 WriteData(1,0,"-") ;
133 1
134 1 for(a=5;a<=14;a++)
135 1 {
136 2 if(dis[a])k=1;
137 2 else k=0;
138 2 m+=k*j;
139 2 j=j*2;
140 2
141 2 }
142 1
143 1 /* WriteSChar(1,1,(m/1000)+0x30);
144 1 m=m%1000;
145 1 WriteSChar(1,2,(m/100)+0x30);
146 1 m=m%100;
147 1 WriteSChar(1,3,(m/10)+0x30);
148 1 m=m%10;
149 1 WriteSChar(1,4,(m%10)+0x30);
150 1 */
151 1
152 1
153 1 m=(m*1000)/8;
154 1
155 1
156 1 WriteSChar(1,1,(m/100000)+0x30); //3位整数,3位小数,
157 1 m=m%100000;
158 1 WriteSChar(1,2,(m/10000)+0x30);
159 1 m=m%10000;
160 1 WriteSChar(1,3,(m/1000)+0x30);
161 1 m=m%1000;
162 1 WriteData(1,4,".");
163 1
164 1 WriteSChar(1,5,(m/100)+0x30);
165 1 m=m%100;
166 1 WriteSChar(1,6,(m/10)+0x30);
167 1 m=m%10;
168 1 WriteSChar(1,7,(m%10)+0x30);
169 1
170 1 WriteData(1,8,"C");
171 1
172 1
173 1
174 1
175 1
176 1 }
*** WARNING C280 IN LINE 115 OF LM75A.C: 'i': unreferenced local variable
177
178 //********************延时********************************
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 4
179
180 void delayms(UINT t)
181 {
182 1 UCHAR i;
183 1 while(t--)
184 1 {
185 2 for(i=0;i<100;i++);
186 2 }
187 1 }
188
189
190 //********************************************************************
191 // LCD1602 判忙函数
192 //********************************************************************
193 Is_busy()
194 {
195 1 rs=1;
196 1 rw=0;
197 1 en=0;
198 1 LCD_Data=0xff;
199 1 rs=0;
200 1 rw=1;
201 1 en=0;
202 1 delayms(10);
203 1 en=1;
204 1 while(busy);
205 1
206 1 }
207 //********************************************************************
208 // 写命令
209 //********************************************************************
210 void WriteOrder(UCHAR Order)
211 {
212 1 //LCD_Data=0xff;
213 1 //Is_busy();
214 1 rs=0;
215 1 rw=0;
216 1 en=0;
217 1 delayms(10);
218 1 en=1;
219 1 LCD_Data=Order;
220 1 /*
221 1 Order=
222 1 0X01;//清屏
223 1 0X02;//归位
224 1 0X38;// 8位2行5x7点阵
225 1 0X08;//显示器关、光标关、闪烁关
226 1 0X09;//显示器关、光标关、闪烁开
227 1 0X0A;//显示器关、光标开、闪烁关
228 1 0X0B;//显示器关、光标开、闪烁开
229 1 0X0C;//显示器开、光标关、闪烁关
230 1 0X0D;//显示器开、光标关、闪烁开
231 1 0X0E;//显示器开、光标开、闪烁关
232 1 0X0F;//显示器开、光标开、闪烁开
233 1 0X06;//文字不动,光标自动右移
234 1 0X07;//文字,光标自动右移
235 1 0x05;//文字,光标自动左移
236 1 0X80;//写入显示起始地址(第一行第一个位置)
237 1 0XC0;//写入显示起始地址(第二行第一个位置)
238 1
239 1 */
240 1
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 5
241 1 }
242 //********************************************************************
243 // 写字符串
244 //********************************************************************
245 void WriteData(UCHAR y,UCHAR x,unsigned char LcdData[])//LcdData)
246 {
247 1 UCHAR j,len;
248 1 len=strlen(LcdData);
249 1 //UCHAR D_Idx;
250 1 //LCD_Data=0xff;
251 1 //Is_busy();
252 1 if(1==y)
253 1 {
254 2 WriteOrder(x+0x80);
255 2 }
256 1 else
257 1 {
258 2 WriteOrder(x+0xC0);
259 2 }
260 1
261 1 rs=0;
262 1 rw=0;
263 1 en=0;
264 1 delayms(10);
265 1 en=1;
266 1 //D_Idx=len(LcdData);
267 1 for(j=0;j<len;j++)
268 1 {
269 2 //LCD_Data=LCD[j];
270 2 LCD_Data=LcdData[j];
271 2 Is_busy();
272 2 en=1;
273 2 }
274 1
275 1 }
276 //********************************************************
277 //写单个字符
278 //********************************************************
279 void WriteSChar(UCHAR y,UCHAR x,UCHAR z)//LcdData)
280 {
281 1 UCHAR j;
282 1 // len=strlen(LcdData);
283 1 //UCHAR D_Idx;
284 1 //LCD_Data=0xff;
285 1 //Is_busy();
286 1 if(1==y)
287 1 {
288 2 WriteOrder(x+0x80);
289 2 }
290 1 else
291 1 {
292 2 WriteOrder(x+0xC0);
293 2 }
294 1
295 1 rs=0;
296 1 rw=0;
297 1 en=0;
298 1 delayms(10);
299 1 en=1;
300 1 //D_Idx=len(LcdData);
301 1
302 1 //LCD_Data=LCD[j];
C51 COMPILER V8.08 LM75A 09/12/2008 22:19:59 PAGE 6
303 1 LCD_Data=z;
304 1 Is_busy();
305 1 en=1;
306 1
307 1
308 1 }
*** WARNING C280 IN LINE 281 OF LM75A.C: 'j': unreferenced local variable
309
310 //********************************************************************
311 // LCD1602初始化
312 //********************************************************************
313 void LCD_Init(void)
314 {
315 1
316 1 WriteOrder(0X01);
317 1 WriteOrder(0x38);
318 1 WriteOrder(0x0C);
319 1 WriteOrder(0x06);
320 1
321 1 }
322
323
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1433 ----
CONSTANT SIZE = 7 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 55
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -