温度采集ds18b20lcd.lst
来自「单片机的实用程序代码」· LST 代码 · 共 208 行
LST
208 行
C51 COMPILER V7.02b 温_炔杉_DS18B20LCD 02/25/2010 15:04:21 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE 温_炔杉_DS18B20LCD
OBJECT MODULE PLACED IN 温度采集DS18B20LCD.OBJ
COMPILER INVOKED BY: D:\Progrom\Keil\C51\BIN\C51.EXE 温度采集DS18B20LCD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************
2 * 文件名 : 温度采集DS18B20.c
3 * 描述 : 该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来。
4 * 创建人 : 东流,2009年4月10日
5 * 版本号 : 2.0
6 ***********************************************************************/
7 #include<reg52.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 #define jump_ROM 0xCC
12 #define start 0x44
13 #define read_EEROM 0xBE
14
15 sbit DQ = P2^3; //DS18B20数据口
16
17 unsigned char TMPH,TMPL;
18
19 uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
20 /********************************************************************
21 * 名称 : delay()
22 * 功能 : 延时,延时时间大概为140US。
23 * 输入 : 无
24 * 输出 : 无
25 ***********************************************************************/
26
27 void delay_1()
28 {
29 1 int i,j;
30 1 for(i=0; i<=10; i++)
31 1 for(j=0; j<=2; j++)
32 1 ;
33 1 }
34
35 /********************************************************************
36 * 名称 : delay()
37 * 功能 : 延时函数
38 * 输入 : 无
39 * 输出 : 无
40 ***********************************************************************/
41 void delay(uint N)
42 {
43 1 int i;
44 1 for(i=0; i<N; i++)
45 1 ;
46 1 }
47
48 /********************************************************************
49 * 名称 : Delay_1ms()
50 * 功能 : 延时子程序,延时时间为 1ms * x
51 * 输入 : x (延时一毫秒的个数)
52 * 输出 : 无
53 ***********************************************************************/
54 void Delay_1ms(uint i)//1ms延时
55 {
C51 COMPILER V7.02b 温_炔杉_DS18B20LCD 02/25/2010 15:04:21 PAGE 2
56 1 uchar x,j;
57 1 for(j=0;j<i;j++)
58 1 for(x=0;x<=148;x++);
59 1 }
60 /********************************************************************
61 * 名称 : Reset()
62 * 功能 : 复位DS18B20
63 * 输入 : 无
64 * 输出 : 无
65 ***********************************************************************/
66 uchar Reset(void)
67 {
68 1 uchar deceive_ready;
69 1 DQ = 0;
70 1 delay(29);
71 1 DQ = 1;
72 1 delay(3);
73 1 deceive_ready = DQ;
74 1 delay(25);
75 1 return(deceive_ready);
76 1 }
77
78 /********************************************************************
79 * 名称 : read_bit()
80 * 功能 : 从DS18B20读一个位值
81 * 输入 : 无
82 * 输出 : 从DS18B20读出的一个位值
83 ***********************************************************************/
84 uchar read_bit(void)
85 {
86 1 uchar i;
87 1 DQ = 0;
88 1 DQ = 1;
89 1 for(i=0; i<3; i++);
90 1 return(DQ);
91 1 }
92
93 /********************************************************************
94 * 名称 : write_bit()
95 * 功能 : 向DS18B20写一位
96 * 输入 : bitval(要对DS18B20写入的位值)
97 * 输出 : 无
98 ***********************************************************************/
99 void write_bit(uchar bitval)
100 {
101 1 DQ=0;if(bitval==1)
102 1 DQ=1;
103 1 delay(5);
104 1 DQ=1;
105 1 }
106
107 /********************************************************************
108 * 名称 : read_byte()
109 * 功能 : 从DS18B20读一个字节
110 * 输入 : 无
111 * 输出 : 从DS18B20读到的值
112 ***********************************************************************/
113 uchar read_byte(void)
114 {
115 1 uchar i,m,receive_data;
116 1 m = 1;
117 1 receive_data = 0;
C51 COMPILER V7.02b 温_炔杉_DS18B20LCD 02/25/2010 15:04:21 PAGE 3
118 1 for(i=0; i<8; i++)
119 1 {
120 2 if(read_bit())
121 2 {
122 3 receive_data = receive_data + (m << i);
123 3 }
124 2 delay(6);
125 2 }
126 1 return(receive_data);
127 1 }
128
129 /********************************************************************
130 * 名称 : write_byte()
131 * 功能 : 向DS18B20写一个字节
132 * 输入 : val(要对DS18B20写入的命令值)
133 * 输出 : 无
134 ***********************************************************************/
135 void write_byte(uchar val)
136 {
137 1 uchar i,temp;
138 1 for(i=0; i<8; i++)
139 1 {
140 2 temp = val >> i;
141 2 temp = temp & 0x01;
142 2 write_bit(temp);
143 2 delay(5);
144 2 }
145 1 }
146
147
148 /********************************************************************
149 * 名称 : Main()
150 * 功能 : 主函数
151 * 输入 : 无
152 * 输出 : 无
153 ***********************************************************************/
154 void main()
155 {
156 1 float tt;
157 1 uint temp;
158 1 P2 = 0x00;
159 1 while(1)
160 1 {
161 2 Reset();
162 2 write_byte(jump_ROM);
163 2 write_byte(start);
164 2 Reset();
165 2 write_byte(jump_ROM);
166 2 write_byte(read_EEROM);
167 2 TMPL = read_byte();
168 2 TMPH = read_byte();
169 2 temp = TMPL / 16 + TMPH * 16;
170 2 P0 = table[temp/10%10];
171 2 P2 = 6;
172 2 Delay_1ms(5);
173 2 P0 = table[temp%10];
174 2 P2 = 7;
175 2 Delay_1ms(5);
176 2 }
177 1 }
*** WARNING C280 IN LINE 156 OF 温度采集DS18B20LCD.C: 'tt': unreferenced local variable
C51 COMPILER V7.02b 温_炔杉_DS18B20LCD 02/25/2010 15:04:21 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 338 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?