📄 main.lst
字号:
C51 COMPILER V7.09 MAIN 11/20/2007 08:45:28 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 main.c
3 LM75A数字温度计
4 */
5
6
7 #include "Disp.h"
8 #include "I2C.h"
9 #include <reg51.h>
10 #include <string.h>
11
12
13 /*
14 函数:Delay()
15 功能:延时1ms~65.536s
16 参数:
17 t>0时,延时(t*0.001)s
18 t=0时,延时65.536s
19 */
20 void Delay(unsigned int t)
21 {
22 1 do
23 1 {
24 2 TH0 = 0xFC;
25 2 TL0 = 0x66;
26 2 TR0 = 1;
27 2 while ( !TF0 );
28 2 TR0 = 0;
29 2 TF0 = 0;
30 2 } while ( --t != 0 );
31 1 }
32
33
34 /*
35 函数:SysInit()
36 功能:系统初始化
37 */
38 void SysInit()
39 {
40 1 TMOD &= 0xF0;
41 1 TMOD |= 0x01; //设置T0为16位定时器
42 1 DispInit(); //数码管扫描显示初始化
43 1 I2C_Init(); //初始化I2C总线
44 1 }
45
46
47 /*
48 函数:LM75A_GetTemp
49 功能:读出LM75A的温度值
50 返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)
51 */
52 int LM75A_GetTemp()
53 {
54 1 unsigned char buf[2];
55 1 int t;
C51 COMPILER V7.09 MAIN 11/20/2007 08:45:28 PAGE 2
56 1 I2C_Gets(0x90,0x00,2,buf);
57 1 t = buf[0];
58 1 t <<= 8;
59 1 t += buf[1];
60 1 t >>= 5; //去掉无关位
61 1 return t;
62 1 }
63
64
65 /*
66 函数:ByteToStr()
67 功能:字节型变量c转换为十进制字符串
68 */
69 void ByteToStr(unsigned char idata *s, unsigned char c)
70 {
71 1 code unsigned char Tab[] = {100,10};
72 1 unsigned char i;
73 1 unsigned char t;
74 1 for ( i=0; i<2; i++ )
75 1 {
76 2 t = c / Tab[i];
77 2 *s++ = '0' + t;
78 2 c -= t * Tab[i];
79 2 }
80 1 *s++ = '0' + c;
81 1 *s = '\0';
82 1 }
83
84
85 /*
86 函数:DispTemp()
87 功能:在数码管上显示出温度值
88 参数:
89 t:补码,除以8以后才是真正温度值
90 */
91 void DispTemp(int t)
92 {
93 1 code unsigned char Tab[8][4] =
94 1 {
95 1 "000",
96 1 "125",
97 1 "250",
98 1 "375",
99 1 "500",
100 1 "625",
101 1 "750",
102 1 "875"
103 1 };
104 1 unsigned char buf[4];
105 1 bit s; //符号位
106 1 unsigned char i; //整数部分
107 1 unsigned char d; //小数部分
108 1 unsigned char x; //临时变量
109 1 //分离出符号
110 1 s = 0;
111 1 if ( t < 0 )
112 1 {
113 2 s = 1;
114 2 t = -t;
115 2 }
116 1 //分离出整数和小数部分
117 1 i = t / 8;
C51 COMPILER V7.09 MAIN 11/20/2007 08:45:28 PAGE 3
118 1 d = t % 8;
119 1 //整数部分转换成字符串
120 1 ByteToStr(buf,i);
121 1 x = 4 - strlen(buf);
122 1 //清除所有显示
123 1 DispClear();
124 1 //显示符号
125 1 if ( s ) DispChar(x,'-');
126 1 x++;
127 1 //显示整数部分
128 1 DispStr(x,buf);
129 1 //显示小数点
130 1 DispDotOn(4);
131 1 //显示小数部分
132 1 DispStr(5,Tab[d]);
133 1 }
134
135
136 void main()
137 {
138 1 int t;
139 1 SysInit();
140 1 for (;;)
141 1 {
142 2 t = LM75A_GetTemp();
143 2 DispTemp(t);
144 2 Delay(1000);
145 2 }
146 1 }
147
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 274 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -