📄 lcd.lst
字号:
C51 COMPILER V8.08 LCD 03/18/2009 21:47:28 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include <lcd.h>
4 sbit RSPIN = P1^0; //数据/命令选择端
5 sbit RWPIN = P1^1; //读写控制信号
6 //sbit EPIN = P1^2; //使能信号
7
8 unsigned char XPOS,YPOS;
9 unsigned char chbuff;
10
11 void delay1(unsigned int t) //延时
12 { unsigned int i,j;
13 1 for(i=0;i<t;i++)
14 1 for(j=0;j<10;j++)
15 1 ;
16 1 }
17
18 void lcdwaitidle(void) //读写检测.对控制器每次进行读写操作之前,都必须进行,
19 { P0=0xff;
20 1 RSPIN=0;
21 1 RWPIN=1;
22 1 EPIN=1;
23 1 //while((P0&0x80)==0x80); //确保STA7 为0
24 1 while((P0&0x01)==0x01); //确保STA7 为0
25 1 EPIN=0;
26 1 }
27
28 void lcdwcn(unsigned char c) //不判忙直接写指令
29 { RSPIN=0;
30 1 RWPIN=0;
31 1 chbuff=0;
32 1 if (c&0x01) chbuff=chbuff|0x80;
33 1 if (c&0x02) chbuff=chbuff|0x40;
34 1 if (c&0x04) chbuff=chbuff|0x20;
35 1 if (c&0x08) chbuff=chbuff|0x10;
36 1 if (c&0x10) chbuff=chbuff|0x08;
37 1 if (c&0x20) chbuff=chbuff|0x04;
38 1 if (c&0x40) chbuff=chbuff|0x02;
39 1 if (c&0x80) chbuff=chbuff|0x01;
40 1 P0=chbuff;
41 1 EPIN=1;
42 1 _nop_();
43 1 EPIN=0;
44 1 }
45
46 void lcdwc(unsigned char c) //判忙后写指令
47 { lcdwaitidle();
48 1 lcdwcn(c);
49 1 }
50
51 void lcdwd(unsigned char d) //写数据
52 { lcdwaitidle();
53 1 RSPIN=1;
54 1 RWPIN=0;
55 1 chbuff=0;
C51 COMPILER V8.08 LCD 03/18/2009 21:47:28 PAGE 2
56 1 if (d&0x01) chbuff=chbuff|0x80;
57 1 if (d&0x02) chbuff=chbuff|0x40;
58 1 if (d&0x04) chbuff=chbuff|0x20;
59 1 if (d&0x08) chbuff=chbuff|0x10;
60 1 if (d&0x10) chbuff=chbuff|0x08;
61 1 if (d&0x20) chbuff=chbuff|0x04;
62 1 if (d&0x40) chbuff=chbuff|0x02;
63 1 if (d&0x80) chbuff=chbuff|0x01;
64 1 P0=chbuff;
65 1 EPIN=1;
66 1 _nop_();
67 1 EPIN=0;
68 1 }
69
70 void lcdpos(void) //确定当前光标位置
71 { XPOS&=0x0f;
72 1 YPOS&=0x03;
73 1 if(YPOS==0x00)
74 1 lcdwc(XPOS|0x80);
75 1 else if(YPOS==0x01)
76 1 lcdwc((XPOS+0x40)|0x80);
77 1 }
78
79 void lcdreset() //LCM初始化
80 { EPIN=0;
81 1 delay1(150); lcdwcn(0x38); //写指令38H
82 1 delay1(50); lcdwcn(0x38); //写指令38H
83 1 delay1(50); lcdwcn(0x38); //写指令38H
84 1 lcdwc(0x38); //显示模式设置,设置16X2 显示,5X7 点阵,8 位数据接口
85 1 lcdwc(0x08); //显示关闭
86 1 lcdwc(0x01); //显示清屏
87 1 lcdwc(0x06); //显示光标移动设置
88 1 lcdwc(0x0c); //显示开及光标设置
89 1 }
90
91 void lcdfill(unsigned char n) //向1602写一满屏字符
92 {
93 1 for(YPOS=0;YPOS<2;YPOS++)
94 1 for(XPOS=0;XPOS<16;XPOS++)
95 1 { lcdpos();
96 2 lcdwd(n); }
97 1 }
98
99 void lcdchar(unsigned char x,unsigned char y,unsigned char ch) //在1602指定位置写一个字符
100 {
101 1 XPOS=x; YPOS=y;
102 1 lcdpos();
103 1 lcdwd(ch);
104 1 }
105
106 void lcdwda(unsigned char x,unsigned char y,unsigned char *s) //在1602指定位置写一行字符串
107 { YPOS=y;
108 1 for(XPOS=x;XPOS<16;XPOS++)
109 1 { lcdpos();
110 2 if (*s=='\0') return;
111 2 lcdwd(*s);
112 2 s++;
113 2 //delay1(5000);//(400);
114 2 }
115 1 }
116
117
C51 COMPILER V8.08 LCD 03/18/2009 21:47:28 PAGE 3
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 363 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -