📄 sg12864a.lst
字号:
158 1 uint i;
159 1 while(ms--){
160 2 for(i=0;i<125;i++);
161 2 }
162 1 }
163 //检查LCD忙状态
164 void LcdBusy(){
165 1 DI=0;
166 1 RW=1;
167 1 E=1;
168 1 _nop_();
169 1 while(Busy);
170 1 E=0;
171 1 }
172 //给LCD写命令
173 void WriteCommand(uchar Command){
174 1 LcdBusy();
175 1 DI=0;
176 1 RW=0;
177 1 P0=Command;
178 1 E=1;
179 1 _nop_();
C51 COMPILER V7.20 SG12864A 03/15/2007 15:07:40 PAGE 4
180 1 E=0;
181 1 }
182 //给LCD写数据
183 void WriteData(uchar Data){
184 1 LcdBusy();
185 1 DI=1;
186 1 RW=0;
187 1 P0=Data;
188 1 E=1;
189 1 _nop_();
190 1 E=0;
191 1 }
192 //LCD清屏
193 void LcdClear(){
194 1 uchar i,j,Y=0;
195 1 CSL=1;
196 1 CSR=1;
197 1 for(j=0;j<8;j++){
198 2 WriteCommand(Y|0xB8);
199 2 WriteCommand(0x40);
200 2 for(i=0;i<64;i++) WriteData(0x00);
201 2 Y++;
202 2 }
203 1 }
204 //LCD初始化
205 void LcdInit(){
206 1 RST=0;
207 1 _nop_();_nop_();_nop_();
208 1 RST=1;
209 1 CSL=1;
210 1 CSR=1;
211 1 WriteCommand(0x3F);//开显示
212 1 Delay(1);
213 1 LcdClear();
214 1 }
215 //显示一幅图像
216 void Pic(uchar *PicCode){
217 1 uchar i,j,Y=0;
218 1 for(j=0;j<8;j++){
219 2 //左半屏写64个数据
220 2 CSL=1;
221 2 CSR=1;
222 2 WriteCommand(Y|0xB8);
223 2 WriteCommand(0x40);
224 2 for(i=0;i<64;i++) WriteData(*PicCode++);
225 2 //右半屏写64个数据
226 2 CSL=0;
227 2 CSR=1;
228 2 WriteCommand(Y|0xB8);
229 2 WriteCommand(0x40);
230 2 for(i=0;i<64;i++) WriteData(*PicCode++);
231 2 Y++;
232 2 }
233 1 }
234 //显示汉字
235 void Zh(uchar X,uchar Y,uchar Start,uchar Num){
236 1 uchar i;
237 1 uchar j;
238 1 for(j=0;j<Num;j++){
239 2 for(i=0;i<16;i++){
240 3 if(X>128){
241 4 Y+=2;
C51 COMPILER V7.20 SG12864A 03/15/2007 15:07:40 PAGE 5
242 4 X=1;
243 4 }
244 3 if(X>64){
245 4 CSL=0;
246 4 CSR=1;
247 4 }else{
248 4 CSL=1;
249 4 CSR=0;
250 4 }
251 3 WriteCommand((Y-1)*2|0xB8);
252 3 WriteCommand((X-1)|0x40);
253 3 WriteData(ZhCode[(Start+j)*32+i]);
254 3 WriteCommand(((Y-1)*2+1)|0xB8);
255 3 WriteCommand((X-1)|0x40);
256 3 WriteData(ZhCode[(Start+j)*32+i+16]);
257 3 X++;
258 3 }
259 2 }
260 1 }
261 //显示字符
262 void Char(uchar X,uchar Y,uchar Start,uchar Num){
263 1 uchar i;
264 1 uchar j;
265 1 for(j=0;j<Num;j++){
266 2 for(i=0;i<8;i++){
267 3 if(X>128){
268 4 Y+=2;
269 4 X=1;
270 4 }
271 3 if(X>64){
272 4 CSL=0;
273 4 CSR=1;
274 4 }else{
275 4 CSL=1;
276 4 CSR=0;
277 4 }
278 3 WriteCommand((Y-1)*2|0xB8);
279 3 WriteCommand((X-1)|0x40);
280 3 WriteData(CharCode[(Start+j)*16+i]);
281 3 WriteCommand(((Y-1)*2+1)|0xB8);
282 3 WriteCommand((X-1)|0x40);
283 3 WriteData(CharCode[(Start+j)*16+i+8]);
284 3 X++;
285 3 }
286 2 }
287 1 }
288 //主函数
289 main(){
290 1 P0=0x00;
291 1 LcdInit();//Lcd初始化
292 1 while(1){
293 2 Pic(PicCode);
294 2 Delay(2000);
295 2 LcdClear();
296 2 Zh(17,1,0,6);//显示"中国开发板网"
297 2 Char(1,2,0,16);//显示"www.kaifaban.com"
298 2 Zh(1,3,6,2);//显示"业务"
299 2 Char(33,3,16,12);//显示":03516612432"
300 2 Zh(1,4,8,2);//显示"技术"
301 2 Char(33,4,28,12);//显示":13834553012"
302 2 Delay(2000);
303 2 LcdClear();
C51 COMPILER V7.20 SG12864A 03/15/2007 15:07:40 PAGE 6
304 2 }
305 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 648 ----
CONSTANT SIZE = 1984 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
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 + -