📄 12864.lst
字号:
C51 COMPILER V7.50 12864 12/28/2007 10:53:50 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 12864
OBJECT MODULE PLACED IN 12864.OBJ
COMPILER INVOKED BY: D:\C51\BIN\C51.EXE 12864.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include"12864-pin.h"
3 #include<intrins.h>
4
5
6 /*////////////////////////////////////////////////////////////////////////////*/
7
8 void delay(uint ms)
9 {
10 1 uint i;
11 1 while(ms--)
12 1 {
13 2 for(i=0;i<100;i++);
14 2 }
15 1 }
16
17 /*////////////////////////////////////////////////////////////////////////*/
18 /* 等待,直到12864液晶模块处于就绪状态 */
19
20 void chk_busy(void)
21 {
22 1 /* BF = 1;
23 1 DI = 0;
24 1 RW = 1;
25 1 E = 1; // delay(1);
26 1 // while(BF);
27 1 E = 0;
28 1 */
29 1
30 1 uchar i;
31 1 for(i=0;i<10;i++);
32 1
33 1
34 1 }
35
36
37
38
39
40 /*////////////////////////////////////////////////////////////////////////*/
41 /* 向12864液晶模块传输指令 */
42
43 void send_i(uchar instrution)
44 {
45 1 chk_busy();
46 1 DI = 0;
47 1 RW = 0;
48 1 DB = instrution;
49 1 E = 1;
50 1 #ifdef NOP
_nop_(); // delay(1);
_nop_();
#endif
54 1 E = 0;
55 1 }
C51 COMPILER V7.50 12864 12/28/2007 10:53:50 PAGE 2
56
57 /*////////////////////////////////////////////////////////////////////////*/
58 /* 向12864液晶模块传输数据 */
59
60 void send_d(uchar dt)
61 {
62 1 chk_busy();
63 1 DI = 1;
64 1 RW = 0;
65 1 DB = dt;
66 1 E = 1;
67 1 #ifdef NOP
_nop_(); // delay(1);
_nop_();
#endif
71 1 E = 0;
72 1 }
73
74 /*/////////////////////////////////////////////////////////////////////////*/
75 /* 初始化12864液晶模块 */
76
77 void init_LCD(void)
78 {
79 1 RST = 0;
80 1 delay(200);
81 1 RST = 1;
82 1 #ifdef NOP
_nop_();
#endif
85 1 E = 0;
86 1 CS1 = 1;
87 1 send_i(0x34); //扩充指令;
88 1 send_i(0x30); // 8位数据,基本指令;
89 1
90 1 send_i(0x01); //清除显示,DDRAM 填满20H ;
91 1 delay(20);
92 1 send_i(0x06); // 游标进入点设定;
93 1 // send_i(0x14); // 游标或显示移位控制
94 1 send_i(0x0e); // 显示开关,。
95 1
96 1 }
97 /*////////////////////////////////////////////////////////////////////////*/
98 /* 设置文本输出位置;x取值范围:0~7;y取值范围:0~3 */
99
100 void gotoxy(uchar x, uchar y)
101 {
102 1 switch(y)
103 1 {
104 2 case 0: send_i(0x80+x);break;
105 2 case 1: send_i(0x90+x);break;
106 2 case 2: send_i(0x88+x);break;
107 2 case 3: send_i(0x98+x);break;
108 2 }
109 1 }
110
111
112
113
114 /*////////////////////////////////////////////////////////////////////////*/
115 /* 连续向LCD发送string指向的num个数据 */
116 void LCD_puts(Ucode* string, uchar num)
117 {
C51 COMPILER V7.50 12864 12/28/2007 10:53:50 PAGE 3
118 1 while(num--)
119 1 {
120 2 send_d(*string++);
121 2 }
122 1 }
123
124
125
126 /*////////////////////////////////////////////////////////////////////////*/
127 /* 汉字显示清屏 */
128
129 void clrddram()
130 {
131 1 send_i(0X01);delay(6); //清除显示,DDRAM 填满20H ;
132 1 send_i(0x34); //扩充指令;
133 1 send_i(0X30); // 8位数据,基本指令;
134 1 }
135 /*////////////////////////////////////////////////////////////////////////*/
136 /* 设置图形模式输出位置;x取值范围(byte):0~7,单位为16位/2个字节,共128位;
137 y取值范围(bit):0~63 */
138 void setxy(uchar x, uchar y)
139 {
140 1 send_i(0x34); //扩充指令;
141 1 if(y&0xe0) // y>=32
142 1 {
143 2 send_i(0x80+y-32);
144 2 send_i(0x88+x);
145 2 }
146 1 else // y<32
147 1 {
148 2 send_i(0x80+y); // 设定DDRAM 地址,第一行80H~87H,第二行90H~97H
149 2 send_i(0x80+x);
150 2 }
151 1 send_i(0x30); //基本指令;
152 1
153 1 }
154
155 /*////////////////////////////////////////////////////////////////////////*/
156 /* 显示点阵子程序,以lcd_data填充图形显示空间(GDRAM) */
157 void fill_GD(uchar x,uchar y,uchar l,uchar w,uchar Data)
158 {
159 1 uchar i;
160 1 while(w--)
161 1 {
162 2 send_i(0x34); // setxy()需要工作在扩充指令模式下
163 2 setxy(x, y++); // 设置输出到图形缓冲区的地址
164 2 send_i(0x30); // send_d()需要工作在基本指令模式下
165 2 for( i=l;i--;)
166 2 {
167 3 send_d(Data);
168 3 send_d(Data);
169 3 }
170 2 }
171 1 send_i(0x36); // 扩充指令,图形显示开
172 1 send_i(0x30); // 返回基本指令模式
173 1 }
174
175 /*////////////////////////////////////////////////////////////////////////*/
176 /* x代表要输出的目标行地址,其取值范围是0~ 7,单位是2个字节,即16位 */
177 /* y代表要输出的目标列地址,其取值范围是0~63,单位是1位 */
178 /* l代表图形文件的长度,单位是2个字节,即16位 */
179 /* w代表图形文件的宽度,单位是1位 */
C51 COMPILER V7.50 12864 12/28/2007 10:53:50 PAGE 4
180 void putsBMP(uchar x, uchar y, uchar l, uchar w,uchar code *p) //反白;
181 {
182 1 uchar i;
183 1
184 1 while(w--)
185 1 {
186 2 send_i(0x34); // setxy()需要工作在扩充指令模式下
187 2 setxy(x, y++); // 设置输出到图形缓冲区的地址
188 2 send_i(0x30); // send_d()需要工作在基本指令模式下
189 2 for( i=l;i--;)
190 2 {
191 3 send_d(*p++);
192 3 send_d(*p++);
193 3 }
194 2 }
195 1 send_i(0x36); // 绘图开;
196 1 send_i(0x30); // 返回基本指令模式
197 1 }
198 /*////////////////////////////////////////////////////////////////////////*/
199 /* 清空点阵区 */
200 void clrgdram()
201 {
202 1 fill_GD(0,0,8,64,0);
203 1 }
204
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 392 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
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 + -