📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 09/05/2007 11:52:44 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <at89x51.h>
2 #include <intrins.h>
3 #include "lcd.h"
4 typedef unsigned int uint;
5 typedef unsigned char uchar;
6 ////////////////////////////////////////////////////////////////////////
7 #define CMD_CLEAR 0x01
8 #define CMD_HOME 0x03
9 #define CMD_DISPLAYON 0x0c
10 #define CMD_FUNCTION 0x30 //8 bit basic instr
11 #define CMD_ENTRY 0x06 //ac plus
12 #define CMD_SHOWCURSOR 0x0f
13 #define CMD_SETCURSOR 0x14
14 #define CMD_GRAPH_ON 0x3e
15 #define CMD_GRAPH_OFF 0x3c
16 ////////////////////////////////////////////////////////////////////////
17 sbit RS=P1^5;
18 sbit RW=P2^1;
19 sbit EN=P1^7;
20 ////////////////////////////////////////////////////////////////////////
21 void Delay()
22 {
23 1 uchar n;
24 1 for(n=0;n<5;n++);
25 1 }
26 void SendLcdCmd(uchar cmd)
27 {
28 1 P2=0xff;
29 1 RS=0;
30 1 RW=0;
31 1 EN=0;
32 1 P0=cmd;
33 1 EN=1;
34 1 _nop_();
35 1 EN=0;
36 1 }
37 void SendLcdData(uchar dat)
38 {
39 1 P2=0xff;
40 1 RS=1;
41 1 RW=0;
42 1 EN=0;
43 1 P0=dat;
44 1 EN=1;
45 1 _nop_();
46 1 EN=0;
47 1 RS=0;
48 1 }
49 /*
50 uchar ReadLcdState()
51 {
52 uchar state;
53 P2=0xff;
54 RS=0;
55 RW=1;
C51 COMPILER V8.02 LCD 09/05/2007 11:52:44 PAGE 2
56 EN=0;
57 EN=1;
58 _nop_();
59 state=P0;
60 EN=0;
61 return state;
62 }
63 uchar ReadLcdData()
64 {
65 uchar dat;
66 P2=0xff;
67 RS=1;
68 RW=1;
69 EN=0;
70 EN=1;
71 _nop_();
72 dat=P0;
73 EN=0;
74 RS=0;
75 return dat;
76 }
77 */
78 void ShowCursor()
79 {
80 1 Delay();
81 1 SendLcdCmd(CMD_SHOWCURSOR);
82 1 Delay();
83 1 SendLcdCmd(CMD_SETCURSOR);
84 1 }
85 void HideCursor()
86 {
87 1 Delay();
88 1 SendLcdCmd(CMD_DISPLAYON);
89 1
90 1 }
91 void LcdClear()
92 {
93 1 uint n;
94 1 Delay();
95 1 SendLcdCmd(CMD_CLEAR);
96 1 for(n=0;n<4800;n++);
97 1 }
98 void LcdInit()
99 {
100 1 uint n;
101 1 EN=0;
102 1 SendLcdCmd(CMD_FUNCTION);
103 1 Delay();
104 1 SendLcdCmd(CMD_DISPLAYON);
105 1 Delay();
106 1 SendLcdCmd(CMD_CLEAR);
107 1 for(n=0;n<4800;n++);
108 1 SendLcdCmd(CMD_ENTRY);
109 1 EN=0;
110 1 }
111 bit SetPos(uchar x,uchar y)
112 {
113 1 uchar addr;
114 1 if(y>3 || x>7) return 0;
115 1 switch(y)
116 1 {
117 2 case 0: addr=0x80+x;
C51 COMPILER V8.02 LCD 09/05/2007 11:52:44 PAGE 3
118 2 break;
119 2 case 1: addr=0x90+x;
120 2 break;
121 2 case 2: addr=0x88+x;
122 2 break;
123 2 case 3: addr=0x98+x;
124 2 break;
125 2 }
126 1 Delay();
127 1 SendLcdCmd(addr);
128 1 EN=0;
129 1 return 1;
130 1 }
131 void LcdPrint(uchar *c, uchar len)
132 {
133 1 uchar i;
134 1 for(i=0;i<len;i++)
135 1 {
136 2 Delay();
137 2 SendLcdData(c[i]);
138 2 }
139 1 EN=0;
140 1 }
141 bit LcdPrintLine(uchar *c,uchar len,uchar x,uchar y)
142 {
143 1 uchar i=0,j=x;
144 1 bit add=0;
145 1 if(!SetPos(x,y)) return 0;
146 1 while(i<len)
147 1 {
148 2 Delay();
149 2 SendLcdData(c[i]);
150 2 i++;
151 2 if(add)
152 2 {
153 3 j++;
154 3 if(j>=8)
155 3 {
156 4 y++;if(y>=4) y-=4;
157 4 j=0;
158 4 SetPos(0,y);
159 4 }
160 3 }
161 2 add=!add;
162 2 }
163 1 EN=0;
164 1 return 1;
165 1 }
166 void DrawPic(char *pic)
167 {
168 1 uchar x,y;
169 1 uint i=0;
170 1 SendLcdCmd(CMD_GRAPH_OFF);
171 1 Delay();
172 1 for(y=0x80;y<0xa0;y++)
173 1 {
174 2 SendLcdCmd(y);
175 2 Delay();
176 2 SendLcdCmd(0x80);
177 2 Delay();
178 2 for(x=0;x<16;x++)
179 2 {
C51 COMPILER V8.02 LCD 09/05/2007 11:52:44 PAGE 4
180 3 SendLcdData(pic[i]);
181 3 Delay();
182 3 i++;
183 3 }
184 2 }
185 1 for(y=0x80;y<0xa0;y++)
186 1 {
187 2 SendLcdCmd(y);
188 2 Delay();
189 2 SendLcdCmd(0x88);
190 2 Delay();
191 2 for(x=0;x<16;x++)
192 2 {
193 3 SendLcdData(pic[i]);
194 3 Delay();
195 3 i++;
196 3 }
197 2 }
198 1 SendLcdCmd(CMD_GRAPH_ON);
199 1 Delay();
200 1 }
201
202
203
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 446 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 15
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 + -