📄 lcd_screen_driver.lst
字号:
C51 COMPILER V7.08 LCD_SCREEN_DRIVER 06/13/2007 16:48:12 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE LCD_SCREEN_DRIVER
OBJECT MODULE PLACED IN lcd_screen_driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_screen_driver.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<w78e58b.h>
2
3
4 sbit employ=P2^0;
5 sbit read_write=P2^7;
6 sbit data_injunction=P2^6;
7 sbit piece_left=P2^5;
8 sbit piece_right=P2^4;
9 void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[]);
10
11
12 /************* write left lcd screen **********************/
13 void write_left_injunction(unsigned char d)
14 {
15 1 signed char x;
16 1 piece_left=1;
17 1 read_write=1; // 1:read,0:write
18 1 data_injunction=0; // 1:data, 0:injunction
19 1 loop1:
20 1 lcd_data=0xff;
21 1 employ=1;
22 1 x=lcd_data;
23 1 employ=0;
24 1 if(x&0x80)
25 1 { goto loop1;}
26 1 read_write=0;
27 1 lcd_data=d;
28 1 employ=1;
29 1 employ=0;
30 1 piece_left=0;
31 1 piece_right=0;
32 1 }
33 /************** write right lcd screen ************************/
34 void write_right_injunction(unsigned char d)
35 {
36 1 signed char x;
37 1 piece_right=1;
38 1 read_write=1; // 1:read,0:write
39 1 data_injunction=0; // 1:data, 0:injunction
40 1 loop2:
41 1 lcd_data=0xff;
42 1 employ=1;
43 1 x=lcd_data;
44 1 employ=0;
45 1 if(x&0x80)
46 1 { goto loop2;}
47 1 read_write=0;
48 1 lcd_data=d;
49 1 employ=1;
50 1 employ=0;
51 1 piece_left=0;
52 1 piece_right=0;
53 1 }
54 /************** send left lcd screen dispaly data **************/
55 void write_left_data(unsigned char d)
C51 COMPILER V7.08 LCD_SCREEN_DRIVER 06/13/2007 16:48:12 PAGE 2
56 {
57 1 signed char x;
58 1 piece_left=1; // employ left lcd screen
59 1 read_write=1; // write data
60 1 data_injunction=0; // send injunction
61 1 loop1:
62 1 lcd_data=0xff;
63 1 employ=1;
64 1 x=lcd_data;
65 1 employ=0;
66 1 if(x&0x80)
67 1 {goto loop1;}
68 1 data_injunction=1;
69 1 read_write=0;
70 1 lcd_data=d;
71 1 employ=1;
72 1 employ=0;
73 1 piece_left=0;
74 1 piece_right=0;
75 1 }
76 /************** send right lcd screen dispaly data **************/
77 void write_right_data(unsigned char d)
78 {
79 1 signed char x;
80 1 piece_right=1; // employ left lcd screen
81 1 read_write=1; // write data
82 1 data_injunction=0; // send injunction
83 1 loop1:
84 1 lcd_data=0xff;
85 1 employ=1;
86 1 x=lcd_data;
87 1 employ=0;
88 1 if(x&0x80)
89 1 {goto loop1;}
90 1 data_injunction=1;
91 1 read_write=0;
92 1 lcd_data=d;
93 1 employ=1;
94 1 employ=0;
95 1 piece_left=0;
96 1 piece_right=0;
97 1 }
98
99 /*************** delay time ***********************************/
100 void delay_time(unsigned int i)
101 {
102 1 unsigned char j;
103 1 for(;i>0;i--)
104 1 { for(j=0;j<100;j++)
105 2 {;}
106 2 }
107 1 }
108 /************ clear_lcd_screen ********************************/
109 void clear_lcd_screen(void)
110 {
111 1
112 1
113 1 unsigned char lcd_page;
114 1 unsigned char i,j;
115 1
116 1 delay_time(0); //must delay time
117 1
C51 COMPILER V7.08 LCD_SCREEN_DRIVER 06/13/2007 16:48:12 PAGE 3
118 1 for(i=0;i<8;i++)
119 1 {
120 2 lcd_page=i|0xb8;
121 2 write_left_injunction(lcd_page);
122 2 write_left_injunction(0x40|i);
123 2 for(j=0;j<64;j++)
124 2 {
125 3
126 3 write_left_data(0x00);
127 3
128 3 }
129 2 }
130 1 for(i=0;i<8;i++)
131 1 {
132 2 lcd_page=i|0xb8;
133 2 write_right_injunction(lcd_page);
134 2 write_right_injunction(0x40);
135 2 for(j=0;j<64;j++)
136 2 {
137 3 write_right_data(0x00);
138 3 }
139 2 }
140 1 }
141
142 /************ initialization led screen ************************/
143 void initialization_led_screen(void)
144 {
145 1 lcd_data=0x00;
146 1 employ=0;
147 1 read_write=0;
148 1 data_injunction=0;
149 1 piece_left=0;
150 1 piece_right=0;
151 1 write_left_injunction(0x3e); // off lcd left screen
152 1 write_right_injunction(0x3e); // off lcd right screen
153 1 write_left_injunction(0xc0); // left part row address select 2^6
154 1 write_right_injunction(0xc0); // right part row address select 2^6
155 1 clear_lcd_screen();
156 1 write_left_injunction(0x3f); // on lcd left screen
157 1 write_right_injunction(0x3f); // on lcd right screen
158 1 }
159 /******************** write a Byte ******************************************************/
160
161 void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[]) // 0:left,1:right
162 {
163 1 unsigned char i,j,q; // x less than or equal to 6
164 1 unsigned char *da; // y less than or equal to 56
165 1 da=d; // x for even
166 1 x|=0xb8; // page address
167 1 y|=0x40;
168 1 if(!piece)
169 1 { // row
170 2 for(i=0;i<2;i++)
171 2 {
172 3 q=0;
173 3 for(j=0;j<8;j++)
174 3 {
175 4 if((y+j)<128)
176 4 {
177 5 write_left_injunction(x+i);
178 5 write_left_injunction(y+j);
179 5 write_left_data(*da);}
C51 COMPILER V7.08 LCD_SCREEN_DRIVER 06/13/2007 16:48:12 PAGE 4
180 4
181 4 if((y+j)>=128)
182 4 {
183 5 write_right_injunction(x+i);
184 5 write_right_injunction(q+64);
185 5 write_right_data(*da);q++;}
186 4 da++;
187 4 }
188 3 }
189 2 }
190 1 else
191 1 {
192 2 for(i=0;i<2;i++)
193 2 {
194 3 write_right_injunction(x+i);
195 3 write_right_injunction(y);
196 3 for(j=0;j<8;j++)
197 3 {
198 4 write_right_data(*da);
199 4 da++;
200 4 }
201 3 }
202 2 }
203 1 }
204 /************** write a word ***********************************************/
205 void write_word(bit piece,unsigned char x,unsigned char y,unsigned char d[])
206 {
207 1 unsigned char *da;
208 1 unsigned char i,j,p;
209 1 unsigned char word[2][16];
210 1 da=d;
211 1 for(i=0;i<2;i++)
212 1 { for(j=0;j<16;j++)
213 2 {
214 3 word[i][j]=*da;
215 3 da++;
216 3 }
217 2 }
218 1 write_byte(piece,x,y,&word[0]);
219 1 p=y+8; if(p>=64)
220 1 {y=p-72;piece=1;p=0;}
221 1 write_byte(piece,x,y+8,&word[1]);
222 1 }
223
224
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 556 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 45
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -