📄 12864perfect.lst
字号:
211 1 command_data=0x04;
212 1 send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
213 1 command_data=0x0c;
214 1 send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
215 1 command_data=0x01;
216 1 send_command(command_data); /*清DDRAM*/
217 1 command_data=0x02;
218 1 send_command(command_data); /*DDRAM地址归位*/
219 1 command_data=0x80;
220 1 send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/
221 1 }
222
223
224
225
226
227
228 /*********************************************************/
229 /* */
230 /* 设定显示位置 */
231 /* */
232 /*********************************************************/
233 void lcd_pos(uchar X,uchar Y)
234 {
235 1 uchar pos;
236 1 if (X==1)
237 1 {X=0x80;}
238 1 else if (X==2)
239 1 {X=0x90;}
240 1 else if (X==3)
241 1 {X=0x88;}
C51 COMPILER V8.02 12864PERFECT 09/06/2008 20:40:13 PAGE 5
242 1 else if (X==4)
243 1 {X=0x98;}
244 1 pos = X+Y ;
245 1
246 1 send_command(pos); //显示地址
247 1 }
248
249
250
251
252 /*********************************************************
253 * *
254 * 闪烁函数 *
255 * *
256 *********************************************************/
257
258
259 void lcdflag()
260 {
261 1 send_command(0x08); //睡眠模式
262 1 lcd_delay(400);
263 1 send_command(0x0c); //睡眠中醒过来了,哈哈
264 1 lcd_delay(400);
265 1 send_command(0x08);
266 1 lcd_delay(400);
267 1 send_command(0x0c);
268 1 lcd_delay(400);
269 1 send_command(0x08);
270 1 lcd_delay(400);
271 1 send_command(0x0c);
272 1 lcd_delay(5);
273 1 send_command(0x01);
274 1 lcd_delay(5);
275 1 }
276
277
278
279 /*********************************************************
280 * *
281 * 图形显示 *
282 * *
283 *********************************************************/
284 void photodisplay(uchar *bmp)
285 {
286 1 uchar i,j;
287 1
288 1 send_command(0x34); //写数据时,关闭图形显示
289 1
290 1 for(i=0;i<32;i++)
291 1 {
292 2 send_command(0x80+i); //先写入水平坐标值
293 2 send_command(0x80); //写入垂直坐标值
294 2 for(j=0;j<16;j++) //再写入两个8位元的数据
295 2 send_data(*bmp++);
296 2 // delay(1);
297 2 }
298 1
299 1 for(i=0;i<32;i++)
300 1 {
301 2 send_command(0x80+i);
302 2 send_command(0x88);
303 2 for(j=0;j<16;j++)
C51 COMPILER V8.02 12864PERFECT 09/06/2008 20:40:13 PAGE 6
304 2 send_data(*bmp++);
305 2 // delay(1);
306 2 }
307 1 send_command(0x36); //写完数据,开图形显示
308 1 }
309 /*********************************************************/
310 //红外发射
311 /*************************************/
312 void IR_IN() interrupt 0 using 0
313 {
314 1 uchar i,j,k,N=0;
315 1 uchar number;
316 1 EX0 = 0;
317 1 delay0(15);
318 1 if (IRIN==1)
319 1 { EX0 =1;
320 2 return;
321 2 }
322 1 //确认IR信号出现
323 1 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
324 1 {delay0(1);}
325 1
326 1 for (j=0;j<4;j++) //收集四组数据
327 1 {
328 2 for (k=0;k<8;k++) //每组数据有8位
329 2 {
330 3 while (IRIN); //等IR变为低电平,跳过4.5ms的前导高电平信号。
331 3 while (!IRIN); //等IR变为高电平
332 3 while (IRIN) //计算IR高电平时长
333 3 {
334 4 delay0(1);
335 4 N++;
336 4 if (N>=30)
337 4 { EX0=1;
338 5 return;} //0.14ms计数过长自动离开。
339 4 } //高电平计数完毕
340 3 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
341 3 if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
342 3 N=0;
343 3 }//end for k
344 2 }//end for j
345 1 if (IRCOM[2]!=~IRCOM[3])
346 1 { EX0=1;
347 2 return; }
348 1 switch(IRCOM[2])
349 1 {case 0x10:number=1;break;
350 2 case 0x03:number=2;break;
351 2 case 0x01:number=3;break;
352 2 case 0x06:number=4;break;
353 2 case 0x09:number=5;break;
354 2 case 0x1D:number=6;break;
355 2 case 0x1F:number=7;break;
356 2 case 0x0D:number=8;break;
357 2 case 0x19:number=9;break;
358 2 case 0x1B:number=0;break;
359 2 // case 0x11:next++;if(next==3) next=0;number=0;break;
360 2 // case 0x15:queren++;break;
361 2 // case 0x17:gg++;if(gg==4) gg=0;break;
362 2
363 2
364 2 // case 0x1c:c1++;if(c1==10) c1=0;break;
365 2 // case 0x14:c2++;if(c2==10) c2=0;break;
C51 COMPILER V8.02 12864PERFECT 09/06/2008 20:40:13 PAGE 7
366 2 // case 0x0f:c3++;if(c3==10) c3=0;break;
367 2
368 2 default:break;
369 2 }
370 1
371 1 key=number;
372 1
373 1 lcd_pos(2,4);
374 1
375 1 send_data(0x30+key);
376 1
377 1
378 1
379 1 EX0 = 1;
380 1 }
*** WARNING C280 IN LINE 314 OF 12864PERFECT.C: 'i': unreferenced local variable
381
382
383
384
385 main()
386 {
387 1 uchar command_data;
388 1 uchar i;
389 1 EA=1;
390 1 EX0=1;
391 1 IT0=1;
392 1 IRIN=1; //I/O口初始化
393 1 //上电,等待稳定
394 1 lcd_init();
395 1
396 1 send_command(0x01);
397 1 photodisplay(Photo1); //显示图片1
398 1 //lcdflag();
399 1 //send_command(0x80);
400 1 //send_data(0xa1);
401 1 //send_data(0xf8);
402 1 //delay(1000);
403 1 //send_command(0x80);
404 1 // send_command(0x00);
405 1 while(1);
406 1
407 1
408 1
409 1
410 1
411 1 }
*** WARNING C280 IN LINE 387 OF 12864PERFECT.C: 'command_data': unreferenced local variable
*** WARNING C280 IN LINE 388 OF 12864PERFECT.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 756 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -