📄 lcd12864.lst
字号:
C51 COMPILER V7.50 LCD12864 11/16/2007 13:50:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.obj
COMPILER INVOKED BY: E:\keil\C51\BIN\C51.EXE 程序\lcd12864.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lcd12864.lst) OBJECT(lcd1
-2864.obj)
line level source
1 #include "lcd12864.h"
2
3
4 void delay( int x ) //延时X乘10 个2ns
5 {
6 1 int i,j;
7 1 for(i = 0;i < x;i++)
8 1 {
9 2 for(j = 0;j < 10;j++);
10 2 }
11 1 }
12
13 /***********************************************************************
14 * * * * * * * * * 液晶写左半屏指令 * * * * * * * * * *
15 ***********************************************************************/
16 void write_l_cmd(unsigned char cmd)
17 {
18 1 CSA = 0;//关闭右半屏
19 1 CSB = 1;//选中左半屏
20 1 DI = 0; //DB7~DB0送指令
21 1 RW = 1; //指令在E下降沿到来时且RW下降沿有效时指令送入IR(指令寄存器)
22 1 do{
23 2 dataline = 0xff;
24 2 E = 1;
25 2 }while( BUSY ); //等待液晶不忙
26 1 E = 0; //E下降沿到来(时序要求E下降沿先到)
27 1 RW = 0; //RW下降沿到来
28 1 dataline = cmd; //指令送入IR(指令寄存器)
29 1 E = 1; //此时RW=“H”,当E下降沿来时锁存DB7~DB0
30 1 delay( 5 ); //E高电平450ns要求
31 1 E = 0; //E下降沿到来
32 1 }
33
34 /***********************************************************************
35 * * * * * * * * * 液晶写右半屏指令 * * * * * * * * * *
36 ***********************************************************************/
37 void write_r_cmd(unsigned char cmd)
38 {
39 1 CSA = 1;//选中右半屏
40 1 CSB = 0;//关闭左半屏
41 1 DI = 0; //DB7~DB0送指令
42 1 RW = 1; //指令在E下降沿到来时且RW下降沿有效时指令送入IR(指令寄存器)
43 1 do{
44 2 dataline = 0xff;
45 2 E = 1;
46 2 }while( BUSY );//等待液晶不忙
47 1 E = 0; //E下降沿到来(时序要求E下降沿先到)
48 1 RW = 0; //RW下降沿到来
49 1 dataline = cmd; //指令送入IR(指令寄存器)
50 1 E = 1; //此时RW=“H”,当E下降沿来时锁存DB7~DB0
51 1 delay( 5 ); //E高电平450ns要求
52 1 E = 0; //E下降沿到来
53 1 }
54
C51 COMPILER V7.50 LCD12864 11/16/2007 13:50:57 PAGE 2
55 /***********************************************************************
56 * * * * * * * * * 液晶写左半屏数据 * * * * * * * * * *
57 ***********************************************************************/
58 void write_l_dat( unsigned char dat )
59 {
60 1 CSA = 0;//关闭右半屏
61 1 CSB = 1;//选中左半屏
62 1 DI = 0; //DI="L",DB7~DB0为指令数据
63 1 RW = 1; //E="H",RW="H",数据被读到DB7~DB0
64 1 do{
65 2 dataline = 0xff;
66 2 E=1;
67 2 }while(BUSY);//等待液晶不忙
68 1 E = 0; //先置E为低,为后面时序做准备
69 1 DI = 1; //DI="H",DB7~DB0为显示数据
70 1 RW = 0;
71 1 dataline = dat; //RW="L",E="H"--"L"数据送入DR(数据寄存器)
72 1 E = 1;
73 1 delay( 5 ); //E高电平450ns要求
74 1 E = 0;
75 1 }
76
77 /***********************************************************************
78 * * * * * * * * * 液晶写右半屏数据 * * * * * * * * * *
79 ***********************************************************************/
80 void write_r_dat( unsigned char dat )
81 {
82 1 CSA = 1;//选中右半屏
83 1 CSB = 0;//关闭左半屏
84 1 DI = 0;
85 1 RW = 1;
86 1 do{
87 2 dataline = 0xff;
88 2 E = 1;
89 2
90 2 }while( BUSY );
91 1 E = 0;
92 1 DI = 1;
93 1 RW = 0;
94 1 dataline = dat;
95 1 E = 1;
96 1 delay( 5 );
97 1 E = 0;
98 1 }
99 /***********************************************************************
100 * * * * * * * * * 液晶写全屏数据 * * * * * * * * * *
101 ***********************************************************************/
102 void write_dat( unsigned char xpos,unsigned char ypos,unsigned char lcddata )
103 { //定义xpos:数据显示行起始地址;ypos:数据显示列起始地址;lcddata:显示数据
104 1 if( ( xpos & 0x40 ) == 0 ) //0x40=64,它是左半屏的结束地址
105 1 {
106 2 write_l_cmd( 0xb8 | ypos );
107 2 write_l_cmd( 0x40 | xpos );
108 2 write_l_dat( lcddata );
109 2 }
110 1 else
111 1 {
112 2 write_r_cmd( 0xb8 | ypos );
113 2 write_r_cmd( 0x40 | xpos );
114 2 write_r_dat( lcddata );
115 2 }
116 1 }
C51 COMPILER V7.50 LCD12864 11/16/2007 13:50:57 PAGE 3
117 /***********************************************************************
118 * * * * * * * * * 液晶汉字显示控制 * * * * * * * * * *
119 ***********************************************************************/
120 void hz_disp( unsigned char x,unsigned char y,unsigned char *hz)
121 {
122 1 unsigned char i;
123 1 for( i = 0;i < 16;i++ ) //定义一个字符显示长宽为16x16
124 1 {
125 2 write_dat( x+i,y,hz[i] ); //程序按照行列显示,循环16次共16列
126 2 write_dat( x+i,y+1,hz[16+i] );
127 2 }
128 1 }
129
130
131 /***********************************************************************
132 * * * * * * * * * 液晶显示12864图片 * * * * * * * * * *
133 ***********************************************************************/
134 void disp_img(unsigned char code *img)
135 {
136 1 unsigned char j,k,page = 0;
137 1 for( k = 0; k < 8; k++ ) //注,显示图片时,一页为整个屏的一行
138 1 {
139 2 page = k;
140 2 page |= 0xb8;
141 2 write_l_cmd( page );
142 2 write_l_cmd( 0x40 );
143 2 for( j = 0; j < 64; j++ )
144 2 write_l_dat(img[k*128+j]);
145 2 write_r_cmd( page );
146 2 write_r_cmd( 0x40 );
147 2 for(j=64;j<128;j++)
148 2 write_r_dat(img[k*128+j]);
149 2 }
150 1 }
151
152 /***********************************************************************
153 * * * * * * * * * 液晶清屏控制 * * * * * * * * * *
154 ***********************************************************************/
155 void lcd_clr( void )
156 {
157 1 unsigned char i,n,page; //液晶8行为一页,模块共64行8页
158 1 for( i = 0;i < 8;i++ )
159 1 {
160 2 page = i;
161 2 page |= 0xb8; //页地址是"1 0 1 1 1 A2 A1 A0" A2~A0表示0~7页
162 2 write_l_cmd( page );
163 2 write_l_cmd( 0x40 );
164 2 for( n = 0;n < 64;n++ ) //从第0页开始,对左半屏地址0X00~0X40,64个地址置0
165 2 {
166 3 write_l_dat( 0 );
167 3 }
168 2 write_r_cmd( page );
169 2 write_r_cmd( 0x40 );
170 2 for( n = 0;n < 64;n++ )
171 2 {
172 3 write_r_dat( 0 ); //从第0页开始,对右半屏地址0X00~0X40,64个地址置0
173 3 } }
174 1 }
175 /***********************************************************************
176 * * * * * * * * * 液晶初始化控制 * * * * * * * * * *
177 ***********************************************************************/
178 void lcd_init( void )
C51 COMPILER V7.50 LCD12864 11/16/2007 13:50:57 PAGE 4
179 {
180 1 write_l_cmd( 0x3e );//显示开关控制(DISPLAY ON/OFF)代码地址0 0 1 1 1 1 1 D ,D=1开显示;D=0关显示
181 1 write_r_cmd( 0x3e );
182 1 write_l_cmd( 0xc0 );//起始行设置(DISPLAY START LINE)代码地址1 1 A5 A4 A3 A2 A1 A0
183 1 write_r_cmd( 0xc0 );
184 1 write_l_cmd( 0x3f );//开显示
185 1 write_r_cmd( 0x3f );
186 1 lcd_clr( );
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 491 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -