📄 ds18b20-shuma-c51.lst
字号:
C51 COMPILER V8.05a DS18B20_SHUMA_C51 11/20/2006 21:44:56 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE DS18B20_SHUMA_C51
OBJECT MODULE PLACED IN DS18B20-SHUMA-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20-SHUMA-C51.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME300B单片机开发系统演示程序 - DS18B20温度显示 */
4 /* */
5 /* 6数码管显示 */
6 /* */
7 /* 版本: V1.0 (2006/11/20) */
8 /* 作者: gguoqing (Email: gguoqing@willar.com) */
9 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
10 /* 时间: 2006/07/12 */
11 /* */
-
12 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
13 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
14 /* */
15 /*******************************************************************/
16
17 #include <reg51.h>
18
19 sbit DQ = P3^3; //定义DS18B20端口DQ
20 sbit BEEP=P3^7 ;
21
22 unsigned char presence ;
23
24 unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
25 0x80,0x90,0xff};
26 unsigned char data temp_data[2] = {0x00,0x00};
27 unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00};
28 unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
29 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
30 void beep();
31 sbit DIN = P0^7; //小数点
32 bit flash=0; //显示开关标记
33
34 /**********************************************************/
35 void Delay(unsigned int num)//延时函数
36 {
37 1 while( --num );
38 1 }
39
40 /**********************************************************/
41 Init_DS18B20(void)//初始化ds1820
42 {
43 1
44 1 DQ = 1; //DQ复位
45 1 Delay(8); //稍做延时
46 1
47 1 DQ = 0; //单片机将DQ拉低
48 1 Delay(90); //精确延时 大于 480us
49 1
50 1 DQ = 1; //拉高总线
51 1 Delay(8);
52 1
53 1 presence = DQ; //如果=0则初始化成功 =1则初始化失败
54 1 Delay(100);
C51 COMPILER V8.05a DS18B20_SHUMA_C51 11/20/2006 21:44:56 PAGE 2
55 1 DQ = 1;
56 1
57 1 return(presence); //返回信号,0=presence,1= no presence
58 1 }
59 /**********************************************************/
60 ReadOneChar(void)//读一个字节
61 {
62 1 unsigned char i = 0;
63 1 unsigned char dat = 0;
64 1
65 1 for (i = 8; i > 0; i--)
66 1 {
67 2 DQ = 0; // 给脉冲信号
68 2 dat >>= 1;
69 2 DQ = 1; // 给脉冲信号
70 2
71 2 if(DQ)
72 2 dat |= 0x80;
73 2 Delay(4);
74 2 }
75 1
76 1 return (dat);
77 1 }
78
79 /**********************************************************/
80 WriteOneChar(unsigned char dat)//写一个字节
81 {
82 1 unsigned char i = 0;
83 1 for (i = 8; i > 0; i--)
84 1 {
85 2 DQ = 0;
86 2 DQ = dat&0x01;
87 2 Delay(5);
88 2
89 2 DQ = 1;
90 2 dat>>=1;
91 2 }
92 1 }
93
94 /*********************************************************/
95
96 Read_Temperature(void)//读取温度
97 {
98 1 Init_DS18B20();
99 1 if(presence==1)
100 1 { beep();flash=1;} //DS18B20不正常,蜂鸣器报警
101 1 else
102 1 {
103 2 flash=0;
104 2 WriteOneChar(0xCC); // 跳过读序号列号的操作
105 2 WriteOneChar(0x44); // 启动温度转换
106 2
107 2 Init_DS18B20();
108 2 WriteOneChar(0xCC); //跳过读序号列号的操作
109 2 WriteOneChar(0xBE); //读取温度寄存器
110 2
111 2 temp_data[0] = ReadOneChar(); //温度低8位
112 2 temp_data[1] = ReadOneChar(); //温度高8位
113 2 }
114 1 }
115 /*********************************************************/
116 Disp_Temperature()//显示温度
C51 COMPILER V8.05a DS18B20_SHUMA_C51 11/20/2006 21:44:56 PAGE 3
117 {
118 1 unsigned char n=0;
119 1
120 1 display[4]=temp_data[0]&0x0f;
121 1 display[0]=ditab[display[4]]; //查表得小数位的值
122 1
123 1 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
124 1 display[3]=display[4]/100;
125 1 display[1]=display[4]%100;
126 1 display[2]=display[1]/10;
127 1 display[1]=display[1]%10;
128 1
129 1 if(!display[3]) //高位为0,不显示
130 1 {
131 2 display[3]=0x0a;
132 2 if(!display[2]) //次高位为0,不显示
133 2 display[2]=0x0a;
134 2 }
135 1
136 1 P0 = 0xc6; //显示 C
137 1 P2 = 0x7f;
138 1 Delay(300);
139 1
140 1 P0 = 0x9c; //显示 °
141 1 P2 = 0xbf;
142 1 Delay(300);
143 1
144 1 P0 =LEDData[display[0]] ; //显示小数位
145 1 P2 = 0xdf;
146 1 Delay(300);
147 1
148 1 P0 =LEDData[display[1]]; //显示个位
149 1 DIN = 0;
150 1 P2 = 0xef;
151 1 Delay(300);
152 1
153 1 P0 =LEDData[display[2]]; //显示十位
154 1 P2 = 0xf7;
155 1 Delay(300);
156 1
157 1 P0 =LEDData[display[3]]; //显示十位
158 1 P2 = 0xfb;
159 1 Delay(300);
160 1
161 1 P2 = 0xff; //关闭显示
162 1 }
163
164 /*********************************************************/
165 void beep()
166 {
167 1 unsigned char i;
168 1 for (i=0;i<100;i++)
169 1 {
170 2 Delay(60);
171 2 BEEP=!BEEP; //BEEP取反
172 2 }
173 1 BEEP=1; //关闭蜂鸣器
174 1 }
175
176 /*********************************************************/
177 void main(void)
178 {
C51 COMPILER V8.05a DS18B20_SHUMA_C51 11/20/2006 21:44:56 PAGE 4
179 1 while(1)
180 1 {
181 2 Read_Temperature();
182 2 if(flash==0)
183 2 {Disp_Temperature();}
184 2 else P2 = 0xff ; //DS18B20不正常,关闭显示
185 2 }
186 1 }
187
188 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 353 ----
CONSTANT SIZE = 27 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 1
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 + -