📄 lcd2222.lst
字号:
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD2222
OBJECT MODULE PLACED IN lcd2222.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\c51.exe lcd2222.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // Includes
3 //-----------------------------------------------------------------------------
4 #include <c8051f310.h> // SFR declarations
5 #include <INTRINS.H>
6 #include <stdio.h>
7 //-----------------------------------------------------------------------------
8 // Global CONSTANTS
9 //-----------------------------------------------------------------------------
10 #define uchar unsigned char
11 #define uint unsigned int
12
13 #define SYSCLK 24500000 // SYSCLK frequency in Hz
14
15 //----------------------------------------------------------------------------
16 void Write_COM(uchar ins);
17 void Write_CHAR(uchar d);
18 void lcdchar (uchar ch);
19 void lcdaddr(uchar DDRAM);
20 void cursoropen(uchar position); //开光标,关闪烁
21 void flickeropen(uchar position); //开光标、开闪烁
22 void cursorclose(void); //关光标、关闪烁
23 void YJ_Init(void);
24 void writelcd(uchar disdata);
25 void SPI0_Init (void);
26 void PORT1_Init (void);
27
28 unsigned char xdata discode; //开关显示、光标、闪烁的命令字暂存单元
29 unsigned long x;
30 unsigned char virt_port;
31
32 unsigned char xdata tab1[16] ={0x20,0x20,0x42,0x54,0x20,0x46,0x33,0x31,0x30,0x20,0x56,0x31,0x2e,0x30
33 ,0x20,0x20};
34 unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
35 0x6d,0x2e,0x63,0x6e,0x20,0x20};
36
37 sbit LCDCS = P3^3;
38
39 //sbit YJDAT = P2^6;
40 //sbit YJCLK = P2^7;
41 //sbit LCDRS = P3^3;
42 //sbit LCDE = P3^4;
43 //-----------------------------------------------------------------------------
44 // MAIN Routine
45 //-----------------------------------------------------------------------------
46
47 void lcd (void) {
48 1 int i,j;
49 1 long k;
50 1
51 1 PCA0MD &= ~0x40; // WDTE = 0 (watchdog timer enable bit)
52 1 OSCICN |= 0x03; // Set internal oscillator to highest
53 1 // setting (24500000)
54 1 // PORT_Init (); // initialize crossbar and GPIO
55 1 SPI0_Init ();
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 2
56 1 YJ_Init();
57 1 while (1) {
58 2
59 2 for(i=0;i<16;i++){
60 3 Write_CHAR(tab1[i]);
61 3 for(k=0;k<5000;k++);}
62 2 Write_COM(0xc0);
63 2
64 2 for(k=0;k<5000;k++);
65 2 for(i=0;i<16;i++){
66 3 Write_CHAR(Netdata[i]);
67 3 for(k=0;k<5000;k++);}
68 2
69 2
70 2 YJ_Init();
71 2 }
72 1 }
*** WARNING C280 IN LINE 48 OF LCD2222.C: 'j': unreferenced local variable
73 //-----------------------------------------------------------------------------
74 // PORT_Init
75 //-----------------------------------------------------------------------------
76 //
77 // Configure the Crossbar and GPIO ports
78
79 void PORT1_Init (void)
80 {
81 1 P0SKIP = 0xFE;
82 1 P1SKIP = 0x7F;
83 1 XBR0 = 0x02; // Enable SMBus pins
84 1 XBR1 = 0x40; // Enable crossbar and weak pull-ups
85 1
86 1 P0MDOUT = 0xFF; // All P0 pins open-drain output
87 1 P2MDOUT = 0xFF;
88 1 P3MDOUT |= 0x04; // P3.3 push-pull output
89 1
90 1 }
91 //-----------------------------------------------------------------------------
92 //SPI_INIT
93 //-----------------------------------------------------------------------------
94 void SPI0_Init (void)
95 {
96 1 SPI0CFG = 0x70; // data sampled on 1st SCK rising edge
97 1 // 8-bit data words
98 1
99 1 SPI0CN = 0x09; // Master mode; SPI enabled; flags
100 1 // cleared
101 1 SPI0CKR = 0x03;//SYSCLK/2/3000000-1;// SPI clock <= 8MHz (limited by
102 1 // EEPROM spec.)
103 1 }
104 //-----------------------------------------------------------------------------
105 //write com
106 //-----------------------------------------------------------------------------
107 void Write_COM(uchar ins)
108 {
109 1 uchar xdata i,t;
110 1 uint xdata j;
111 1
112 1 for(j=0;j<500;j++); //用延时代替查询
113 1 virt_port|=ins&0xf0;
114 1 writelcd(virt_port);
115 1 //LCDE=1;
116 1 virt_port|=0x08;
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 3
117 1 writelcd(virt_port);
118 1 for(i=3;i>0;i--);
119 1 //LCDE=0;
120 1 virt_port&=~0x08;
121 1 writelcd(virt_port);
122 1
123 1 virt_port&=0x07;
124 1 writelcd(virt_port);
125 1 t=ins<<4;
126 1 virt_port|=t&0xf0;
127 1 writelcd(virt_port);
128 1 //LCDE=1;
129 1 virt_port|=0x08;
130 1 writelcd(virt_port);
131 1 for(i=3;i>0;i--);
132 1 //LCDE=0;
133 1 virt_port&=~0x08;
134 1 writelcd(virt_port);
135 1 virt_port=0;
136 1 writelcd(virt_port);
137 1 }
138 //----------------------------------------------------------------------------------
139 //write data
140 //----------------------------------------------------------------------------------
141 void Write_CHAR(uchar d)
142 {
143 1 uchar xdata i,t;
144 1 uint xdata j;
145 1
146 1 for(j=0;j<500;j++); //用延时代替查询
147 1 virt_port|=0x02;
148 1 writelcd(virt_port);
149 1 virt_port|=d&0xf0;
150 1 writelcd(virt_port);
151 1 virt_port|=0x08;//E=1
152 1 writelcd(virt_port);
153 1 for(i=3;i>0;i--);
154 1 virt_port&=0xf7; //E=0
155 1 writelcd(virt_port);
156 1 virt_port&=0x07;
157 1 writelcd(virt_port);
158 1
159 1 t=d&0x0f;
160 1 virt_port|=t<<4;
161 1 writelcd(virt_port);
162 1
163 1 virt_port|=0x08; //E=1
164 1 writelcd(virt_port);
165 1 for(i=3;i>0;i--);
166 1 virt_port&=0xf7; //E=0
167 1 writelcd(virt_port);
168 1 virt_port=0;
169 1 writelcd(virt_port);
170 1 }
171 //---------------------------------------------------------------------------------------
172 void lcdaddr(uchar DDRAM)
173 {
174 1 if (DDRAM<=16)
175 1 {
176 2 Write_COM(0x80+DDRAM-1);
177 2 }
178 1 else
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 4
179 1 {
180 2 Write_COM(0x80+DDRAM+0x2f);
181 2 }
182 1 }
183 //---------------------------------------------------------------------------------------
184 void cursoropen(uchar position)//开光标,关闪烁
185 {
186 1 lcdaddr(position);
187 1 discode|=0x02;
188 1 discode&=~0x01;
189 1 Write_COM(discode);
190 1 }
191 //----------------------------------------------------------------------------------------
192 void flickeropen(uchar position)//开光标、开闪烁
193 {
194 1 //lcdaddr(position);
195 1 //Write_COM(0x0f);
196 1 lcdaddr(position);
197 1 discode|=0x02;
198 1 discode|=0x01;
199 1 Write_COM(discode);
200 1 }
201 //-----------------------------------------------------------------------------------------
202 void cursorclose(void) //关光标、关闪烁
203 {
204 1 //Write_COM(0x0c);
205 1 discode&=~0x02;
206 1 discode&=~0x01;
207 1 Write_COM(discode);
208 1 }
209
210 //------------------------------------------------------------------------------------------
211 void YJ_Init(void)
212 {
213 1 uint xdata i;
214 1
215 1
216 1 virt_port=0;
217 1 writelcd(virt_port);
218 1 virt_port|=0x08; //E=1,第一步
219 1 writelcd(virt_port);
220 1 virt_port|=0x30;
221 1 writelcd(virt_port);
222 1 for(i=20;i>0;i--);
223 1 virt_port&=0xf7; //E=0
224 1 writelcd(virt_port);
225 1 virt_port=0;
226 1 writelcd(virt_port);
227 1 for(i=20000;i>0;i--);
228 1 for(i=20000;i>0;i--);
229 1
230 1 virt_port|=0x08; //E=1,第二步
231 1 writelcd(virt_port);
232 1 virt_port|=0x30;
233 1 writelcd(virt_port);
234 1 for(i=20;i>0;i--);
235 1 virt_port&=0xf7; //E=0
236 1 writelcd(virt_port);
237 1 virt_port=0;
238 1 writelcd(virt_port);
239 1 for(i=1000;i>0;i--);
240 1
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 5
241 1 virt_port|=0x08; //E=1,第三步
242 1 writelcd(virt_port);
243 1 virt_port|=0x30;
244 1 writelcd(virt_port);
245 1 for(i=20;i>0;i--);
246 1 virt_port&=0xf7; //E=0
247 1 writelcd(virt_port);
248 1 virt_port=0;
249 1 writelcd(virt_port);
250 1 for(i=1000;i>0;i--); //3次延时,重要!
251 1
252 1 for(i=8000;i>0;i--); //用延时代替查询
253 1
254 1
255 1 virt_port=0; //第五步,写入20码,设置为4位总线方式,非常重要!!!!!
256 1 writelcd(virt_port);
257 1 virt_port|=0x20; //只写高字节
258 1 writelcd(virt_port);
259 1 virt_port|=0x08; //E=1
260 1 writelcd(virt_port);
261 1 for(i=20;i>0;i--);
262 1 virt_port&=0xf7; //E=0
263 1 writelcd(virt_port);
264 1 for(i=10;i>0;i--);
265 1 virt_port=0;
266 1 writelcd(virt_port);
267 1
268 1 Write_COM(0x28); //第六步。。。。
269 1 for(i=50;i>0;i--);
270 1
271 1 Write_COM(0x01);
272 1 for(i=50;i>0;i--);
273 1
274 1 Write_COM(0x0e);
275 1 for(i=50;i>0;i--);
276 1
277 1 Write_COM(0x06);
278 1 for(i=50;i>0;i--);
279 1
280 1 }
281 //-----------------------------------------------------
282 void writelcd(uchar disdata) //write 595
283 {
284 1 uint xdata i;
285 1
286 1 for(i=0;i<3;i++);
287 1 LCDCS=1;
288 1 SPIF = 0;
289 1 for(x=0;x<50;x++);
290 1 SPI0DAT=disdata;
291 1
292 1 while (SPIF == 0); // 等待写结束
293 1 for(x=0;x<500;x++);
294 1 LCDCS=0;
295 1 for(x=0;x<500;x++);
296 1 }
297 //----------------------------------------------------------
298 //end of file
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1426 ----
C51 COMPILER V7.50 LCD2222 08/23/2006 08:04:22 PAGE 6
CONSTANT SIZE = ---- ----
XDATA SIZE = 33 12
PDATA SIZE = ---- ----
DATA SIZE = 5 12
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 + -