📄 ds18b20.lst
字号:
C51 COMPILER V7.06 DS18B20 12/01/2006 20:14:33 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 //sbit warmer=P1^4;
3 //sbit led_run=P1^0;
4 //sbit k_power=P3^3;
5 sbit ge=P1^0;
6 sbit shi=P1^1;
7 sbit DQ =P1^6; //定义通信端口
8 //延时函数
9 //unsigned char tab[]={ 0x3f,0x30,0x6d,0x79,0x72,0x5b,0x5f,0x31,0x7f,0x7b,0x40};
10 //0, 1, 2 3 4 5 6 7 8 9
11
12 unsigned char tab[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe4,0xfe,0xf6};
13
14 void delay(unsigned int i)
15
16 {
17 1 while(i--);
18 1
19 1 }
20 //初始化函数
21 Init_DS18B20(void)
22 {
23 1 unsigned char x=0;
24 1 DQ = 1; //DQ复位
25 1 delay(8); //稍做延时
26 1 DQ = 0; //单片机将DQ拉低
27 1 delay(80); //精确延时 大于 480us
28 1 DQ = 1; //拉高总线
29 1 delay(14);
30 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
31 1 delay(20);
32 1 }
33 //读一个字节
34 ReadOneChar(void)
35 {
36 1 unsigned char i=0;
37 1 unsigned char dat = 0;
38 1 for (i=8;i>0;i--)
39 1 {
40 2 DQ = 0; // 给脉冲信号
41 2 dat>>=1;
42 2 DQ = 1; // 给脉冲信号
43 2 if(DQ)
44 2 dat|=0x80;
45 2 delay(4);
46 2 }
47 1 return(dat);
48 1 }
49 //写一个字节
50 WriteOneChar(unsigned char dat)
51 {
52 1 unsigned char i=0;
53 1 for (i=8; i>0; i--)
54 1 {
55 2 DQ = 0;
C51 COMPILER V7.06 DS18B20 12/01/2006 20:14:33 PAGE 2
56 2 DQ = dat&0x01;
57 2 delay(5);
58 2 DQ = 1;
59 2 dat>>=1;
60 2 }
61 1 delay(4);
62 1 }
63 //读取温度
64 ReadTemperature(void)
65 {
66 1 unsigned char a=0;
67 1 unsigned char b=0;
68 1 unsigned char t=0;
69 1 Init_DS18B20();
70 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
71 1 WriteOneChar(0x44); // 启动温度转换
72 1 Init_DS18B20();
73 1 WriteOneChar(0xCC); //跳过读序号列号的操作
74 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
75 1 a=ReadOneChar(); //读取温度值低位
76 1 b=ReadOneChar(); //读取温度值高位
77 1 a=a>>4; //低位右移4位,舍弃小数部分
78 1 t=b<<4; //高位左移4位,舍弃符号位
79 1 t=t|a;
80 1 return(t);
81 1 }
82 void display_tempmain(unsigned char i) //主程序温度显示函数
83 {
84 1 P0=tab[i/10];
85 1 shi=0;
86 1 ge=1;
87 1
88 1 P1=0X00|((char)shi)<<1|((char)ge);
89 1
90 1 delay(1000);
91 1 P0=tab[i%10];
92 1 shi=1;
93 1 ge=0;
94 1
95 1 P1=0X00|((char)shi)<<1|((char)ge);
96 1 }
97 void main(void)
98 {unsigned int temp;
99 1 P0=0x00;
100 1 while(1) //主循环
101 1 {
102 2
103 2 temp=ReadTemperature();
104 2 display_tempmain(temp);
105 2
106 2 }
107 1 }
108
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 252 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
C51 COMPILER V7.06 DS18B20 12/01/2006 20:14:33 PAGE 3
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 + -