m_18b20.lst
来自「郑州远博公司生产的单片机B型实验板电路原理图及配套源程序代码」· LST 代码 · 共 231 行
LST
231 行
C51 COMPILER V7.20 M_18B20 04/01/2005 20:23:54 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE M_18B20
OBJECT MODULE PLACED IN m_18b20.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE m_18b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************************************************************************
2 YB-51-B DS18B20数字温度模块演示程序
3 来源: 郑州远博科技 王兴民
4 0371-66949037 0371-67256036 13949105551
5 ***************************************************************************/
6
7 #include <config.h>
8 #define BUZZ P3_6
9 #define JDQ P3_7
10 #define LEDPOWER P2_7
11 void d_convert(Uchar dd);
12 void rw24c02(void);
13 void testfmq(void);
14 void testjdq(void);
15 void testsmg(void);
16 void testled(void);
17 void enint0(void);
18
19 code char examp1[]="K1 be pressed!";
20 code char examp2[]="K2 be pressed!";
21 code char examp3[]="K3 be pressed!";
22 code char examp4[]="K4 be pressed!";
23 code char examp5[]=" INT0 TEST";
24
25 data Uchar yjdispbuff[32]; //液晶屏显示缓冲区
26 data Uchar displaybuff[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; //数码管显示缓冲区,初始化全灭
27
28 data Uchar clockdata2[7]; //时钟数据缓冲区 for ds1302
29 data Uchar *clockdatain;
30 data Uchar *clockdataout;
31 data Uchar cmddata;
32 data Uchar indata,outdata;
33 data Uchar houtdatal,houtdatah,moutdatal,moutdatah,soutdatal,soutdatah; //时、分、秒
34 data Uchar noutdatal,noutdatah,youtdatal,youtdatah,routdatal,routdatah; //年、月、日
35 data Uchar woutdatal, woutdatah;
36
37 data Uchar hdata=0xfe; //for 18b20
38 data Uchar ldata=0x05;
39 data Uchar databuff[9];
40
41 data Uchar keyvalue;
42
43
44 data Uchar CH0=0X02; //ADC0832通道0被选中
45
46 void main(void) {
47 1 Uchar j,temp;
48 1 Delayms(500);
49 1 Lcdreset();
50 1 testfmq();
51 1 testjdq();
52 1 testled();
53 1 testsmg();
54 1 rw24c02();
55 1 enint0(); //允许中断
C51 COMPILER V7.20 M_18B20 04/01/2005 20:23:54 PAGE 2
56 1
57 1
58 1 for(j=0;j<32;j++) { //液晶屏显示缓冲区全部填充为空格
59 2 yjdispbuff[j]=32;
60 2 }
61 1 for(j=0;j<6;j++) { //数码管显示缓冲区全部填充为不显示
62 2 displaybuff[j]=0x0a;
63 2 }
64 1 cmddata=0x8e;
65 1 indata=0x00;
66 1 v_W1302(cmddata, indata); //init
67 1 cmddata=0x80;
68 1 indata=0x00;
69 1 v_W1302(cmddata, indata);//秒
70 1 cmddata=0x82;
71 1 indata=0x00;
72 1 v_W1302(cmddata, indata);//分
73 1 cmddata=0x84;
74 1 indata=0x00;
75 1 v_W1302(cmddata, indata);//小时
76 1 cmddata=0x86;
77 1 indata=0x31;
78 1 v_W1302(cmddata, indata);//日
79 1 cmddata=0x88;
80 1 indata=0x03;
81 1 v_W1302(cmddata, indata);//月
82 1 cmddata=0x8A;
83 1 indata=0x03;
84 1 v_W1302(cmddata, indata);//星期
85 1 cmddata=0x8C;
86 1 indata=0x05;
87 1 v_W1302(cmddata, indata);//年
88 1 Init_18b20();
89 1 Skip();
90 1 Write_18b20(0x4e); //写缓存命令
91 1 Write_18b20(hdata); //写地址2 (TH温度触发器)
92 1 Write_18b20(ldata); //写地址3 (TL温度触发器)
93 1 Write_18b20(0x7f); //12位分辨率
94 1 Init_18b20();
95 1 Skip();
96 1 Write_18b20(0x48); //复制暂存存储器
97 1 Init_18b20();
98 1 Skip();
99 1
100 1
101 1 while(1) {
102 2 temp=Adconvert(CH0); //18B20转换数据
103 2 Display(displaybuff);
104 2 displaybuff[2]=temp/100;
105 2 displaybuff[1]=(temp-displaybuff[2]*100)/10;
106 2 displaybuff[0]=temp-(displaybuff[2]*100+displaybuff[1]*10);
107 2 Display(displaybuff); //在数码管上显示转换的数据
108 2 Init_18b20();
109 2 Skip();
110 2 Convert(); //温度转换
111 2 Display(displaybuff);
112 2 Display(displaybuff);
113 2 Display(displaybuff);
114 2 Display(displaybuff);
115 2 //Display(displaybuff);
116 2 keyvalue=Key_s(); //读取键值
117 2 if(keyvalue==0x7f)
C51 COMPILER V7.20 M_18B20 04/01/2005 20:23:54 PAGE 3
118 2 {while(Key_s()==0x7f)
119 3 {Lcdreset();Eputstr(0,2,examp1); P3_6=0;} //P3_6是蜂鸣器的接口
120 3 }
121 2 if(keyvalue==0xbf)
122 2 {while(Key_s()==0xbf)
123 3 {Lcdreset();Eputstr(0,2,examp2); P3_6=0;} //P3_6是蜂鸣器的接口
124 3 }
125 2 if(keyvalue==0xdf)
126 2 {while(Key_s()==0xdf)
127 3 {Lcdreset();Eputstr(0,2,examp3); P3_6=0;} //P3_6是蜂鸣器的接口
128 3 }
129 2
130 2 if(keyvalue==0xef)
131 2 {while(Key_s()==0xef)
132 3 {Lcdreset();Eputstr(0,2,examp4); P3_6=0;} //P3_6是蜂鸣器的接口
133 3 }
134 2 if(keyvalue==0xff) { P3_6=1;}
135 2 Init_18b20();
136 2 Skip();
137 2 Read_scrat(); //读18b20 scratchpad 存储器
138 2 for(j=0;j<9;j++)
139 2 {
140 3 databuff[j]=Read_18b20();
141 3 Display(displaybuff);
142 3
143 3 }
144 2 databuff[0]=databuff[0]>>4;
145 2 databuff[1]=databuff[1]<<4;
146 2 databuff[0]=(databuff[0]|databuff[1])&0x7f;
147 2 d_convert(databuff[0]);
148 2 clockdataout=&clockdata2;
149 2 v_BurstR1302T(clockdataout);
150 2 soutdatal=clockdata2[0]&0x0f;
151 2 soutdatah=(clockdata2[0]>>4)&0x07;
152 2 moutdatal=clockdata2[1]&0x0f;
153 2 moutdatah=(clockdata2[1]>>4)&0x07;
154 2 houtdatal=clockdata2[2]&0x0f;
155 2 houtdatah=(clockdata2[2]>>4)&0x07;
156 2 routdatal=clockdata2[3]&0x0f;
157 2 routdatah=(clockdata2[3]>>4)&0x07;
158 2 youtdatal=clockdata2[4]&0x0f;
159 2 youtdatah=(clockdata2[4]>>4)&0x07;
160 2 woutdatal=clockdata2[5]&0x0f;
161 2 woutdatah=(clockdata2[5]>>4)&0x07;
162 2 noutdatal=clockdata2[6]&0x0f;
163 2 noutdatah=(clockdata2[6]>>4)&0x07;
164 2 yjdispbuff[0]=50; //50代表数字‘2’的ASC码,液晶屏是按照ASC码来显示字符的
165 2 yjdispbuff[1]=48; //48代表数字‘0’的ASC码
166 2 yjdispbuff[2]=noutdatah+48; //48表示对应数字的实际值和相对应的ASC码的偏移量
167 2 yjdispbuff[3]=noutdatal+48;
168 2 yjdispbuff[5]=youtdatah+48;
169 2 yjdispbuff[6]=youtdatal+48;
170 2 yjdispbuff[8]=routdatah+48;
171 2 yjdispbuff[9]=routdatal+48;
172 2 yjdispbuff[13]=woutdatal+48;
173 2 yjdispbuff[17]=houtdatah+48;
174 2 yjdispbuff[18]=houtdatal+48;
175 2 yjdispbuff[20]=moutdatah+48;
176 2 yjdispbuff[21]=moutdatal+48;
177 2 yjdispbuff[23]=soutdatah+48;
178 2 yjdispbuff[24]=soutdatal+48;
179 2 yjdispbuff[4]=45; //‘-’的ASC码
C51 COMPILER V7.20 M_18B20 04/01/2005 20:23:54 PAGE 4
180 2 yjdispbuff[7]=45;
181 2 yjdispbuff[10]=32; //空格的ASC码
182 2 yjdispbuff[11]=32;
183 2 yjdispbuff[12]=32;
184 2 yjdispbuff[14]=32;
185 2 yjdispbuff[15]=32;
186 2 yjdispbuff[16]=32;
187 2 yjdispbuff[19]=45;
188 2 yjdispbuff[22]=45;
189 2
190 2 yjdispbuff[30]=96;
191 2 yjdispbuff[31]=67;
192 2
193 2 for(j=0;j<32;j++)
194 2 {
195 3 Disponechar(0,j,yjdispbuff[j]);
196 3
197 3 }
198 2 }
199 1 }
200
201
202
203 void d_convert(Uchar dd) { //16进制数据转换为10进制
204 1 Uchar bw,sw,gw;
205 1 bw=dd/100;
206 1 sw=(dd%100)/10;
207 1 gw=dd%10;
208 1 yjdispbuff[28]=sw+48;
209 1 yjdispbuff[29]=gw+48; }
210
211
212
213 void rw24c02(void) {
214 1 Uchar data1[6]={0x04,0x02,0x02,0x00,0x04,0x02};
215 1 Uchar j;
216 1 Uchar *Pdata1=data1,Romadd=0x00,counter=6,*Pdata2=data1; //延时足够时间
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?