📄 wenduceliang10.lst
字号:
C51 COMPILER V7.06 WENDUCELIANG10 05/06/2009 22:24:40 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE WENDUCELIANG10
OBJECT MODULE PLACED IN wenduceliang10.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wenduceliang10.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************/
2 /*杭州电子&计算机工作室 */
3 /*http://www.hificat.com */
4 /*DS18B20测温程序 */
5 /*目标器件:AT89S51 */
6 /*晶振:11.0592MHZ */
7 /*编译环境:Keil 7.50A */
8 /********************************************************/
9
10
11 /*********************************包含头文件********************************/
12 #include <reg51.h>
13
14 /*******************************共阳LED段码表*******************************/
15 unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e};
16 unsigned char code tabdp[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
17 /*********************************端口定义**********************************/
18 sbit DQ=P3^3; //数据传输线接单片机的相应的引脚
19 sbit BUZZER=P3^7;
20 /*********************************定义全局变量******************************/
21 unsigned char tempL=0; //临时变量低位
22 unsigned char tempH=0; //临时变量高位
23 float temperature; //温度值
24
25 /****************************************************************************
26 函数功能:延时子程序
27 入口参数:k
28 出口参数:
29 ****************************************************************************/
30 void delay(unsigned int k)
31 {
32 1 unsigned int n;
33 1 n=0;
34 1 while(n < k)
35 1 {n++;}
36 1 return;
37 1 }
38
39 /****************************************************************************
40 函数功能:数码管扫描延时子程序
41 入口参数:
42 出口参数:
43 ****************************************************************************/
44 void delay1(void)
45 {
46 1 int k;
47 1 for(k=0;k<400;k++);
48 1 }
49
50 /****************************************************************************
51 函数功能:数码管显示子程序
52 入口参数:k
53 出口参数:
54 ****************************************************************************/
55 void display(int k)
C51 COMPILER V7.06 WENDUCELIANG10 05/06/2009 22:24:40 PAGE 2
56 {
57 1 P2=0xfe;
58 1 P0=tab[k/1000];
59 1 delay1();
60 1 P2=0xfd;
61 1 P0=tab[k%1000/100];
62 1 delay1();
63 1 P2=0xfb;
64 1 P0=tabdp[k%100/10];
65 1 delay1();
66 1 P2=0xf7;
67 1 P0=tab[k%10];
68 1 delay1();
69 1 P2=0xff;
70 1 }
71
72 /****************************************************************************
73 函数功能:DS18B20初始化子程序
74 入口参数:
75 出口参数:
76 ****************************************************************************/
77 Init_DS18B20(void)
78 {
79 1 unsigned char x=0;
80 1 DQ=1; //DQ先置高
81 1 delay(8); //延时
82 1 DQ=0; //发送复位脉冲
83 1 delay(85); //延时(>480ms)
84 1 DQ=1; //拉高数据线
85 1 delay(14); //等待(15~60ms)
86 1 }
87
88 /****************************************************************************
89 函数功能:向DS18B20读一字节数据
90 入口参数:
91 出口参数:dat
92 ****************************************************************************/
93 ReadOneChar(void)
94 {
95 1 unsigned char i=0;
96 1 unsigned char dat=0;
97 1 for (i=8;i>0;i--)
98 1 {
99 2 DQ=1;
100 2 delay(1);
101 2 DQ=0;
102 2 dat>>=1;
103 2 DQ=1;
104 2 if(DQ)
105 2 dat|=0x80;
106 2 delay(4);
107 2 }
108 1 return(dat);
109 1 }
110
111 /****************************************************************************
112 函数功能:向DS18B20写一字节数据
113 入口参数:dat
114 出口参数:
115 ****************************************************************************/
116 WriteOneChar(unsigned char dat)
117 {
C51 COMPILER V7.06 WENDUCELIANG10 05/06/2009 22:24:40 PAGE 3
118 1 unsigned char i=0;
119 1 for(i=8;i>0;i--)
120 1 {
121 2 DQ=0;
122 2 DQ=dat&0x01;
123 2 delay(5);
124 2 DQ=1;
125 2 dat>>=1;
126 2 }
127 1 delay(4);
128 1 }
129
130 /****************************************************************************
131 函数功能:向DS18B20读温度值
132 入口参数:
133 出口参数:temperature
134 ****************************************************************************/
135 ReadTemperature(void)
136 {
137 1 Init_DS18B20(); //初始化
138 1 WriteOneChar(0xcc); //跳过读序列号的操作
139 1 WriteOneChar(0x44); //启动温度转换
140 1 delay(125); //转换需要一点时间,延时
141 1 Init_DS18B20(); //初始化
142 1 WriteOneChar(0xcc); //跳过读序列号的操作
143 1 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
144 1 tempL=ReadOneChar(); //读出温度的低位LSB
145 1 tempH=ReadOneChar(); //读出温度的高位MSB
146 1 //温度转换,把高低位做相应的运算转化为实际温度
147 1 temperature=((tempH*256)+tempL)*0.0625*10;
148 1
149 1 delay(200);
150 1 return(temperature);
151 1 }
152
153 /****************************************************************************
154 函数功能:主程序
155 入口参数:
156 出口参数:
157 ****************************************************************************/
158 void main()
159 {
160 1 float i;
161 1 while(1)
162 1 {
163 2 i=ReadTemperature();
164 2 if(i>1500)
165 2 {
166 3 P2=0xfd;
167 3 P0=tab[0];
168 3 P2=0xfb;
169 3 P0=tab[10];
170 3 P2=0xf7;
171 3 P0=tab[10];
172 3 }
173 2 if(i>400)
174 2 {
175 3 BUZZER = 0;
176 3 P0=0x00;
177 3 delay(2500);
178 3 }
179 2 else
C51 COMPILER V7.06 WENDUCELIANG10 05/06/2009 22:24:40 PAGE 4
180 2 {
181 3 BUZZER=1;
182 3 }
183 2 display(i);
184 2 }
185 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 476 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 5
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 + -