📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*************************************
2 * 控制器:KS0108
3 * MCU:AT89C52 ,晶体频率:6MHz
4 * 取模方式:纵向字节倒序
5 * CS1和CS2为低电平有效
6 * copyright:tiany
7 * time:2008-9-20
8 **************************************/
9 #include <reg52.h>
10 #include "LCD.h"
11
12 //全局变量=====
13 uchar status;
14 uchar cbyte;
15
16 void Delay_us(uint DelayTime) //*******us延时*****//
17 {
18 1 while(DelayTime) DelayTime--;
19 1 }
20
21
22
23 /*--------------------------
24 *忙信号检测
25 ----------------------------*/
26 void LCD_Check_Busy(void)
27 {
28 1 /* while(1)
29 1 {
30 1 LCD_EN = 0;
31 1 LCD_RS = 0;
32 1 LCD_RW = 1;
33 1 LCD_BUS = 0xFF;
34 1 Delay_us(5);
35 1 LCD_EN = 1;
36 1 if(!LCD_Busy) break; /***在proteus中仿真查忙会引起死循环,程序的BUG!***/
37 1 // }
38 1 LCD_EN = 0;
39 1 }
40
41 /*----------------------------------------------------------------------------
42 写入控制指令代码。
43 函数入口参数:Command ------ 写入的控制指令代码 。
44 CS_Num ------ 左右半屏的选数值
45 ----------------------------------------------------------------------------*/
46 void LCD_WriteCommand(uchar Command, uchar CS_Num)
47 {
48 1 LCD_Check_Busy();
49 1 if(CS_Num==L) /*选左半屏*/
50 1 {
51 2 LCD_CS1 = 0;
52 2 LCD_CS2 = 1;
53 2 }
54 1 else if(CS_Num==R) /*选右半屏*/
55 1 {
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 2
56 2 LCD_CS1 = 1;
57 2 LCD_CS2 = 0;
58 2 }
59 1 LCD_EN = 0;
60 1 LCD_RS = 0;
61 1 LCD_RW = 0;
62 1 LCD_BUS = Command;
63 1 LCD_EN = 1;
64 1 Delay_us(1);
65 1 LCD_EN = 0;
66 1 LCD_CS1 = 1;
67 1 LCD_CS2 = 1;
68 1 }
69 /*----------------------------------------------------------------------------
70 写入定位信息
71 函数入口参数:hang ------ 写入的行位置
72 lie ------ 写入的列位置
73 ----------------------------------------------------------------------------*/
74 void Locatexy(uchar hang,uchar lie)
75 {
76 1 uchar x, y, right;
77 1 switch(lie&0xc0)
78 1 {
79 2 case 0: { right = L;break;} //置左半屏标志
80 2 case 0x40:{ right = R;break;}//置右半屏标志
81 2 }
82 1 x=lie&0x3f|SETX; //把列数据变成列命令 40
83 1 y=hang&0x07|SETY;//把行数据变成行命令 b8
84 1 LCD_WriteCommand(y, right);/***送行命令***/
85 1 LCD_WriteCommand(x, right);/***送列命令***/
86 1
87 1 if(right==R)
88 1 status = R;
89 1 else
90 1 status = L;//置左又半区标志
91 1 }
92 /*----------------------------------------------------------------------------
93 写入显示数据。
94 函数入口参数: data --------写入的显示数据 。
95 hang,lie--------写入定位位置
96 ----------------------------------------------------------------------------*/
97 void LCD_WriteData(uchar Data,uchar hang,uchar lie)
98 {
99 1 Locatexy(hang,lie);//定位显示位置
100 1 if(status==L) /*选择左半屏*/
101 1 {
102 2 LCD_CS1 = 0;
103 2 LCD_CS2 = 1;
104 2 }
105 1 else if(status==R) /*选择右半屏*/
106 1 {
107 2 LCD_CS1 = 1;
108 2 LCD_CS2 = 0;
109 2 }
110 1 LCD_Check_Busy();
111 1 LCD_EN = 0;
112 1 LCD_RS = 1;
113 1 LCD_RW = 0;
114 1 LCD_BUS = Data;
115 1 LCD_EN = 1;
116 1 Delay_us(1);
117 1 LCD_EN = 0;
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 3
118 1 LCD_CS1= 1;
119 1 LCD_CS2= 1;
120 1 }
121 //=========数据读取====================
122 /*uchar LCD_ReadData(uchar hang,uchar lie)
123 {
124 uchar rdata;
125 Locatexy(hang,lie);//定位显示位置
126 if(status==L)
127 {
128 LCD_Check_Busy();
129 LCD_CS1= 0;
130 LCD_CS2= 1;
131 }
132 else
133 {
134 LCD_Check_Busy();
135 LCD_CS1= 1;
136 LCD_CS2= 0;
137 }
138 P0 =0xFF; //数据送到P0口
139 LCD_EN = 0;
140 LCD_RS = 1;
141 LCD_RW = 1;
142 LCD_EN = 1;
143 Delay_us(1);
144 rdata=P0;
145
146 LCD_RS = 1;
147 LCD_RW = 1;
148 //P0 =0xFF; //数据送到P0口 要读两次,第二次的才正确
149 Delay_us(1);
150 rdata=P0;
151
152 LCD_EN = 0;
153 LCD_CS1= 1;
154 LCD_CS2= 1;
155 return rdata;
156 }*/
157 /*---------------------------------------------------------------------------
158 液晶模块的清屏
159 ---------------------------------------------------------------------------*/
160 void LCD_CLR(uchar Side_Num)
161 {
162 1 uchar i,k;
163 1 for(i=0;i<8;i++)
164 1 {
165 2 if(Side_Num==L)
166 2 for(k=0;k<64;k++)
167 2 {
168 3 LCD_WriteData(0x00,i,k);
169 3 }
170 2 else if(Side_Num==R)
171 2 for(k=64;k<128;k++)
172 2 {
173 3 LCD_WriteData(0x00,i,k);
174 3 }
175 2 }
176 1 }
177
178 /*---------------------------------------------------------------------------
179 初始化
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 4
180 ---------------------------------------------------------------------------*/
181 void LCD_Initial(void)
182 {
183 1 LCD_WriteCommand(DISPOFF,L); /*显示关*/
184 1 LCD_WriteCommand(DISPOFF,R);
185 1 Delay_us(1);
186 1 LCD_WriteCommand(DISPON,L); /*显示开*/
187 1 LCD_WriteCommand(DISPON,R);
188 1 LCD_WriteCommand(DISPFIRST,L); /*起始行*/
189 1 LCD_WriteCommand(DISPFIRST,R);
190 1 LCD_CLR(L);
191 1 LCD_CLR(R);
192 1 }
193 /*---------------------------------------------------------------------------
194 输出全屏图片: 128*64
195 ---------------------------------------------------------------------------*/
196 /*
197 void put_picture(uchar* pictureName)//128*64
198 {
199 uchar i,j;
200 uint x;
201 for(j=0;j<8;j++)
202 {
203 x=j*128;
204 for(i=0;i<128;i++)
205 {
206 cbyte=*(pictureName+x);
207 LCD_WriteData(cbyte,j,i);
208 x++;
209 }
210 }
211 }
212 */
213 /*---------------------------------------------------------------------------
214 输出半屏图片: 64*64
215 ---------------------------------------------------------------------------*/
216
217 void put_picture_half(uchar* pictureName,uchar Side_Num)//64*64
218 {
219 1 uchar i,j;
220 1 uint x;
221 1 for(j=0;j<8;j++)
222 1 {
223 2 x=j*64;
224 2 if(Side_Num==L)
225 2 {
226 3 for(i=0;i<64;i++)
227 3 {
228 4 cbyte=*(pictureName+x);
229 4 LCD_WriteData(cbyte,j,i);
230 4 x++;
231 4 }
232 3 }
233 2 else if(Side_Num==R)
234 2 {
235 3 for(i=64;i<128;i++)
236 3 {
237 4 cbyte=*(pictureName+x);
238 4 LCD_WriteData(cbyte,j,i);
239 4 x++;
240 4 }
241 3 }
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 5
242 2 }
243 1 }
244 /*---------------------------------------------------------------------------
245 输出英文和数字:8*8
246 ---------------------------------------------------------------------------*/
247 /*
248 void put_char(uchar* Data, uchar hang, uchar lie,uchar reverse)//8*8
249 {
250 uchar i;
251 uint x;
252 x=0;
253 for(i=0;i<8;i++)
254 {
255 if(reverse) cbyte=~(*(Data+x));
256 else cbyte=*(Data+x);
257
258 LCD_WriteData(cbyte,hang,lie);
259 x++;
260 lie++;
261 }
262
263 }*/
264 /*---------------------------------------------------------------------------
265 输出汉字: 16*16
266 ---------------------------------------------------------------------------*/
267 void put_chinese(uchar* Data, uchar hang, uchar lie,uchar reverse)//16*16
268 {
269 1 uchar i,j,lie0;
270 1 uint x;
271 1 x=0;
272 1 lie0=lie;
273 1 for(j=0;j<2;j++)
274 1 {
275 2 for(i=0;i<16;i++)
276 2 {
277 3 if(reverse) cbyte=~(*(Data+x));
278 3 else cbyte=*(Data+x);
279 3 LCD_WriteData(cbyte,hang,lie);
280 3 x++;
281 3 lie++;
282 3 }
283 2 lie=lie0;
284 2 hang++;
285 2 }
286 1 }
287
288 /*---------------------------------------------------------------------------
289 输出数字和字母: 16*8
290 ---------------------------------------------------------------------------*/
291 void put_num(uchar* Data, uchar hang, uchar lie,uchar reverse)//16*16
292 {
293 1 uchar i,j,lie0;
294 1 uint x;
295 1 x=0;
296 1 lie0=lie;
297 1 for(j=0;j<2;j++)
298 1 {
299 2 for(i=0;i<8;i++)
300 2 {
301 3 if(reverse) cbyte=~(*(Data+x));
302 3 else cbyte=*(Data+x);
303 3 LCD_WriteData(cbyte,hang,lie);
C51 COMPILER V7.06 LCD 10/03/2008 17:28:24 PAGE 6
304 3 x++;
305 3 lie++;
306 3 }
307 2 lie=lie0;
308 2 hang++;
309 2 }
310 1 }
311 //===================================================
312 // 屏幕向上移动 有问题 ????
313 //===================================================
314 /*void MoveUp()
315 {
316 uint hang;
317 uchar lie;
318 //uchar hang2;
319 for(hang=0;hang<8;hang++)
320 {
321 for(lie=0;lie<128;lie++)
322 {
323 uchar buf;
324 //uchar lie2=lie+1;
325 buf =LCD_ReadData(hang,lie);
326 //if(hang==0)
327 //continue ;
328 //else
329 // hang2=hang-1;
330 LCD_WriteData(buf,hang,lie);
331 }
332 Delay_us(1000);
333 }
334 }*/
335
336
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 575 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 32
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 + -