📄 18b20.lst
字号:
C51 COMPILER V8.12 18B20 07/31/2008 15:43:44 PAGE 1
C51 COMPILER V8.12, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<regx51.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit rs=P2^1 ;
6 sbit rw= P2^2 ;
7 sbit e=P2^3 ;
8 sbit DO=P1^0;
9
10 uchar temp_l = 0; //温度值存储低位字节
11 uchar temp_h = 0; //温度值存储高位字节
12
13 uchar tempsign = 0; //温度值符号位
14 uchar temp_integer[4]; //温度整数存储数组
15 uchar temp_dicimal[5]; //温度小数存储数组
16
17 void delay(uint ms)
18 {
19 1 uint i;
20 1 uchar j;
21 1 for(i=0;i<ms;i++)
22 1 for(j=0;j<250;j++)
23 1 {
24 2 _nop_();
25 2 _nop_();
26 2 _nop_();
27 2 _nop_();
28 2 }
29 1
30 1
31 1
32 1 }
33 void write_com(uchar com)
34 {
35 1 rs=0;
36 1 P3=com;
37 1 delay(1);
38 1 e=1;
39 1 delay(1);
40 1 e=0;
41 1
42 1 }
43
44 void write_data(uchar date)
45 {
46 1 rs=1;
47 1 P3=date;
48 1 delay(1);
49 1 e=1;
50 1 delay(1);
51 1 e=0;
52 1
53 1 }
54 void gotoxy(uchar x,uchar y) //光标指针移动到x行y列
55 {
C51 COMPILER V8.12 18B20 07/31/2008 15:43:44 PAGE 2
56 1 if(x==0)
57 1 {
58 2 write_com(0x80+y);
59 2 }
60 1 else
61 1 {
62 2 write_com(0x80+0x40+y);
63 2 }
64 1 }
65 /* ##########################################################################
66 初始化:设置显示模式 ---- 0x38 --设置16x2 显示,5x7点阵,8位数据接口
67 显示开/关及光标设置 -- 0x08 --关显示
68 -- 0x0b --开显示
69 0x0e --显示光标,不闪烁
70 0x0c --不显示光标,不闪烁
71 0x0d --光标闪烁,不显示
72 0x0f --光标显示+闪烁
73 ------ 0x06 --读或写一个字符后地址指针加一,且光标加一,整屏不移动
74 ------ 0x01 --显示清屏:数据指针清零,所有显示清零
75 0x02 --显示回车:数据指针清零
76 ######################################################################### */
77 void init()
78 {
79 1 rw=0; //开写状态
80 1 // write_com(0x01);
81 1 write_com(0x38);
82 1 write_com(0x0f);
83 1 write_com(0x06);
84 1 write_com(0x0c);
85 1 }
86 void print(uchar *p) //显示字符串 //void display_string(uchar *str,uchar len)
87 { // {
88 1 while(*p) // uchar i;
89 1 { // for(i=0;i<len;i++)
90 2 write_data(*p); // {
91 2 p++; // write_data(str【i】);
92 2 } // }
93 1 } //
94 void display_number(uchar number) // }
95 {
96 1 write_data(0x30+number); //转化为ASCII码
97 1 }
98
99 /*us级延时,延时时间约4+2*i*/
100 void Delayus(uchar i)
101 {
102 1 while(--i);
103 1 }
104
105 /*产生复位脉冲,等待应答信号*/
106 bit Resetpaulse()
107 {
108 1
109 1 DO = 0; //拉低约600us
110 1 Delayus(150);
111 1 Delayus(150);
112 1
113 1 DO = 1;//产生上升沿,延时约15~60us
114 1 Delayus(30);
115 1
116 1 return(~DO); //等待应答信号
117 1
C51 COMPILER V8.12 18B20 07/31/2008 15:43:44 PAGE 3
118 1 }
119
120 /*读取数据一位*/
121 bit Readbit()
122 {
123 1 uint i = 0;
124 1 bit b = 0;
125 1
126 1 DO = 0; //产生读时隙
127 1 i++; //维持低电平至少1us
128 1
129 1 DO = 1; //1us以上后拉高
130 1 Delayus(2); //延时8us,DO下降沿15内ds18b20输出的数据才有效
131 1
132 1
133 1 b = DO; //读取数据
134 1 Delayus(40); //每个读时隙至少持续60us
135 1
136 1 return(b);
137 1 }
138
139 /*读取一个字节*/
140 uchar Readbyte()
141 {
142 1 uchar byte_read = 0;
143 1 uchar i, j;
144 1
145 1 for(i=0; i<8; i++)
146 1 {
147 2 j = Readbit();
148 2 byte_read = (j<<i) | byte_read; //低位读起
149 2 }
150 1
151 1 return(byte_read);
152 1 }
153
154 /*写一个字节*/
155 void Writebyte(uchar byte_to_write)
156 {
157 1 uchar i = 0;
158 1 uchar j = 0;
159 1 bit write_bit = 0;
160 1
161 1 for(j=0; j<8; j++)
162 1 {
163 2 write_bit = (byte_to_write & 0x01);
164 2 if(write_bit == 1) //写1
165 2 {
166 3 DO = 0; //产生写时隙
167 3 Delayus(3); //延时15us
168 3
169 3 DO = 1; //写1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -