?? gdlcd.lst
字號:
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE GDLCD
OBJECT MODULE PLACED IN gdLCD.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE gdLCD.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************
2 * 描述: LCD1602 滾動顯示 *
3 * 顯示方式: *
4 * 1、從左到右逐字顯示,閃動二次,清屏。 *
5 * 2、再從右到左逐字顯示,閃動二次,清屏。 *
6 * 3、周期性地重復上述顯示方式。 *
-
7 ********************************************************************************/
8
9 #include <reg51.h>
10 #include <intrins.h>
11 #define uint unsigned int
12 //#define uchar unsigned char
13 typedef unsigned char BYTE;
14 typedef bit BOOL;
15 sbit key1=P3^2;
16 sbit key2=P3^3;
17 sbit key3=P3^4;
18 sbit key4=P3^5;
19 sbit key5=P3^6;
20 sbit motor=P1^0;
21 sbit fanmotor=P1^7;
22 sbit win11=P1^1;
23 sbit win12=P1^2;
24 sbit win21=P1^3;
25 sbit win22=P1^4;
26 sbit LCD_RS = P2^6;
27 sbit LCD_RW = P2^5;
28 sbit LCD_EP = P2^7;
29 sbit DQ = P3^7;
30 uint temp,temp1=10,temperature=0,X,Y,Z,H,I,J,W_flag=0;
31 BYTE code dis1[] = {" WELCOME TO "};
32 BYTE code dis2[] = {"TONGFENG C0NTR0L SYSTEM"};
33 BYTE code dis3[] = {" ST: RT: "};
34 BYTE code dis4[] = {" W_STATUS: CLOSE "};
35 BYTE code dis5[] = {" W_STATUS: OPEN "};
36 delay(int ms) // 延時子程序
37 { int i;
38 1 while(ms--)
39 1 {
40 2 for(i = 0; i< 250; i++)
41 2 {
42 3 _nop_();
43 3 _nop_();
44 3 _nop_();
45 3 _nop_();
46 3 }
47 2 }
48 1 }
49 void delay1(int s)
50 {
51 1 while(--s) ;
52 1
53 1 }
54 void init_18b20()
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 2
55 { DQ=1;
56 1 delay1(8);
57 1 DQ=0;
58 1 delay1(90);
59 1 DQ=1;
60 1 _nop_();
61 1 _nop_();
62 1 delay1(100);
63 1 DQ=1;
64 1 }
65 void write_18b20(uint h)
66 { BYTE i;
67 1 for(i=0;i<8;i++)
68 1 { DQ=0;
69 2 DQ=h&0x01;
70 2 delay1(5);
71 2 DQ=1;
72 2 h>>=1;
73 2 }
74 1 }
75
76 BYTE read_18b20()
77 { BYTE i,dat=0;
78 1 DQ=1;
79 1 _nop_();
80 1 for(i=0;i<8;i++)
81 1 { DQ=0;
82 2 _nop_();
83 2 _nop_();
84 2 dat>>=1;
85 2 DQ=1;
86 2 _nop_();
87 2 _nop_();
88 2 if(DQ)
89 2 dat|=0x80;
90 2 delay1(30);
91 2 DQ=1;
92 2 }
93 1
94 1 return dat;
95 1
96 1 }
97
98 BYTE read()
99 { BYTE a,b;
100 1 init_18b20();
101 1 write_18b20(0xcc) ;
102 1 write_18b20(0x44) ;
103 1 init_18b20();
104 1 write_18b20(0xcc) ;
105 1 write_18b20(0xbe) ;
106 1 a=read_18b20();
107 1 b=read_18b20();
108 1 b<<=4 ;
109 1 b+=(a&0xf0)>>4;
110 1
111 1 return b;
112 1
113 1 }
114 BOOL lcd_bz()
115 { // 測試LCD忙碌狀態
116 1 BOOL result;
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 3
117 1 LCD_RS = 0;
118 1 LCD_RW = 1;
119 1 LCD_EP = 1;
120 1 _nop_();
121 1 _nop_();
122 1 _nop_();
123 1 _nop_();
124 1 result = (BOOL)(P0 & 0x80);
125 1 LCD_EP = 0;
126 1 return result;
127 1 }
128
129 lcd_wcmd(BYTE cmd)
130 { // 寫入指令數據到LCD
131 1 while(lcd_bz());
132 1 LCD_RS = 0;
133 1 LCD_RW = 0;
134 1 LCD_EP = 0;
135 1 _nop_();
136 1 _nop_();
137 1 P0 = cmd;
138 1 _nop_();
139 1 _nop_();
140 1 _nop_();
141 1 _nop_();
142 1 LCD_EP = 1;
143 1 _nop_();
144 1 _nop_();
145 1 _nop_();
146 1 _nop_();
147 1 LCD_EP = 0;
148 1 }
149
150 lcd_pos(BYTE pos)
151 { //設定顯示位置
152 1 lcd_wcmd(pos | 0x80);
153 1 }
154
155 lcd_wdat(BYTE dat)
156 { //寫入字符顯示數據到LCD
157 1 while(lcd_bz());
158 1 LCD_RS = 1;
159 1 LCD_RW = 0;
160 1 LCD_EP = 0;
161 1 P0 = dat;
162 1 _nop_();
163 1 _nop_();
164 1 _nop_();
165 1 _nop_();
166 1 LCD_EP = 1;
167 1 _nop_();
168 1 _nop_();
169 1 _nop_();
170 1 _nop_();
171 1 LCD_EP = 0;
172 1 }
173
174 lcd_init()
175 { //LCD初始化設定
176 1 lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據
177 1 delay(1);
178 1 lcd_wcmd(0x0c); //顯示開,關光標
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 4
179 1 delay(1);
180 1 lcd_wcmd(0x06); //移動光標
181 1 delay(1);
182 1 lcd_wcmd(0x01); //清除LCD的顯示內容
183 1 delay(1);
184 1 }
185 void keyscan()
186 {
187 1 //uint a;
188 1 if(key1==0)
189 1 { delay1(10);
190 2 if(key1==0)
191 2 {temp1++;
192 3 if(temp1==60)
193 3 temp1=0; }
194 2 }
195 1
196 1
197 1 if(key2==0)
198 1 { delay1(10);
199 2 if(key2==0)
200 2 {temp1--;
201 3 //delay(200);
202 3 if(temp1==-5)
203 3 temp1=0; }
204 2 }
205 1
206 1 if(key3==0)
207 1 { delay(10);
208 2 if(key3==0)
209 2 {temp=temp1;
210 3
211 3 while(!key3);
212 3 temperature=read();
213 3
214 3 }
215 2 }
216 1
217 1 }
218 main()
219 {
220 1 BYTE i;
221 1 lcd_init(); // 初始化LCD
222 1 delay(10);
223 1 lcd_wcmd(0x06); //向右移動光標
224 1 lcd_pos(0); //設置顯示位置為第一行的第1個字符
225 1 i = 0;
226 1 while(dis1[ i ] != '\0')
227 1 { //顯示字符"WLCOME TO"
228 2 lcd_wdat(dis1[ i ]);
229 2 i++;
230 2 delay(20); //控制兩字之間顯示速度
231 2 }
232 1 lcd_pos(0x40); //設置顯示位置為第二行第1個字符
233 1 i = 0;
234 1 while(dis2[ i ] != '\0')
235 1 {
236 2 lcd_wdat(dis2[ i ]); //顯示字符" WWW.PRECHIN.COM "
237 2 i++;
238 2 delay(20); //控制兩字之間顯示速度
239 2 }
240 1 delay(300); //控制停留時間
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 5
241 1
242 1 lcd_wcmd(0x01); //清除LCD的顯示內容
243 1
244 1 while(1)
245 1 { keyscan();
246 2 H=temp1/100+48;
247 2 I=(temp1%100)/10+48;
248 2 J=(temp1%100)%10+48;
249 2 lcd_wcmd(0x06); //向左移動光標
250 2 lcd_pos(0); //設置顯示位置為第一行的第16個字符
251 2 i = 0;
252 2 while(i<=5)
253 2 { //顯示字符"WLCOME TO"
254 3 lcd_wdat(dis3[ i ]);
255 3 i++;
256 3 delay(1); //控制兩字之間顯示速度
257 3 }
258 2 lcd_pos(4);
259 2 lcd_wdat(H);
260 2 delay1(3);
261 2 lcd_wdat(I);
262 2 delay1(3);
263 2 lcd_wdat(J);
264 2 delay1(3);
265 2 lcd_wdat('C');
266 2 temperature=read();
267 2 X=temperature/100+48;
268 2 Y=(temperature%100)/10+48;
269 2 Z=(temperature%100)%10+48;
270 2 lcd_wcmd(0x06); //向左移動光標
271 2 lcd_pos(9); //設置顯示位置為第一行的第16個字符
272 2 lcd_wdat('R');
273 2 delay1(3);
274 2 lcd_wdat('T');
275 2 delay1(3);
276 2 lcd_wdat(':');
277 2 delay1(3);
278 2 lcd_wdat(X);
279 2 delay1(3);
280 2 lcd_wdat(Y);
281 2 delay1(3);
282 2 lcd_wdat(Z);
283 2 delay1(3);
284 2 lcd_wdat('C');
285 2
286 2 // delay(10); //控制兩屏轉換時間
287 2 if(W_flag==0)
288 2 { lcd_pos(0x40); //設置顯示位置為第二行的第16個字符
289 3 i = 0;
290 3 while(dis4[ i ] != '\0')
291 3 {lcd_wdat(dis4[ i ]); //顯示字符" WWW.PRECHIN.COM "
292 4 i++;
293 4 delay(10); //控制兩字之間顯示速度
294 4 }
295 3 delay(10);
296 3 if( temperature>temp1)
297 3 {win11=0;
298 4 win12=1;
299 4 win21=0;
300 4 win22=1;
301 4 delay(30);
302 4 win11=1;
C51 COMPILER V7.10 GDLCD 05/12/2013 21:48:04 PAGE 6
303 4 win12=1;
304 4 win21=1;
305 4 win22=1;
306 4 W_flag=1;
307 4 fanmotor=0;
308 4 }
309 3 else
310 3 fanmotor=1;
311 3
312 3 }
313 2
314 2 else
315 2 { lcd_pos(0x40); //設置顯示位置為第二行的第16個字符
316 3 i = 0;
317 3 while(dis5[ i ] != '\0')
318 3 {
319 4 lcd_wdat(dis5[ i ]); //顯示字符" WWW.PRECHIN.COM "
320 4 i++;
321 4 delay(10); //控制兩字之間顯示速度
322 4 }
323 3 delay(10);
324 3 if( temperature>=temp1)
325 3 fanmotor=0;
326 3 else
327 3 {
328 4 win11=1;
329 4 win12=0;
330 4 win21=1;
331 4 win22=0;
332 4 delay(30);
333 4 win11=1;
334 4 win12=1;
335 4 win21=1;
336 4 win22=1;
337 4 W_flag=0;
338 4 fanmotor=1;
339 4 }
340 3
341 3 }
342 2 }
343 1 }
344
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 974 ----
CONSTANT SIZE = 103 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 1
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 + -