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