📄 ds1820.lst
字号:
C51 COMPILER V8.08 DS1820 01/12/2009 19:00:36 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DS1820
OBJECT MODULE PLACED IN DS1820.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1820.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------------------------------------------
2
3 ************************************ 程序功能说明 **********************************************
4 单片机通过温度传感器读取当前温度显示在lcd1602上,lcd1602两位显示整数,两位显示小数;
5 当前温度发生改变,lcd1602显示数值亦随之改变。
6 ********************************************************************************************/
7
8 #include "DS1820.h"
9 /*****************************延时函数**************************/
10
11 void delay_us (unsigned int us)
12 {
13 1 while(us--);
14 1 }
15
16 void DS18b20_init(void) //初始化
17 {
18 1 uchar flag=0;
19 1 DQ = 1;
20 1 delay_us(8); //稍做延时
21 1 DQ = 0;
22 1 delay_us(80); //精确延时 大于 480us
23 1 DQ = 1; //拉高总线
24 1 delay_us(14);
25 1 flag=DQ;
26 1 delay_us(20);
27 1 }
28 /**********************从DS18B20读一字节***************/
29 uchar readbyte(void) //读1字节
30 {
31 1 uchar i=0;
32 1 uchar dat=0;
33 1 for (i=8;i>0;i--)
34 1 {
35 2 DQ = 0;
36 2 dat>>=1;
37 2 DQ = 1;
38 2 if(DQ)
39 2 dat|=0x80;
40 2 delay_us(4);
41 2 }
42 1 return(dat);
43 1 }
44 /***********************向DS18B20写一字节***********************/
45 void writebyte(unsigned char dat) //写1字节
46 {
47 1 uchar i=0;
48 1 for (i=8; i>0; i--)
49 1 {
50 2 DQ = 0;
51 2 DQ = dat&0x01;
52 2 delay_us(5);
53 2 DQ = 1;
54 2 dat>>=1;
55 2 }
C51 COMPILER V8.08 DS1820 01/12/2009 19:00:36 PAGE 2
56 1 delay_us(4);
57 1 }
58 /***********************CPU读取温度值***************************/
59 void readtemp(void) //读取温度
60 {
61 1 uchar a=0,b=0;
62 1 DS18b20_init(); //初始化
63 1 writebyte(0xCC); // 跳过序列号
64 1 writebyte(0x44); // 启动温度转换
65 1 DS18b20_init(); //要重新初始化才可以读寄存器
66 1 writebyte(0xCC);
67 1 writebyte(0xBE); //读取温度寄存器等(共可读9个寄存器)
68 1 //前两个就是温度,且第一个寄存器的低4位是小数点部分,
69 1 //高四位和另外一个寄存器的低三位是整数部分,另外那个寄存器剩下的5位是符号位
70 1 a=readbyte(); //低位
71 1 b=readbyte(); //高位
72 1 temper[0]=a&0x0f;
73 1 a=a>>4; //低位右移4位,舍弃小数部分
74 1 temper[1]=b<<4; //高位左移4位,舍弃符号位
75 1 temper[1]=temper[1]|a;
76 1 }
77
78
79
80 /********************************结束************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -