?? tempture.lst
字號:
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEMPTURE
OBJECT MODULE PLACED IN tempture.OBJ
COMPILER INVOKED BY: D:\安裝程序\UV3\C51\BIN\C51.EXE tempture.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************************************
2 程序名稱:1602液晶溫度顯示
3 實現功能:1602液晶溫度顯示
4 作者:李燦松
5 最后修改時間:2008.7.18
6 =========================================
7 數據說明: *
8 P0_0=D0 P0_1=D1 P0_2=D2 P0_3=D3 *
9 P0_4=D4 P0_5=D5 P0_6=D6 P0_7=D7 *
10 P2_0=RS P2_1=RW P2_2=E *
11 *
12 P3_3為DS18B20的數據輸入口 *
13 =========================================
14 *******************************************************************************************************/
15 #include<reg52.h>
16 #include<intrins.h>
17 #define T_cont 0.0625 //溫度轉換常數
18 #define uchar unsigned char
19 #define uint unsigned int
20 #define L1602_DB0_DB7 P0 //定義1602的數據總線
21 bit T_sign=0; //溫度正負符號
22 float temp1=0;
23 sbit DQ=P3^3; //單口線說明
24 sbit L1602_RS=P2^0; //定義1602得RS控制線
25 sbit L1602_RW=P2^1; //定義1602得RW控制線
26 sbit L1602_E=P2^2; //定義1602的E控制線
27 sbit L1602_Busy=P0^7; //定義1602的測忙線
28 uchar code Welcome[]={"wlecome"};
29 uchar code Welcome1[]={"tempture"};
30 uchar code Welcome2[]={"cansong:"};
31 uchar code Temp[]={"temp"};
32 unsigned char sdata,t_bai,t_shi,t_ge,t_feng,t_miao;
33 typedef bit BOOL ;
34
35 /**********************************************************************************************
36 函數名稱:主函數
37 函數功能:
38 說明:
39 **********************************************************************************************/
40 void main(void)
41 {
42 1 void print(uchar a,uchar *str);
43 1 void print1(uchar a,uchar t);
44 1 void LCM1602_Init();
45 1 void LCM1602_Delay(uchar count);
46 1 void ReadTemperature();
47 1 void DS18B20_init();
48 1
49 1 DS18B20_init();
50 1 LCM1602_Init();
51 1 print(0x80,Welcome);
52 1 print(0xc0,Welcome1);
53 1 LCM1602_Delay(5000);
54 1 while(1)
55 1 {
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 2
56 2 ReadTemperature();
57 2 print(0x80, Welcome2);
58 2 if(T_sign==1)
59 2 print1(0xc0,0x2d);
60 2 else
61 2 print1(0xc0,0x2b);
62 2 //if(t_bai!=0)
63 2 print1(0xc1,t_bai+0x30);
64 2 // else
65 2 // print1(0xc1,t_shi+0x30); //消隱,不顯示
66 2 // t_shi=3;
67 2 print1(0xc2,t_shi+0x30);
68 2 print1(0xc3,t_ge+0x30);
69 2 print1(0xc4,0x2e); //顯示點
70 2 print1(0xc5,t_feng+0x30);
71 2 print1(0xc6,t_miao+0x30);
72 2 print1(0xc7,0x43); //顯示'C
73 2 }
74 1 }
75
76
77 /**********************************************************************************************
78 函數名稱:讀取溫度函數
79 函數功能:讀取DS18B20的轉換溫度值
80 說明:
81 **********************************************************************************************/
82
83 void ReadTemperature() //獲取溫度源程序
84 {
85 1 void delay(unsigned int delay_time);
86 1 void DS18B20_init();
87 1 void DS18B20_send(unsigned char out_data);
88 1 uchar DS18B20_read(void);
89 1 unsigned int y=0;
90 1 uchar a=0;
91 1 uchar b=0;
92 1 // unsigned char k;
93 1 DS18B20_init(); //初始化DS18B20
94 1 DS18B20_send (0xcc);
95 1 DS18B20_send (0x44); //啟動溫度轉換
96 1 delay(125);
97 1 DS18B20_init();
98 1 DS18B20_send (0xcc);
99 1 DS18B20_send (0xbe); //讀取溫度寄存器
100 1 a=DS18B20_read(); //讀取低位
101 1 b=DS18B20_read(); //讀取高位
102 1 //k=b&0X08;
103 1 //if(k==0x08) T_sign=1; //溫度是負數
104 1 //else T_sign=0;
105 1
106 1 if(b>0x7f)
107 1 {
108 2 a=~a;b=~b+1; //補碼轉換,取反加一
109 2 T_sign=1; //溫度為負時flag=0
110 2
111 2 }
112 1 sdata=a/16+b*16;
113 1 t_bai=sdata/100;
114 1 t_shi=sdata/10;
115 1 t_ge=sdata%10;
116 1 t_feng=(a&0x0f)*10/16;
117 1 t_miao=(a&0x0f)*100/16%10;
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 3
118 1
119 1 }
120
121
122 /**********************************************************************************************
123 函數名稱:延時函數
124 函數功能:轉換延時和顯示延時
125 說明:LCM1602_Delay()是液晶顯示延時,delay()是溫度轉換延時
126 **********************************************************************************************/
127 void delay(unsigned int delay_time) // 延時程序
128 {
129 1 while(delay_time--);
130 1 }
131
132 void LCM1602_Delay(uchar count)
133 {
134 1 uchar i;
135 1 while(--count!=0)
136 1 {for(i=0;i<250;i++);}
137 1 }
138
139 /**********************************************************************************************
140 函數名稱:初始化函數
141 函數功能:對DS18B20進行初始化
142 說明:
143 **********************************************************************************************/
144 void DS18B20_init() //初始化DS18B20
145 {
146 1 unsigned char i=0;
147 1 DQ=1;
148 1 delay(8);
149 1 DQ=0;
150 1 delay(85); //精確延時484 us
151 1 DQ=1;
152 1 delay(14); //精確延時34us
153 1 i=DQ;
154 1 delay(20);
155 1
156 1 }
157
158 /**********************************************************************************************
159 函數名稱:寫函數
160 函數功能:向DS18B20寫命令
161 說明:
162 **********************************************************************************************/
163 void DS18B20_send(unsigned char out_data) //主機發送一字節到DS18B20
164 {
165 1 unsigned char i=0;
166 1
167 1 for(i=8;i>0;i--)
168 1 {
169 2 DQ=0;
170 2 DQ=out_data&0x01; //數據從低位送出
171 2 delay(5); //精確延時61us
172 2 DQ=1;
173 2 out_data>>=1;
174 2 }
175 1 delay(4);
176 1 }
177
178 /**********************************************************************************************
179 函數名稱:讀函數
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 4
180 函數功能:從DS18B20讀取數據
181 說明:
182 **********************************************************************************************/
183 uchar DS18B20_read(void)//主機從DS18B20中讀取一字節
184 {
185 1 unsigned char i,in_data;
186 1 in_data=0;
187 1 for(i=8;i>0;i--)
188 1 {
189 2 DQ=1;
190 2 delay(1);
191 2 DQ=0; //給脈沖信號
192 2 in_data>>=1;
193 2 DQ=1; //給脈沖信號
194 2 if(DQ)
195 2 in_data|=0x80;
196 2 delay(4);
197 2 }
198 1 return(in_data);
199 1 }
200
201
202 /**********************************************************************************************
203 函數名稱:初始化函數
204 函數功能:液晶1602初始化
205 說明:
206 **********************************************************************************************/
207 void LCM1602_Init(void)
208 {
209 1 void LCM1602_WriteData(uchar LCM1602_data);
210 1 void LCM1602_WriteCMD(uchar LCM1602_command);
211 1 LCM1602_WriteCMD(0x38); //顯示兩行,每個字符為5*7個像素
212 1 delay(1);
213 1 LCM1602_WriteCMD(0x06); //光標移動設置,光標右移
214 1 delay(1);
215 1 LCM1602_WriteCMD(0x0c); //現設開,光標開,閃爍開
216 1 delay(1);
217 1 LCM1602_WriteCMD(0x01); //清屏
218 1 delay(1);
219 1 }
220 void print(uchar a,uchar *str)
221 {
222 1 void LCM1602_WriteData(uchar LCM1602_data);
223 1 void LCM1602_WriteCMD(uchar LCM1602_command);
224 1 LCM1602_WriteCMD(a);
225 1 while(*str!='\0')
226 1 {
227 2 LCM1602_WriteData(*str++);
228 2 }
229 1 *str=0;
230 1 }
231 void print1(uchar a,uchar t)
232 {
233 1 LCM1602_WriteCMD(a);
234 1 LCM1602_WriteData(t);
235 1 }
236
237
238
239 /**********************************************************************************************
240 函數名稱:寫命令和寫數據函數
241 函數功能:向LCD寫命令和數據
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 5
242 說明:LCM1602_WriteCMD是寫命令函數,void LCM1602_WriteData是寫數據函數
243 **********************************************************************************************/
244 void LCM1602_WriteCMD(uchar LCM1602_command)
245 {
246 1 BOOL lcd_bz();
247 1 while(lcd_bz()); //測忙
248 1 L1602_RS=0;
249 1 L1602_RW=0;
250 1 L1602_E=0;
251 1 _nop_();
252 1 _nop_();
253 1 L1602_DB0_DB7=LCM1602_command;
254 1 _nop_();
255 1 _nop_();_nop_();
256 1 L1602_E=1; //命令總送出
257 1 _nop_();_nop_();_nop_();
258 1 L1602_E=0;
259 1 }
260
261 void LCM1602_WriteData(uchar LCM1602_data)
262 {
263 1 BOOL lcd_bz();
264 1 while(lcd_bz()); //測忙
265 1 L1602_RS=1;
266 1 L1602_RW=0;
267 1 L1602_E=0;
268 1 L1602_DB0_DB7=LCM1602_data;
269 1 _nop_();
270 1 _nop_();
271 1 _nop_();
272 1 _nop_();
273 1 L1602_E=1; //數據送出
274 1 _nop_();
275 1 _nop_();
276 1 _nop_();
277 1 L1602_E=0;
278 1 }
279
280
281 /**********************************************************************************************
282 函數名稱:LCD檢測忙函數
283 函數功能:檢測LCD是否處于忙狀態
284 說明:
285 **********************************************************************************************/
286 BOOL lcd_bz()
287 { // 測試LCD忙碌狀態
288 1 BOOL result;
289 1 L1602_RS=0;
290 1 L1602_RW=1;
291 1 L1602_E=1;
292 1 _nop_();
293 1 _nop_();
294 1 _nop_();
295 1 _nop_();
296 1 result = (BOOL)(P0 & 0x80);
297 1 L1602_E = 0;
298 1 return result;
299 1 }
300 /**********************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 6
CODE SIZE = 560 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 9
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -