📄 温度计.lst
字号:
C51 COMPILER V8.08 蝊度计 07/23/2008 16:59:22 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 蝊度计
OBJECT MODULE PLACED IN 温度计.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 温度计.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <reg52.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit DQ=P3^0;
6 uchar flag1;
7 uchar tempL=0;
8 uchar tempH=0;
9 uint tt;
10 float temperature;
11 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
12 uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
13 uchar code scan_con[4]={0x01,0x02,0x04,0x08};
14 uchar data Dis_play[4]={0X00,0x00,0x00,0x00};
15
16 void delay(uint i)
17 {
18 1 while(i--);
19 1 }
20 Init_DS18B20(void)
21 {
22 1 uchar x=0;
23 1 DQ = 1; //DQ复位
24 1 delay(8);
25 1 DQ = 0; //单片机将DQ拉低
26 1 delay(80); //精确延时 大于 480us
27 1 DQ = 1;
28 1 delay(14);
29 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
30 1 delay(20);
31 1 }
32
33
34 // 读字节子函数
35
36 ReadOneChar(void)
37 {
38 1 uchar i = 0;
39 1 uchar dat = 0;
40 1 for (i=8;i>0;i--)
41 1 {
42 2 DQ = 0;
43 2 dat>>=1; // 数据右移一位
44 2 DQ = 1;
45 2 if(DQ) // DQ为1
46 2 dat|=0x80; // 读出数据
47 2 delay(4);
48 2 }
49 1 return(dat);
50 1 }
51
52 // 写字节子函数
53
54 WriteOneChar(unsigned char dat)
55 {
C51 COMPILER V8.08 蝊度计 07/23/2008 16:59:22 PAGE 2
56 1 uchar i = 0;
57 1 for (i=8; i>0; i--)
58 1 {
59 2 DQ = 0;
60 2 DQ = dat&0x01; //写入一位数据
61 2 delay(5);
62 2 DQ = 1;
63 2 dat>>=1;
64 2 }
65 1 }
66
67
68 // 发送温度转换命令
69 ReadTemperature(void)
70
71 {
72 1 Init_DS18B20();
73 1 WriteOneChar(0xcc);
74 1 WriteOneChar(0x44); //启动温度转换
75 1 delay(125);
76 1 Init_DS18B20();
77 1 WriteOneChar(0xcc); //跳过读序列号的操作
78 1 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
79 1 tempL=ReadOneChar();
80 1 tempH=ReadOneChar();
81 1 if(tempH>0xfd)
82 1 {
83 2 flag1=1;
84 2 temperature=(65536-((tempH*256)+tempL))*0.0625;
85 2 tt=temperature*10+0.5;
86 2 delay(200);
87 2 return(tt);
88 2 }
89 1 else
90 1 {
91 2 temperature=((tempH*256)+tempL)*0.0625;
92 2 tt=temperature*10+0.5;
93 2 delay(200);
94 2 return(tt);
95 2 }
96 1 }
97 void tem_deal(uint tem)
98
99 {
100 1 Dis_play[0]=0xff;
101 1 Dis_play[0]=tem/1000;
102 1 Dis_play[1]=tem/100%10;
103 1 Dis_play[2]=tem%100/10;
104 1 Dis_play[3]=tem%10;
105 1
106 1 if(!Dis_play[0])
107 1 {
108 2 Dis_play[0]=0x0a;
109 2 if(!Dis_play[1])
110 2 {
111 3 Dis_play[1]=0x0a;
112 3 }
113 2 }
114 1 if(flag1)
115 1 {
116 2 Dis_play[0]=0x0b;
117 2 }
C51 COMPILER V8.08 蝊度计 07/23/2008 16:59:22 PAGE 3
118 1 }
119
120 void display()
121 {
122 1 char k;
123 1 for(k=0;k<4;k++)
124 1 {
125 2 if (k==2)
126 2 {
127 3 P2=scan_con[k];
128 3 P0=table1[Dis_play[k]];
129 3 }
130 2 else
131 2 {
132 3 P2=scan_con[k];
133 3 P0=table[Dis_play[k]];
134 3 }
135 2 delay(500);
136 2 }
137 1 }
138
139
140
141 void main()
142 {
143 1 do
144 1 {
145 2 flag1=0;
146 2 tem_deal(ReadTemperature());
147 2 display();
148 2 }
149 1 while(1);
150 1 }
151
152
153
154
155
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 461 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = ---- ----
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 + -