?? 19264lcd.lst
字號(hào):
C51 COMPILER V8.02 19264LCD 04/01/2009 15:34:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 19264LCD
OBJECT MODULE PLACED IN 19264LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 19264LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 // CA19264A Demo Program
2 //***************************************************************************
3 //* Create by :liujun 2005.02.28 *
4 //***************************************************************************
5 //連線表: CPU=89C52 *
6 //RS=P2.0 R/W=P2.1 E=P2.2 CS1=P2.3 CS2=P2.4 *
7 //SysClock=12MHz DB0-DB7=P2.0-P2.7 /Reset=InBoard *
8 //因?yàn)檫@款液晶是兩個(gè)片選,00 01 10表示三個(gè)芯片,三個(gè)片選各自代表一個(gè)道理是一樣的。
9 //***************************************************************************
10
11 #include <reg52.h>
12 #include <stdlib.h>
13 #include <intrins.h>
14 #include <stdio.h>
15
16 /********************引腳定義********************/
17
18 sbit CS1 =P1^3; //1片選
19 sbit CS2 =P1^5; //2片選
20 sbit CS3 =P1^6; //3片選
21 sbit RS =P1^0; //數(shù)據(jù)指令
22 sbit RW =P1^1; //讀寫
23 sbit E =P1^2; //使能
24 sbit RST =P1^5;//復(fù)位
25 //sbit Sbreak=P
26
27 unsigned char Page; //頁(yè) 地址
28 unsigned char Col; //列 地址
29
30 unsigned char code BMP1[];
31 unsigned char code BMP2[];
32 char code Hanzi[];
33
34 void Delay(unsigned int MS);
35 void wtcom(void);
36
37 /***************************/
38 /*檢查Busy */
39 /***************************/
40 void BusyL(void)
41 {
42 1 CS1= 0;
43 1 CS2= 1;
44 1 CS3= 1;
45 1 wtcom();
46 1 }
47
48 void BusyM(void)
49 {
50 1 CS1= 1;
51 1 CS2= 0;
52 1 CS3= 1;
53 1 wtcom();
54 1 }
55
C51 COMPILER V8.02 19264LCD 04/01/2009 15:34:12 PAGE 2
56 void BusyR(void)
57 {
58 1 CS1= 1;
59 1 CS2= 1;
60 1 CS3= 0;
61 1 wtcom();
62 1 }
63
64 void wtcom(void)
65 {
66 1 RS = 0; //指令
67 1 RW = 1;
68 1 P2 = 0xFF; //輸出0xff以便讀取正確
69 1 E = 1;
70 1 _nop_();
71 1 while(P2 & 0x80); //Status Read Bit7 = BUSY
72 1 E = 0;
73 1 _nop_();
74 1 }
75
76 /********************************************************/
77 /*根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個(gè)操作單元位置 */
78 /********************************************************/
79 void Locatexy(void)
80 {
81 1 unsigned char x,y;
82 1 switch (Col&0xc0) /* col.and.0xC0 */
83 1 { /*條件分支執(zhí)行 */
84 2 case 0: {BusyL();break;}/*左區(qū) */
85 2 case 0x40: {BusyM();break;}/*中區(qū) */
86 2 case 0x80: {BusyR();break;}/*右區(qū) */
87 2 }
88 1 x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
89 1 y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
90 1 wtcom(); /* waitting for enable */
91 1 RS = 0; //指令
92 1 RW = 0; //寫
93 1 P2 = y; //設(shè)置頁(yè)面地址
94 1 E = 1;
95 1 _nop_();
96 1 E = 0;
97 1 _nop_();
98 1 wtcom(); /* waitting for enable */
99 1 RS = 0;
100 1 RW = 0;
101 1 P2 = x; //設(shè)置列地址
102 1 E = 1;
103 1 _nop_();
104 1 E = 0;
105 1 _nop_();
106 1 }
107
108 /***************************/
109 /*寫指令 */
110 /***************************/
111 void WriteCommandL( unsigned char CommandByte )
112 {
113 1 BusyL();
114 1 P2 = CommandByte;
115 1 RS = 0; //指令
116 1 RW = 0;
117 1 E = 1;
C51 COMPILER V8.02 19264LCD 04/01/2009 15:34:12 PAGE 3
118 1 _nop_();
119 1 E = 0;
120 1 _nop_();
121 1 }
122
123 void WriteCommandM( unsigned char CommandByte )
124 {
125 1 BusyM();
126 1 P2 = CommandByte;
127 1 RS = 0; //指令
128 1 RW = 0;
129 1 E = 1;
130 1 _nop_();
131 1 E = 0;
132 1 _nop_();
133 1 }
134
135 void WriteCommandR( unsigned char CommandByte )
136 {
137 1 BusyR();
138 1 P2 = CommandByte;
139 1 RS = 0; //指令
140 1 RW = 0;
141 1 E = 1;
142 1 _nop_();
143 1 E = 0;
144 1 _nop_();
145 1 }
146
147 /***************************/
148 /*讀數(shù)據(jù) */
149 /***************************/
150 unsigned char ReadData( void )
151 {
152 1 unsigned char DataByte;
153 1 Locatexy(); /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */
154 1 RS = 1; /*數(shù)據(jù)輸出*/
155 1 RW = 1; /*讀入 */
156 1 P2 = 0xFF; //輸出0xff以便讀取正確
157 1 E = 1; /*讀入到LCM*/
158 1 _nop_();
159 1 DataByte = P2; /*數(shù)據(jù)讀出到數(shù)據(jù)口P2 */
160 1 E = 0;
161 1 _nop_();
162 1 return DataByte;
163 1 }
164
165 /***************************/
166 /*寫數(shù)據(jù) */
167 /***************************/
168 void WriteData( unsigned char DataByte )
169 {
170 1 Locatexy(); /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */
171 1 RS = 1; /*數(shù)據(jù)輸出*/
172 1 RW = 0; /*寫輸出 */
173 1 P2 = DataByte; /*數(shù)據(jù)輸出到數(shù)據(jù)口 */
174 1 E = 1; /*寫入到LCM*/
175 1 _nop_();
176 1 E = 0;
177 1 _nop_();
178 1 }
179
C51 COMPILER V8.02 19264LCD 04/01/2009 15:34:12 PAGE 4
180 void LcmClear( void )
181 {
182 1 Page = 0;
183 1 Col = 0;
184 1 for(Page=0;Page<8;Page++)
185 1 for(Col=0;Col<192;Col++)
186 1 WriteData(0);
187 1 }
188
189 void LcmInit( void )
190 {
191 1 WriteCommandL(0x3f); //開顯示
192 1 WriteCommandM(0x3f);
193 1 WriteCommandR(0x3f);
194 1
195 1 WriteCommandL(0xc0); //設(shè)置起始地址=0
196 1 WriteCommandM(0xc0);
197 1 WriteCommandR(0xc0);
198 1
199 1 WriteCommandL(0x3f); //開顯示
200 1 WriteCommandM(0x3f);
201 1 WriteCommandR(0x3f);
202 1
203 1 LcmClear();
204 1 Col = 0;
205 1 Page= 0;
206 1 Locatexy();
207 1 }
208 /*
209 void LcmPutDots( unsigned char DotByte )
210 {
211 Page = 0;
212 Col = 0;
213 for(Page=0;Page<8;Page++)
214 {
215 for(Col=0;Col<192;Col++)
216 {
217 WriteData( DotByte );
218 DotByte = ~DotByte;
219 }
220 }
221 } */
222
223 void LcmPutBMP( unsigned char *puts )
224 {
225 1 unsigned int X=0;
226 1 Page = 0;
227 1 Col = 0;
228 1 for(Page=0;Page<8;Page++)
229 1 {
230 2 for(Col=0;Col<192;Col++)
231 2 {
232 3 WriteData( puts[X] );
233 3 X++;
234 3 }
235 2 }
236 1 }
237
238 void LcmReverseBMP( void )
239 {
240 1 unsigned char temp;
241 1 Page = 0;
C51 COMPILER V8.02 19264LCD 04/01/2009 15:34:12 PAGE 5
242 1 Col = 0;
243 1 for(Page=0;Page<8;Page++)
244 1 {
245 2 for(Col=0;Col<192;Col++)
246 2 {
247 3 temp = ReadData(); //空讀一次
248 3 temp = ReadData();
249 3 temp = ~temp;
250 3 WriteData(temp);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -