📄 18b20.lst
字号:
C51 COMPILER V7.02b 18B20 03/22/2009 16:16:18 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: D:\Keil uVision 2\C51\BIN\C51.EXE 18B20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define uint unsigned int
3 #define uchar unsigned char
4
5 sbit LCD_EN=P3^4;
6 sbit LCD_RS=P3^5;
7 bit flag;
8 sbit DQ=P2^2;
9 uchar tab[]={" wendu "};
10
11 void delayms(uint z)
12 {
13 1 uint x,y;
14 1 for(x=0;x<=110;x++)
15 1 for(y=0;y<=z;y++);
16 1 }
17 delayus(uint z)
18 {while(z--){}}
19 /***************温度18B20***********************************/
20 //功能:读18B20读一个字节
21 uchar b20_read_byte(void)
22 {
23 1 uchar i=0;
24 1 uchar dat = 0;
25 1 for(i=8;i>0;i--)
26 1 { DQ = 0; // 给脉冲信号
27 2 dat>>=1;
28 2 DQ = 1; // 给脉冲信号
29 2 if(DQ)
30 2 dat|=0x80;
31 2 delayus(4);
32 2 }
33 1 return(dat);
34 1 }
35
36 //功能:写18B20一个字节
37 void b20_write_byte(uchar dat)
38 { uchar i=0;
39 1 for(i=8; i>0; i--)
40 1 { DQ = 0;
41 2 DQ = dat&0x01;
42 2 delayus(4);
43 2 DQ = 1;
44 2 dat>>=1;
45 2 }
46 1 }
47
48 //功能:初始化18B20
49 void b20_init(void)
50 { uchar x=0;
51 1 DQ = 1; //DQ复位
52 1 delayus(8); //稍做延时
53 1 DQ = 0; //单片机将DQ拉低
54 1 delayus(80); //精确延时 大于 480us
55 1 DQ = 1; //拉高总线
C51 COMPILER V7.02b 18B20 03/22/2009 16:16:18 PAGE 2
56 1 delayus(14);
57 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
58 1 delayus(20);
59 1 }
60 //功能:读取18B20的温度值
61 uint b20_read(void)
62 {
63 1 uchar a=0;
64 1 uchar b=0;
65 1 uint t=0;
66 1 uint t1=0;
67 1 float tt=0;
68 1 b20_init();
69 1 b20_write_byte(0xcc); // 跳过读序号列号的操作
70 1 b20_write_byte(0x44); // 启动温度转换
71 1 b20_init();
72 1 b20_write_byte(0xcc); //跳过读序号列号的操作
73 1 b20_write_byte(0xbe); //读取温度寄存器
74 1 a=b20_read_byte(); //读低8位
75 1 b=b20_read_byte(); //读高8位
76 1 t=b;
77 1 if((t&0xf8)==0xf8)
78 1 {
79 2 flag=1;
80 2 b=~b;
81 2 a=~a+1;
82 2 }
83 1 else
84 1 flag=0;
85 1 b=(b&0x07)<<4;
86 1 a=(a&0xf0)>>4;
87 1 b=b|a;
88 1 return(b);
89 1 }
90
91 /***************液晶1062**************************************/
92 void LCD_write_com(uchar com)
93 {
94 1 P0=com; //写入命令
95 1 LCD_RS=0;
96 1 delayms(5);
97 1 LCD_EN=1;
98 1 delayms(5);
99 1 LCD_EN=0;
100 1 }
101 void LCD_write_data(uchar date)
102 {
103 1 P0=date; //写入数据
104 1 LCD_RS=1;
105 1 delayms(5);
106 1 LCD_EN=1;
107 1 delayms(5);
108 1 LCD_EN=0;
109 1 }
110 void LCD_init()
111 {
112 1 uchar i;
113 1 LCD_write_com(0x38);//显示16*2接口
114 1 LCD_write_com(0x01);//清屏
115 1 LCD_write_com(0x0c);//00001DCB,D开显示C显示光标B光标闪烁
116 1 LCD_write_com(0x06);//000001NS,N1指针、光标加一,N0指针、光标减一。S1整屏左移N1/右移N0,S0整屏不移动
117 1 LCD_write_com(0x80);
C51 COMPILER V7.02b 18B20 03/22/2009 16:16:18 PAGE 3
118 1 for(i=0;i<16;i++)
119 1 {
120 2 LCD_write_data(tab[i]);
121 2 delayms(5);
122 2 }
123 1 }
124 void LCD_sfm(uchar date)
125 {
126 1 uchar shi,ge,i=4;
127 1 shi=date/10;
128 1 ge=date%10;
129 1 LCD_write_com(0x80+12);
130 1 if(flag==1)
131 1 LCD_write_data(0x20+13);
132 1 else
133 1 LCD_write_data(0x20+11);
134 1
135 1 LCD_write_data(0x30+shi);
136 1 LCD_write_data(0x30+ge);
137 1
138 1 }
139
140 /********************主函数********************************************************/
141 main()
142 {
143 1 uint a;
144 1 b20_init();
145 1 LCD_init();
146 1 while(1)
147 1 {
148 2 a=b20_read();
149 2 LCD_sfm(a);
150 2 }
151 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 368 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 8
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 + -