📄 lcd_driver.lst
字号:
207 1 */
208 1 }
209
210 //一字节参数指令写入函数
211 void oneparameter(uchar onep1,uchar comd1)
212 {
213 1 writedata(onep1);
214 1 writecode(comd1);
215 1 }
216
217 //两字节参数指令写入函数
218 void twoparameter(uchar twop1,uchar twop2,uchar comd2)
219 {
220 1 writedata(twop1);
221 1 writedata(twop2);
222 1 writecode(comd2);
223 1 }
224
225
226 /***********************************************************
227 液晶初始化,清屏
228 ***********************************************************/
229
230 //内置T6963C控制器液晶初始化函数
231 void lcd_init(void)
232 {
233 1 twoparameter(0x00,0x00,0x40); //文本显示区域首地址0x0000
234 1 twoparameter(0x20,0x00,0x41); //文本显示区域宽度32字节
235 1 twoparameter(0x00,0x08,0x42); //图形显示区域首地址0x0800
236 1 twoparameter(0x20,0x00,0x43); //图形显示区域宽度32字节
237 1 writecode(0xa7); //光标形状
238 1 writecode(0x80); //显示方式设置(使用内部CGROM,逻辑或合成)
239 1 writecode(0x9c); //显示开关(开文本和图形显示方式,禁止光标显示和闪烁)
240 1 }
241
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 5
242
243 //清除屏幕(清所有8K存储空间)
244 void lcd_clear(void)
245 {
246 1 uint cl_count;
247 1 twoparameter(0x00,0x00,0x24); //设置显示存储器首地址
248 1 writecode(0xb0); //设置自动写状态
249 1 for(cl_count=8192;cl_count>0;cl_count--)
250 1 writeauto(0x00);
251 1 writecode(0xb2); //关闭自动写状态
252 1 }
253
254
255 /********************************************************
256 西文字符,汉字,点阵显示函数
257 ********************************************************/
258 //西文字符写入函数
259 //x_asc:0~19; y_asc:0~15
260 void writeasc(uchar x_asc,uchar y_asc,uchar code_asc)
261 {
262 1 uint address;
263 1 address=y_asc*32+x_asc;
264 1 twoparameter((uchar)(address),(uchar)(address>>8),0x24); //设置显示存储器地址
265 1 oneparameter(code_asc,0xc4); //装入字符代码,写入数据,地址不变
266 1 }
267
268
269 //汉字写入函数
270 //x_hz:0~19; y_hz:0~127
271 void writehz(uchar x_hz,uchar y_hz,uchar code_hz)
272 {
273 1 uchar i_hz;
274 1 uint address,addr_hz;
275 1 address=y_hz*32+x_hz+0x0800; //计算显示存储器地址
276 1 addr_hz=code_hz*32; //计算汉字字模地址(cctab的下标)
277 1 for(i_hz=0;i_hz<16;i_hz++) //计数值16
278 1 {
279 2 twoparameter((uchar)(address),(uchar)(address>>8),0x24); //设置显示存储器地址
280 2 oneparameter(cctab[addr_hz++],0xc0); //写入汉字字模左部
281 2 oneparameter((cctab[addr_hz++]),0xc0);//写入汉字字模右部
282 2 address+=32; //修改显示存储器地址,显示下一列(共16列)
283 2 }
284 1 }
285 //写数字
286 void writenum(uchar x_asc,uchar y_asc,uchar code_asc)
287 {
288 1 code_asc+=0x10;
289 1 writeasc(x_asc,y_asc,code_asc);
290 1 }
291 //写字母
292 void writeabc(uchar x_asc,uchar y_asc,uchar code_asc)
293 {
294 1
295 1 code_asc-=0x20;
296 1 writeasc(x_asc,y_asc,code_asc);
297 1 }
298
299
300
301 /*********************主程序*******************/
302 void main(void)
303 {
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 6
304 1
305 1 WDTCN = 0xDE; //禁止看门狗
306 1 WDTCN = 0xAD;
307 1
308 1 SYSCLK_Init(); //初始化时钟
309 1 PORT_Init(); //初始化端口
310 1 CE=0;
311 1
312 1 lcd_init();
313 1 lcd_clear();
314 1
315 1 // writeasc(2,2,'2');
316 1 while(1)
317 1 {
318 2 // writeasc(0,0,'0');
319 2
320 2
321 2 writehz(1,30,0);
322 2 writehz(1,46,1);
323 2 writehz(1,62,2);
324 2 writehz(1,78,3);
325 2 // writenum(1,10,9);
326 2
327 2 writenum(1,1,1);
328 2 writenum(2,1,2);
329 2
330 2 writenum(3,1,3);
331 2
332 2 writenum(4,1,4);
333 2
334 2 writenum(5,1,5);
335 2
336 2 writenum(6,1,6);
337 2
338 2 writenum(7,1,7);
339 2
340 2 writenum(8,1,8);
341 2
342 2 writenum(9,1,9);
343 2
344 2 writeabc(0,2,'a');
345 2 writeabc(1,2,'b');
346 2 writeabc(2,2,'c');
347 2 writeabc(3,2,'d');
348 2 writeabc(4,2,'e');
349 2 writeabc(5,2,'f');
350 2 writeabc(6,2,'g');
351 2 writeabc(7,2,'h');
352 2 writeabc(8,2,'i');
353 2 writeabc(9,2,'j');
354 2 writeabc(10,2,'k');
355 2 writeabc(11,2,'l');
356 2 writeabc(12,2,'m');
357 2 writeabc(13,2,'n');
358 2 writeabc(14,2,'p');
359 2 writeabc(15,2,'q');
360 2
361 2 /* writeasc(13,0,10);
362 2 writeasc(13,1,10);
363 2 writeasc(13,2,10);
364 2 writeasc(13,3,10);
365 2 writeasc(13,4,10);
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 7
366 2 writeasc(13,5,10);
367 2 writeasc(13,6,10);
368 2 writeasc(13,7,10);
369 2 writeasc(13,8,10);
370 2 writeasc(13,9,10);
371 2 writeasc(13,10,10);
372 2 writeasc(13,11,10);
373 2 writeasc(13,12,10);
374 2 writeasc(13,13,10);
375 2 writeasc(13,14,10);
376 2 writeasc(13,15,11);
377 2 // writeasc(13,16,10);
378 2 // writeasc(13,0,10);
379 2 writeasc(0,0,0x10);
380 2 writeasc(1,0,0x10);
381 2 writeasc(2,0,0x10);
382 2 writeasc(3,0,0x10);
383 2 writeasc(4,0,0x10);
384 2 writeasc(5,0,0x10);
385 2 writeasc(6,0,0x10);
386 2 writeasc(7,0,0x10);
387 2 writeasc(8,0,0x10);
388 2 writeasc(9,0,0x10);
389 2 writeasc(10,0,0x10);
390 2 writeasc(11,0,0x10);
391 2 writeasc(12,0,0x10);
392 2 writeasc(13,0,0x10);
393 2 writeasc(14,0,0x10);
394 2 writeasc(15,0,0x10);
395 2 writeasc(16,0,0x10);
396 2 writeasc(17,0,0x10);
397 2 writeasc(18,0,0x10);
398 2 writeasc(19,0,0x11);
399 2 */
400 2
401 2
402 2 }
403 1
404 1 }
405
406
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 676 ----
CONSTANT SIZE = 128 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 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 + -