📄 lcd6963.lst
字号:
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE LCD6963
OBJECT MODULE PLACED IN lcd6963.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd6963.c DEBUG OBJECTEXTEND
stmt level source
1 #include <absacc.h> //绝对地址访问
2 #include <reg51.h> //
3 #include <intrins.h> //内部函数
4 #define cli() _asm("cli\n")
5 /* disable interrupts*/
6 #define sei() _asm("sei\n")
7 #define nop() _asm("nop\n")
8
9 /*数据类型定义部分*/
10 #define uint unsigned int
11 #define uchar unsigned char
12 #define Uint unsigned int
13 #define Uchar unsigned char
14
15 #define rdcommand XBYTE[0x0ff00]
16 #define rdshuju XBYTE[0x0fe00]
17
18 Uchar data command,shuju;
19 uchar data temp;
20 uint data i,k;
21 uint data shuju1,shuju2;
22 uint data start=0x0800;
23 sbit p1_2=P1^2;
24 sbit ret=P1^0;
25 sbit fs=P1^1;
26
27 uint data ELength=21;
28 uchar code ETable[21]={0x37,0x25,0x2c,0x23,0x2f,0x2d,0x25,0X00,0x34,0x2f,0X00,//"WELCOME TO "
29 0x35,0x33,0x25,0x00,0x34,0x16,0x19,0x16,0x13,0x23};//"USE T6963C"
30
31 uint data CCLength=352;
32 uchar code EXPRT1[22]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa
-0,0xa2,0xa4,0xa6,0xa8,0xaa};
33 uchar code EXPRT2[22]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x91,0x93,0x95,0x97,0x99,0x9b,0x9d,0x9f,0xa
-1,0xa3,0xa5,0xa7,0xa9,0xab};
34 uchar code CCTable[352]={
35 0x01,0x3F,0x24,0x3F,0x26,0x2D,0x34,0x25,0x2F,0x20,0x2F,0x20,0x5F,0x40,0x82,0x01,
36 0x00,0xFE,0x20,0xFC,0x30,0x68,0xA6,0x20,0xF8,0x80,0xFC,0x80,0xFE,0x80,0x80,0x00,//摩
37 0x20,0x20,0x23,0xF8,0x20,0x20,0x28,0x37,0xE0,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
38 0x00,0x3C,0xC0,0x40,0x40,0x40,0x40,0xFE,0x40,0x40,0x40,0x40,0x42,0x42,0x3E,0x00,//托
39 0x00,0x3F,0x22,0x22,0x22,0x3F,0x22,0x03,0x06,0x0C,0x12,0x61,0x00,0x03,0x0C,0xF0,
40 0x00,0xFC,0x44,0x44,0x44,0xFC,0x00,0xFC,0x08,0x08,0x10,0x20,0xC0,0x00,0x00,0x00,//罗
41 0x10,0x10,0x10,0x11,0xFC,0x10,0x15,0x18,0x30,0xD0,0x10,0x10,0x10,0x17,0x50,0x20,
42 0x80,0x60,0x20,0xFE,0x00,0x08,0x0C,0x88,0x88,0x48,0x50,0x50,0x50,0xFE,0x00,0x00,//拉
43 0x08,0x06,0x04,0x3F,0x21,0x3F,0x21,0x21,0x3F,0x21,0x01,0xFF,0x01,0x01,0x01,0x01,
44 0x20,0x30,0x40,0xF8,0x08,0xF8,0x08,0x08,0xF8,0x08,0x00,0xFE,0x00,0x00,0x00,0x00,//单
45 0x00,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x20,0x20,0x40,0x80,
46 0x40,0x40,0x40,0x44,0xFE,0x00,0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,//片
47 0x10,0x10,0x10,0xFE,0x10,0x10,0x38,0x34,0x54,0x50,0x91,0x11,0x12,0x12,0x14,0x10,
48 0x00,0xF8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x08,0x0A,0x0A,0x0A,0x06,0x00,//机
49 0x20,0x13,0x10,0x40,0x47,0x44,0x44,0x47,0x44,0x44,0x47,0x40,0x40,0x40,0x40,0x40,
50 0x00,0xFC,0x04,0x04,0xE4,0x24,0x24,0xE4,0x24,0x24,0xE4,0x04,0x04,0x04,0x14,0x08,//间
51 0x10,0x10,0x13,0xFD,0x10,0x17,0x14,0x18,0x30,0xDF,0x11,0x13,0x10,0x10,0x51,0x26,
52 0x40,0x20,0xFC,0x08,0x90,0xFE,0x00,0x80,0x80,0xFE,0x10,0x10,0xE0,0x50,0x8C,0x04,//接
53 0x10,0x10,0x10,0xFD,0x11,0x10,0x14,0x19,0x30,0xD1,0x10,0x10,0x10,0x10,0x53,0x20,
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 2
54 0x00,0x20,0x10,0xFE,0x04,0x50,0x8C,0x04,0x00,0xFC,0x20,0x20,0x20,0x20,0xFE,0x00,//控
55 0x24,0x34,0x24,0x3F,0x44,0x04,0x7F,0x04,0x3F,0x24,0x24,0x24,0x24,0x27,0x05,0x04,
56 0x04,0x04,0x24,0xA4,0x24,0x24,0xA4,0x24,0xA4,0xA4,0xA4,0xA4,0x84,0x84,0x14,0x08,//制
57 };
58 Uint data ptr[]={10,12,20,35,40,15,18,50};
59 /*延迟1ms*/
60 static void Wait1ms(void) {
61 1 int cnt = 0;
62 1 while (cnt <80) cnt++;
63 1 }
64 /*延迟n ms. */
65 void WaitNms(int n){
66 1 int i;
67 1 for(i=1;i<=n;i++) Wait1ms();
68 1 }
69 /*读状态位0和1 */
70 void ST01Read(void){
71 1 while(1){
72 2 temp=rdcommand;
73 2 if ((temp&0x03)==0x03) break; /*判断指令、数据读写状态是否准备好*/
74 2 }
75 1 }
76 /*读状态位3 */
77 void ST3Read(void){
78 1 P0=0x00;
79 1 while(1){
80 2 temp=rdcommand;
81 2 if ((temp&0x08)==0x08) break; //判断数据自动写状态是否准备好
82 2 }
83 1 }
84 /*写数据*/
85 void WRshuju(Uchar shuju){
86 1 rdshuju=shuju;
87 1 }
88 /*写命令*/
89 void WRCommand(Uchar command){
90 1 rdcommand=command;
91 1 }
92 /*无参数指令*/
93 void WRCommandOne(void){
94 1 ST01Read(); //读状态位0和1
95 1 WRCommand(command); /*写命令*/
96 1 }
97 /*单参数指令*/
98 void WRCommandTwo(void){
99 1 ST01Read();
100 1 WRshuju(shuju2); /*写数据*/
101 1 ST01Read();
102 1 WRCommand(command); /*写命令*/
103 1 }
104 /*双参数指令*/
105 void WRCommandMany(void){
106 1 ST01Read();
107 1 WRshuju(shuju1); /*写数据*/
108 1 ST01Read();
109 1 WRshuju(shuju2); /*写数据*/
110 1 ST01Read();
111 1 WRCommand(command); /*写命令*/
112 1 }
113 /*初始化T6963 LCD 显示.*/
114 void Init_LCD_Graphic(void){
115 1 /*设置文本显示首地址*/
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 3
116 1 shuju1=0x00;
117 1 shuju2=0x00;
118 1 command=0x40;
119 1 WRCommandMany();
120 1
121 1 /*设置文本显示区宽度*/
122 1 shuju1=0x28; /*40字节*/
123 1 shuju2=0x00;
124 1 command=0x41;
125 1 WRCommandMany();
126 1
127 1 /*设置图形显示区首地址*/
128 1 shuju1=0x00;
129 1 shuju2=0x08; /*首地址0x0800*/
130 1 command=0x42;
131 1 WRCommandMany();
132 1
133 1 /*设置图形显示区宽度*/
134 1 shuju1=0x28; /*40字节*/
135 1 shuju2=0x00;
136 1 command=0x43;
137 1 WRCommandMany();
138 1
139 1 /*设置显示方式*/
140 1 command=0x80; /*启用内部字符发生器,显示方式是文本与图形逻辑或*/
141 1 WRCommandOne();
142 1
143 1 /*设置显示状态*/
144 1 command=0x9f; /*启用光标闪烁、光标显示、文本显示、图形显示*/
145 1 WRCommandOne();
146 1
147 1 }
148 /*清显示RAM*/
149 void ClrGraphic(void){
150 1 /*设置显示地址*/
151 1 shuju1=0x00; /*低字节*/
152 1 shuju2=0x00; /*高字节*/
153 1 command=0x24;
154 1 WRCommandMany();
155 1
156 1 /*进入自动写方式*/
157 1 command=0xb0;
158 1 WRCommandOne();
159 1 /*清8KRAM*/
160 1 shuju1=0x00;
161 1 for(i=0;i<0x2000;i++){
162 2 ST3Read();
163 2 WRshuju(shuju1);
164 2 }
165 1 /*退出自动写方式*/
166 1 command=0xb2;
167 1 WRCommandOne();
168 1 }
169 void TextDisplay(void){
170 1 /*设置显示地址*/
171 1 shuju1=84; //在第3行第4列显示文本字符
172 1 shuju2=0x00;
173 1 command=0x24;
174 1 WRCommandMany();
175 1 /*进入自动写方式*/
176 1 command=0xb0;
177 1 WRCommandOne();
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 4
178 1 /*“WELCOME”*/
179 1 for (k=0;k<ELength;k++){
180 2 ST3Read();
181 2 shuju1=ETable[k];
182 2 WRshuju(shuju1);
183 2 }
184 1 /*退出自动写方式*/
185 1 command=0xb2;
186 1 WRCommandOne();
187 1 }
188 /*建立CGRAM*/
189 void SETCGRAM(void){
190 1 /*设置CGRAM偏移地址*/
191 1 shuju1=0x03; /*首地址为0x1c00*/
192 1 shuju2=0x00;
193 1 command=0x22;
194 1 WRCommandMany();
195 1
196 1 /*设置显示地址*/
197 1 shuju1=0x00;
198 1 shuju2=0x1c; /*0x1c00*/
199 1 command=0x24;
200 1 WRCommandMany();
201 1
202 1 /*进入自动写方式*/
203 1 command=0xb0;
204 1 WRCommandOne();
205 1
206 1 /*写“摩托罗拉单片机间接控制”*/
207 1 for (k=0;k<CCLength;k++){
208 2 ST3Read();
209 2 shuju1=CCTable[k];
210 2 WRshuju(shuju1);
211 2 }
212 1
213 1 /*退出自动写方式*/
214 1 command=0xb2;
215 1 WRCommandOne();
216 1 }
217 /*文本方式下显示汉字*/
218 void CCDisplay(Uchar row,Uchar col){
219 1
220 1 Uint cursor,tempaddress;
221 1 SETCGRAM();
222 1 cursor=row*40+col;
223 1 tempaddress=cursor;
224 1 /*设置显示地址*/
225 1 shuju1=tempaddress&0x00ff;
226 1 shuju2=cursor&0xff00;
227 1 command=0x24;
228 1 WRCommandMany();
229 1
230 1 command=0xb0; /*进入自动写方式*/
231 1 WRCommandOne();
232 1 for (k=0;k<22;k++){
233 2 ST3Read();
234 2 shuju1=EXPRT1[k];
235 2 WRshuju(shuju1);
236 2 }
237 1 command=0xb2; /*退出自动写方式*/
238 1 WRCommandOne();
239 1
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 5
240 1 row+=1;
241 1 cursor=row*40+col;
242 1 tempaddress=cursor;
243 1 /*设置显示地址*/
244 1 shuju1=tempaddress&0x00ff;
245 1 shuju2=cursor&0xff00;
246 1 command=0x24;
247 1 WRCommandMany();
248 1
249 1 /*进入自动写方式*/
250 1 command=0xb0;
251 1 WRCommandOne();
252 1 for (k=0;k<22;k++){
253 2 ST3Read();
254 2 shuju1=EXPRT2[k];
255 2 WRshuju(shuju1);
256 2 }
257 1 /*退出自动写方式*/
258 1 command=0xb2;
259 1 WRCommandOne();
260 1 }
261 /*在图形方式下显示汉字*/
262 void GCDisplay(Uint row,Uint col){ //row(0~127)col(0~29)
263 1 Uint cursor,tempaddress;
264 1 Uint temprow,tempcol;
265 1
266 1 for(i=0;i<11;i++) /*11个汉字*/
267 1 {
268 2 tempcol=col+i*2;
269 2 for(k=0;k<16;k++)
270 2 {
271 3 temprow=row+k;
272 3 cursor=0x0800+temprow*40+tempcol;
273 3 tempaddress=cursor;
274 3 shuju1=tempaddress&0x00ff; /*设置显示地址*/
275 3 shuju2=(cursor&0xff00)>>8;
276 3 command=0x24;
277 3 WRCommandMany();
278 3
279 3 shuju2=CCTable[i*32+k];
280 3 command=0xc0; /*设置一次写数据,地址加一*/
281 3 WRCommandTwo();
282 3
283 3 shuju2=CCTable[i*32+k+16];
284 3 WRCommandTwo();
285 3 }
286 2 WaitNms(50);
287 2 }
288 1 WaitNms(50);
289 1 }
290
291 /*滚动显示-向右*/
292 void RightScroll(void)
293 {
294 1 Uint Num,cursor0,tempaddr;
295 1 while(1){
296 2 for(Num=0;Num<30;Num++) {
297 3
298 3 cursor0=start-Num;/*修改文本或图形显示区首地址*/
299 3 tempaddr=cursor0;
300 3 shuju1=tempaddr&0x00ff;
301 3 shuju2=cursor0&0xff00;
C51 COMPILER V6.20c LCD6963 09/06/2005 16:44:34 PAGE 6
302 3 command=0x40;
303 3 WRCommandMany();
304 3 GCDisplay(1,3);
305 3 TextDisplay(); //""
306 3 CCDisplay(1,3);
307 3 WaitNms(500);
308 3 }
309 2 }
310 1 }
311
312 /*滚动显示—向下*/
313 void DownScroll(void)
314 {
315 1 Uint Num,cursor0,tempaddr;
316 1 while(1){
317 2 for(Num=0;Num<16;Num++){
318 3
319 3 cursor0=start-Num*40; /*设置文本显示首地址*/
320 3 tempaddr=cursor0;
321 3
322 3 shuju1=tempaddr&0x00ff;
323 3 shuju2=cursor0&0xff00;
324 3 command=0x40;
325 3 WRCommandMany();
326 3
327 3 TextDisplay(); //""
328 3 WaitNms(500);
329 3 }
330 2 }
331 1 }
332 main()
333 { p1_2=1;
334 1 fs=0; //FS=0,8×8字体
335 1 ret=0;
336 1 WaitNms(1000);
337 1 ret=1;
338 1 p1_2=0;
339 1 Init_LCD_Graphic(); //初始化屏幕
340 1
341 1 ClrGraphic(); //清屏
342 1 // TextDisplay(); //文本显示
343 1 // GCDisplay(40,4);
344 1 for(;;);
345 1
346 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 950 ----
CONSTANT SIZE = 417 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 22
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 + -