📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 06/03/2008 22:12:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg52.h"
2 #include"intrins.h"
3 #include"ziku.h"
4
5 #include"def.h"
6
7 sbit rs = P3^4;
8 sbit rw = P3^5;
9 sbit ep = P3^6;
10
11 uchar code AD_TABLE[]={
12 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
13 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
14 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
15 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置
16 };
17
18 uchar value[];
19
20 void delay(uint ms)
21 {
22 1 uchar i;
23 1 while(ms--)
24 1 {
25 2 for(i=0;i<250;i++)
26 2 {
27 3 _nop_();
28 3 _nop_();
29 3 _nop_();
30 3 _nop_();
31 3 }
32 2 }
33 1 }
34
35 bit lcd_busy()
36 {
37 1 bit result;
38 1 rs=0;
39 1 rw=1;
40 1 ep=1;
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 _nop_();
45 1 result=(bit)(P1&0x80);
46 1 ep=0;
47 1 return result;
48 1 }
49
50 void wcmd(uchar cmd)
51 {
52 1 while(lcd_busy());
53 1 rs=0;
54 1 rw=0;
55 1 ep=0;
C51 COMPILER V8.02 LCD 06/03/2008 22:12:57 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 P1=cmd;
59 1 _nop_();
60 1 _nop_();
61 1 _nop_();
62 1 _nop_();
63 1 ep=1;
64 1 _nop_();
65 1 _nop_();
66 1 _nop_();
67 1 _nop_();
68 1 ep=0;
69 1 }
70
71 void wdat(uchar dat)
72 {
73 1 while(lcd_busy());
74 1 rs=1;
75 1 rw=0;
76 1 ep=0;
77 1 P1=dat;
78 1 _nop_();
79 1 _nop_();
80 1 _nop_();
81 1 _nop_();
82 1 ep=1;
83 1 _nop_();
84 1 _nop_();
85 1 _nop_();
86 1 _nop_();
87 1 ep=0;
88 1 }
89
90 void lcd_init()
91 {
92 1 delay(10);
93 1 wcmd(0x30); //功能设置,一次送8位数据,基本指令集
94 1 wcmd(0x0C); //0000,1100 整体显示,游标off,游标位置off
95 1 wcmd(0x01); //0000,0001 清DDRAM
96 1 wcmd(0x02); //0000,0010 DDRAM地址归位
97 1 wcmd(0x80); //1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//
98 1 wcmd(0x04); //点设定,显示字符/光标从左到右移位,DDRAM地址加 一//
99 1 wcmd(0x0C); //显示设定,开显示,显示光标,当前显示位反白闪动
100 1
101 1 }
102
103 void cleartext()
104 {
105 1 wcmd(0x30); //8BitMCU,基本指令集合
106 1 wcmd(0x01);
107 1 }
108
109 void putstr(uchar row,uchar col,uchar *puts)
110 {
111 1 wcmd(0x30); //8BitMCU,基本指令集合
112 1 wcmd(AD_TABLE[8*row+col]); //起始位置
113 1 while(*puts != '\0') //判断字符串是否显示完毕
114 1 {
115 2
116 2 wcmd(AD_TABLE[8*row+col]);
117 2 wdat(*puts); //一个汉字要写两次
C51 COMPILER V8.02 LCD 06/03/2008 22:12:57 PAGE 3
118 2 puts++;
119 2 wdat(*puts);
120 2 puts++;
121 2 col++;
122 2 if(col==8) //判断换行
123 2 { //若不判断,则自动从第一行到第三行
124 3 col=0;
125 3 row++;
126 3 }
127 2 if(row==4) row=0; //一屏显示完,回到屏左上角
128 2 }
129 1 }
130
131 void hanzi(uchar row,uchar col,uchar *puts)
132 {
133 1 wcmd(0x30); //8BitMCU,基本指令集合
134 1 wcmd(AD_TABLE[8*row+col]); //起始位置
135 1 wcmd(AD_TABLE[8*row+col]);
136 1 wdat(*puts); //一个汉字要写两次
137 1 }
138
139 void putbmp(uchar *put)
140 {
141 1 uchar x,y;
142 1 for(y=0;y<32;y++)
143 1 for(x=0;x<8;x++)
144 1 {
145 2 wcmd(0x80+y);
146 2 wcmd(0x80+x);
147 2 wdat(*put);
148 2 put++;
149 2 wdat(*put);
150 2 put++;
151 2 }
152 1 for(y=0;y<32;y++)
153 1 for(x=8;x<16;x++)
154 1 {
155 2 wcmd(0x80+y);
156 2 wcmd(0x80+x);
157 2 wdat(*put);
158 2 put++;
159 2 wdat(*put);
160 2 put++;
161 2 }
162 1 }
163
164 void clearbmp()
165 {
166 1 uchar x,y;
167 1 lcd_init();
168 1 wcmd(0x34);
169 1 wcmd(0x3e);
170 1 for(y=0;y<32;y++)
171 1 for(x=0;x<8;x++)
172 1 {
173 2 wcmd(0x80+y);
174 2 wcmd(0x80+x);
175 2 wdat(0x00);
176 2 wdat(0x00);
177 2
178 2 }
179 1 for(y=0;y<32;y++)
C51 COMPILER V8.02 LCD 06/03/2008 22:12:57 PAGE 4
180 1 for(x=8;x<16;x++)
181 1 {
182 2 wcmd(0x80+y);
183 2 wcmd(0x80+x);
184 2 wdat(0x00);
185 2 wdat(0x00);
186 2 }
187 1 }
188
189 void put_5_7(uchar row,uchar col,uchar dat)
190 {
191 1 uchar i;
192 1 uint a;
193 1 a = 2550/dat-10;
194 1 for(i=0;i<4;i++)
195 1 {
196 2 value[i] = a%10;
197 2 a = a/10;
198 2 }
199 1
200 1 if(value[3] != 0) {
201 2 for(i=0;i<16;i++)
202 2 {
203 3 wcmd(0x80+row*16+i);
204 3 wcmd(0x80+col);
205 3 wdat(ziku[value[3]*16+i]);
206 3 wdat(ziku[value[2]*16+i]);
207 3 }
208 2 for(i=0;i<16;i++)
209 2 {
210 3 wcmd(0x80+row*16+i);
211 3 wcmd(0x80+col+1);
212 3 wdat(ziku[value[1]*16+i]);
213 3 wdat(ziku[160+i]);
214 3
215 3 }
216 2 for(i=0;i<16;i++)
217 2 {
218 3 wcmd(0x80+row*16+i);
219 3 wcmd(0x80+col+2);
220 3 wdat(ziku[value[0]*16+i]);
221 3 wdat(ziku[176+i]);
222 3 }
223 2 }
224 1 else
225 1 {
226 2 if(value[2] != 0)
227 2 {
228 3 for(i=0;i<16;i++)
229 3 {
230 4 wcmd(0x80+row*16+i);
231 4 wcmd(0x80+col);
232 4 wdat(ziku[value[2]*16+i]);
233 4 wdat(ziku[value[1]*16+i]);
234 4 }
235 3
236 3 for(i=0;i<16;i++)
237 3 {
238 4 wcmd(0x80+row*16+i);
239 4 wcmd(0x80+col+1);
240 4 wdat(ziku[160+i]);
241 4 wdat(ziku[value[0]*16+i]);
C51 COMPILER V8.02 LCD 06/03/2008 22:12:57 PAGE 5
242 4 }
243 3 for(i=0;i<16;i++)
244 3 {
245 4 wcmd(0x80+row*16+i);
246 4 wcmd(0x80+col+2);
247 4 wdat(ziku[176+i]);
248 4 }
249 3 }
250 2 else
251 2 {
252 3 for(i=0;i<16;i++)
253 3 {
254 4 wcmd(0x80+row*16+i);
255 4 wcmd(0x80+col);
256 4 wdat(ziku[value[1]*16+i]);
257 4 wdat(ziku[160+i]);
258 4 }
259 3
260 3 for(i=0;i<16;i++)
261 3 {
262 4 wcmd(0x80+row*16+i);
263 4 wcmd(0x80+col+1);
264 4 wdat(ziku[value[0]*16+i]);
265 4 wdat(ziku[176+i]);
266 4 }
267 3 }
268 2
269 2 }
270 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 862 ----
CONSTANT SIZE = 224 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -