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