?? 8x8 lcd.lst
字號:
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 8X8_LCD
OBJECT MODULE PLACED IN 8x8 lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 8x8 lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //******** 小波電子工作室 All rights reserved******
2 //******** 個人主頁:http://hi.baidu.com/niejinbo **
3 //******** 文 件 名: lcd_key.1.c ************
4 //******** 功能概要: 4*4矩陣鍵盤掃描 ***********
5 //******** MCU: STC89C52 晶振:11.0592Mhz **********
6 //******** 設 計 者: 聶金波 ************
7 //******** 完成日期: 2008-07-14 ************
8 //******** 當前版本: 0714.1 ************
9 //******** 改進說明: 暫無 ************
10 //******** 補充說明: 從鍵盤輸入0-F,在LCD上顯示出來
11 //*********頭文件區*******************
12 #include<reg52.h>
13 #include<math.h>
14 #include<absacc.h>
15 #define uchar unsigned char
16 #define uint unsigned int
17 //*********定義變量區*******************
18 sbit e=P2^7; //LCD使能信號
19 sbit rs=P2^5; //LCD數據/命令選擇信號
20 sbit rw=P2^6;
21 uchar tab_key[50];
22 uchar code tab[]="0123456789abcdef";
23 uchar n=0,temp,key;
24 //*********函數聲明區********************
25 void lcd_disp(); //LCD顯示函數
26 void lcd_init(); //LCD初始化函數
27 void write_com(uchar); //寫命令函數
28 void write_data(uchar); //寫數據函數
29 void delay(uint); //延遲函數
30 void key_scan(); //鍵盤掃描函數
31 void key_manage1(); //鍵盤功能分配函數
32 void key_manage2();
33 void key_manage3();
34 void key_manage4();
35 void key_manage5();
36 void key_manage6();
37 void key_manage7();
38 void key_manage8();
39 void key_manage9();
40 void key_manage10();
41 void key_manage11();
42 void key_manage12();
43 void key_manage13();
44 void key_manage14();
45 void key_manage15();
46 void key_manage16();
47
48 //**********主函數開始**********
49 void main()
50 {
51 1 lcd_init();
52 1 write_com();
*** WARNING C209 IN LINE 52 OF 8X8 LCD.C: '_write_com': too few actual parameters
53 1 while(1)
54 1 {
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 2
55 2 key_scan();
56 2 lcd_disp();
57 2 }
58 1 }
59
60 //**********LCD顯示函數開始***********
61 void lcd_disp()
62 {
63 1 uchar j,i=0;
64 1 write_com(0x80);
65 1 for(i=0;i<n;i++)
66 1 {
67 2 j=tab_key[i];
68 2 write_data(tab[j]);
69 2 }
70 1 }
71 /*void key_manage16()
72 {
73 tab_key[n]=15;
74 n++;
75 } */
76
77 //**********LCD初始化函數開始*********
78 void lcd_init()
79 {
80 1 e=0;
81 1 write_com(0x38); //設置顯示模式:16X2,5X7,8位數據接口
82 1 write_com(0x0c); //開顯示,顯示光標,光標閃爍
83 1 write_com(0x06); //讀寫一個字符后,地址指針及光標加一,且光標加一整屏顯示不移動
84 1 write_com(0x80); //設置光標指針
85 1 }
86
87 //**********寫命令函數開始************
88 void write_com(uchar com)
89 {
90 1 rs=0;
91 1 rw=0;
92 1 e=0;
93 1 P0=com; //寫入命令
94 1 delay(3); //延時約3ms
95 1 e=1; //LCD使能端置高電平
96 1 delay(5); //延時約5ms
97 1 e=0; //LCD使能端拉低電平
98 1 }
99 //**********寫數據函數開始************
100 void write_data(uchar dat)
101 {
102 1 rs=1; //低電平寫數據
103 1
104 1 rw=0;
105 1
106 1 P0=dat; //寫入命令
107 1 delay(3); //延時約3ms
108 1 e=1; //LCD使能端置高電平
109 1 delay(5); //延時約5ms
110 1 e=0; //LCD使能端拉低電平
111 1 }
112 //**********鍵盤掃描函數開始****
113 void key_scan()
114 {
115 1 //**********掃描第一行*********
116 1 P3=0xfe;
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 3
117 1 temp=P3;
118 1 temp=temp&0xf0;
119 1 if(temp!=0xf0)
120 1 {
121 2 delay(100);
122 2 if(temp!=0xf0)
123 2 {
124 3 temp=P3;
125 3 switch(temp)
126 3 {
127 4 case 0xee:
128 4 key_manage1();
129 4 break;
130 4 case 0xde:
131 4 key_manage2();
132 4 break;
133 4 case 0xbe:
134 4 key_manage3();
135 4 break;
136 4 case 0x7e:
137 4 key_manage4();
138 4 break;
139 4 }
140 3 while(temp!=0xf0)
141 3 {
142 4 temp=P3;
143 4 temp=temp&0xf0;
144 4 }
145 3 }
146 2 }
147 1 //**********掃描第二行*********
148 1 P3=0xfd;
149 1 temp=P3;
150 1 temp=temp&0xf0;
151 1 if(temp!=0xf0)
152 1 {
153 2 delay(100);
154 2 if(temp!=0xf0)
155 2 {
156 3 temp=P3;
157 3 switch(temp)
158 3 {
159 4 case 0xed:
160 4 key_manage5();
161 4 break;
162 4 case 0xdd:
163 4 key_manage6();
164 4 break;
165 4 case 0xbd:
166 4 key_manage7();
167 4 break;
168 4 case 0x7d:
169 4 key_manage8();
170 4 break;
171 4 }
172 3 while(temp!=0xf0)
173 3 {
174 4 temp=P3;
175 4 temp=temp&0xf0;
176 4 }
177 3 }
178 2 }
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 4
179 1 //**********掃描第三行*********
180 1 P3=0xfb;
181 1 temp=P3;
182 1 temp=temp&0xf0;
183 1 if(temp!=0xf0)
184 1 {
185 2 delay(100);
186 2 if(temp!=0xf0)
187 2 {
188 3 temp=P3;
189 3 switch(temp)
190 3 {
191 4 case 0xeb:
192 4 key_manage9();
193 4 break;
194 4 case 0xdb:
195 4 key_manage10();
196 4 break;
197 4 case 0xbb:
198 4 key_manage11();
199 4 break;
200 4 case 0x7b:
201 4 key_manage12();
202 4 break;
203 4 }
204 3 while(temp!=0xf0)
205 3 {
206 4 temp=P3;
207 4 temp=temp&0xf0;
208 4 }
209 3 }
210 2 }
211 1
212 1 //**********掃描第四行*********
213 1 P3=0xf7;
214 1 temp=P3;
215 1 temp=temp&0xf0;
216 1 if(temp!=0xf0)
217 1 {
218 2 delay(100);
219 2 if(temp!=0xf0)
220 2 {
221 3 temp=P3;
222 3 switch(temp)
223 3 {
224 4 case 0xe7:
225 4 key_manage13();
226 4 break;
227 4 case 0xd7:
228 4 key_manage14();
229 4 break;
230 4 case 0xb7:
231 4 key_manage15();
232 4 break;
233 4 case 0x77:
234 4 key_manage16();
235 4 break;
236 4 }
237 3 while(temp!=0xf0)
238 3 {
239 4 temp=P3;
240 4 temp=temp&0xf0;
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 5
241 4 }
242 3 }
243 2 }
244 1 }
245 //*********延時函數開始**************
246 void delay(uint k)
247 {
248 1 uint i,j;
249 1 for(i=k;i>0;i--)
250 1 for(j=50;j>0;j--);
251 1 }
252
253 //******鍵盤功能分配函數群開始********
254 // 鍵盤功能示意圖
255 // 設計者:聶金波
256 //** 1 ** 2 ** 3 ** 4 **
257 //** 5 ** 6 ** 7 ** 8 **
258 //** 9 ** 0 ** s ** c **
259 //** M1** M2** M3** M4**
260 void key_manage1()
261 {
262 1 tab_key[n]=0;
263 1 n++;
264 1 }
265 void key_manage2()
266 {
267 1
268 1 tab_key[n]=1;
269 1 n++;
270 1
271 1 }
272 void key_manage3()
273 {
274 1 tab_key[n]=2;
275 1 n++;
276 1 }
277 void key_manage4()
278 {
279 1 tab_key[n]=3;
280 1 n++;
281 1 }
282 void key_manage5()
283 {
284 1 tab_key[n]=4;
285 1 n++;
286 1 }
287 void key_manage6()
288 {
289 1 tab_key[n]=5;
290 1 n++;
291 1 }
292 void key_manage7()
293 {
294 1 tab_key[n]=6;
295 1 n++;
296 1 }
297 void key_manage8()
298 {
299 1 tab_key[n]=7;
300 1 n++;
301 1 }
302 void key_manage9()
C51 COMPILER V8.02 8X8_LCD 12/13/2008 03:46:21 PAGE 6
303 {
304 1 tab_key[n]=8;
305 1 n++;
306 1 }
307 void key_manage10()
308 {
309 1 tab_key[n]=9;
310 1 n++;
311 1 }
312 void key_manage11()
313 {
314 1 tab_key[n]=10;
315 1 n++;
316 1 }
317 void key_manage12()
318 {
319 1 tab_key[n]=11;
320 1 n++;
321 1 }
322 void key_manage13()
323 {
324 1 tab_key[n]=12;
325 1 n++;
326 1 }
327 void key_manage14()
328 {
329 1 tab_key[n]=13;
330 1 n++;
331 1 }
332 void key_manage15()
333 {
334 1 tab_key[n]=14;
335 1 n++;
336 1 }
337 void key_manage16()
338 {
339 1 tab_key[n]=15;
340 1 n++;
341 1 }
342
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 630 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -