📄 12864lcd显示.lst
字号:
232 3 Write_char(1,img[k++]); //填充对应点阵
233 3 }
234 2 }
235 1
236 1 for(i=0;i<32;i++) //循环下半屏填充点
237 1 {
238 2 Write_char(0,0x80+i);
239 2 Write_char(0,0x88);
240 2 for(j=0;j<16;j++)
241 2 {
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 5
242 3 Write_char(1,img[k++]);
243 3 }
244 2 }
245 1 }
246
247
248 void Clr_Scr(void) //清屏函数
249 {
250 1 Write_char(0,0x01);
251 1 }
252
253
254 void LCD_set_xy( unsigned char x, unsigned char y ) //指定LCD位置X为行Y为列
255 {
256 1 unsigned char address;
257 1 switch(x) //选择函数
258 1 {
259 2 case 0:
260 2 address = 0x80 + y;
261 2 break;
262 2 case 1:
263 2 address = 0x80 + y;
264 2 break;
265 2 case 2:
266 2 address = 0x90 + y;
267 2 break;
268 2 case 3:
269 2 address = 0x88 + y;
270 2 break;
271 2 case 4:
272 2 address = 0x98 + y;
273 2 break;
274 2 default:
275 2 address = 0x80 + y;
276 2 break;
277 2 }
278 1 Write_char(0, address); //写指令指定位置
279 1 }
280
281
282 void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)//指定位置写字符串
283 {
284 1 LCD_set_xy( X, Y );
285 1
286 1 while (*s) //循环写字符串
287 1 {
288 2 Write_char( 1, *s ); //写数据
289 2 s ++;
290 2 Delaynms(1);
291 2 }
292 1 }
293
294
295 void LCD_Write_number(unsigned char s) //数字显示函数
296 {
297 1 Write_char(1,num[s]); //写数据
298 1 Delaynms(1);
299 1 }
300
301
302 void LCD_Write_week(unsigned char s) //星期显示
303 {
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 6
304 1 switch(s)
305 1 {
306 2 case 1:
307 2 LCD_Write_string(3,2,yi);
308 2 break;
309 2 case 2:
310 2 LCD_Write_string(3,2,er);
311 2 break;
312 2 case 3:
313 2 LCD_Write_string(3,2,san);
314 2 break;
315 2 case 4:
316 2 LCD_Write_string(3,2,si);
317 2 break;
318 2 case 5:
319 2 LCD_Write_string(3,2,wu);
320 2 break;
321 2 case 6:
322 2 LCD_Write_string(3,2,liu);
323 2 break;
324 2 case 7:
325 2 LCD_Write_string(3,2,ri);
326 2 break;
327 2 case 8:
328 2 LCD_Write_string(3,2,space_c);//显示空格,为调整时间用
329 2 break;
330 2 default:
331 2 break;
332 2 }
333 1 }
334
335
336 void Delay(int num) //延迟Nu秒函数
337 {
338 1 while(num--);
339 1 }
340
341
342 void Init_DS18B20(void) //初始化温度传感器ds1820
343 {
344 1 unsigned char x=0;
345 1 DQ = 1; //DQ复位
346 1 Delay(8); //稍做延时
347 1 DQ = 0; //单片机将DQ拉低
348 1 Delay(80); //精确延时 大于 480us
349 1 DQ = 1; //拉高总线
350 1 Delay(14);
351 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
352 1 Delay(20);
353 1 }
354
355
356 unsigned char ReadOneChar(void) //读取温度传感器一个字节
357 {
358 1 unsigned char i=0;
359 1 unsigned char dat = 0;
360 1 for (i=8;i>0;i--)
361 1 {
362 2 DQ = 0; // 给脉冲信号
363 2 dat>>=1;
364 2 DQ = 1; // 给脉冲信号
365 2 if(DQ)
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 7
366 2 dat|=0x80;
367 2 Delay(4);
368 2 }
369 1 return(dat);
370 1 }
371
372
373 void WriteOneChar(unsigned char dat) //发送指令到温度传感器
374 {
375 1 unsigned char i=0;
376 1 for (i=8; i>0; i--)
377 1 {
378 2 DQ = 0;
379 2 DQ = dat&0x01; //低位到高位
380 2 Delay(5);
381 2 DQ = 1;
382 2 dat>>=1; //右移1位
383 2 }
384 1 }
385
386
387 unsigned int ReadTemperature(void) //读取温度数值
388 {
389 1 unsigned char a=0;
390 1 unsigned char b=0;
391 1 unsigned int t=0;
392 1 float tt=0;
393 1 Init_DS18B20();
394 1 WriteOneChar(0xCC); //跳过读序号列号的操作
395 1 WriteOneChar(0x44); //启动温度转换
396 1 Init_DS18B20();
397 1 WriteOneChar(0xCC); //跳过读序号列号的操作
398 1 WriteOneChar(0xBE); //读取温度寄存器
399 1 a=ReadOneChar(); //读低8位
400 1 b=ReadOneChar(); //读高8位
401 1 t=b;
402 1 t<<=8;
403 1 t=t|a;
404 1 tt=t*0.0625;
405 1 t= tt*10+0.5; //放大10倍输出并四舍五入
406 1 return(t);
407 1 }
408
409
410 void clock_out(unsigned char dd) //1302时钟接收一个字节
411 {
412 1 ACC=dd;
413 1 clock_dat=a0; clock_clk=1; clock_clk=0;
414 1 clock_dat=a1; clock_clk=1; clock_clk=0;
415 1 clock_dat=a2; clock_clk=1; clock_clk=0;
416 1 clock_dat=a3; clock_clk=1; clock_clk=0;
417 1 clock_dat=a4; clock_clk=1; clock_clk=0;
418 1 clock_dat=a5; clock_clk=1; clock_clk=0;
419 1 clock_dat=a6; clock_clk=1; clock_clk=0;
420 1 clock_dat=a7; clock_clk=1; clock_clk=0;
421 1 }
422
423
424 unsigned char clock_in(void) //1302时钟发送一个字节
425 {
426 1 clock_dat=1;
427 1 a0=clock_dat;
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 8
428 1 clock_clk=1; clock_clk=0; a1=clock_dat;
429 1 clock_clk=1; clock_clk=0; a2=clock_dat;
430 1 clock_clk=1; clock_clk=0; a3=clock_dat;
431 1 clock_clk=1; clock_clk=0; a4=clock_dat;
432 1 clock_clk=1; clock_clk=0; a5=clock_dat;
433 1 clock_clk=1; clock_clk=0; a6=clock_dat;
434 1 clock_clk=1; clock_clk=0; a7=clock_dat;
435 1 return(ACC); //还原一个字节
436 1 }
437
438
439 unsigned char read_clock(unsigned char ord) //读取时钟数据
440 {
441 1 unsigned char dd=0;
442 1 clock_clk=0;
443 1 clock_Rst=0;
444 1 clock_Rst=1;
445 1 clock_out(ord);
446 1 dd=clock_in();
447 1 clock_Rst=0;
448 1 clock_clk=1;
449 1 return(dd);
450 1 }
451
452
453 void write_clock(unsigned char ord, unsigned char dd)//写入时钟数据
454 {
455 1 clock_clk=0;
456 1 clock_Rst=0;
457 1 clock_Rst=1;
458 1 clock_out(ord);
459 1 clock_out(dd);
460 1 clock_Rst=0;
461 1 clock_clk=1;
462 1 }
463
464
465 void Disp(void) //时间界面光标闪烁
466 {
467 1 unsigned int i=0;
468 1 unsigned char a=0,b=0,c=0,f=0;
469 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -