📄 cs23-2.lst
字号:
174 1 x=0x01;
175 1 x=x<<y; //移入所画点
176 1 Wrdata(cbyte|x); //画上屏幕
177 1 col=x1; //恢复x、y座标
178 1 row=y1;
179 1 } //画点子函数结束
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 4
180 /***************全屏幕清屏子函数**********************/
181 void Lcmcls(void) //函数名为Lcmcls的全屏幕清屏子函数
182 { //函数开始
183 1 for(row=0;row<8;row++)
184 1 {for(col=0;col<LCMLIMIT;col++)
185 2 Wrdata(0);} //将数据0写到屏幕
186 1 } //函数结束
187
188 /**********************全屏幕置黑子函数**********************/
189 void Lcmclsxx(void) //函数名为Lcmclsxx的全屏幕置黑子函数
190 { //函数开始
191 1 for(row=0;row<8;row++)
192 1 for(col=0;col<LCMLIMIT;col++)
193 1 Wrdata(255); //将8位数据全1(255)写到屏幕
194 1 } //函数结束
195 /*************读取液晶x列、y页座标处的数据至全局变量cbyte中************/
196 void Rddata(void) //函数名为Rddata的子函数
-
197 { //函数开始
198 1 Locatexy(); //座标定位
199 1 DataPort=0xff; //LCM口置全1
200 1 RS=1; //选择数据寄存器
201 1 RW=1; //选择读
202 1 EN=1; //使能
203 1 cbyte=DataPort; //虚读一次
204 1 EN=0; //禁能
205 1 Locatexy(); //座标定位
206 1 DataPort=0xff; //LCM口置全1
207 1 RS=1; //选择数据寄存器
208 1 RW=1; //选择读
209 1 EN=1; //使能
210 1 cbyte=DataPort; //读取数据(真读)
211 1 EN=0; //禁能
212 1 } //函数结束
213 /**************将数据X写入液晶x列、y页座标处***********/
214 void Wrdata(uchar X) //函数名为Wrdata 的子函数,定义X为无符号字符型变量
-
215 { //函数开始
216 1 Locatexy(); //座标定位
217 1 RS=1; //选择数据寄存器
218 1 RW=0; //选择写
219 1 DataPort=X; //将数据X写入LCM口
220 1 EN=1; //使能
221 1 EN=0; //禁能
222 1 } //函数结束
223 /******************写命令至左区********************/
224 void WrcmdL(uchar X) //函数名为WrcmdL 的子函数,定义X为无符号字符型变量
225 { //函数开始
226 1 lcdbusyL(); //调用左区判忙子函数
227 1 RS=0; //选择指令寄存器
228 1 RW=0; //选择写
229 1 DataPort=X; //数据输出至数据口
230 1 EN=1;EN=0; //使能,禁能
231 1 } //函数结束
232
233 /********************写命令至中区************************/
234 void WrcmdM(uchar X) //函数名为WrcmdM的子函数,定义X为无符号字符型变量
235 { //函数开始
236 1 lcdbusyM(); //调用中区判忙子函数
237 1 RS=0; //选择指令寄存器
238 1 RW=0; //选择写
239 1 DataPort=X; //数据输出至数据口
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 5
240 1 EN=1;EN=0; //使能,禁能
241 1 } //函数结束
242 /**************写命令至右区****************
243 void WrcmdR(uchar X) //函数名为WrcmdR的子函数,定义X为无符号字符型变量
244 { //函数开始
245 lcdbusyR(); //调用右区判忙子函数
246 RS=0; //选择指令寄存器
247 RW=0; //选择写
248 DataPort=X; //数据输出至数据口
249 EN=1;EN=0; //使能,禁能
250 } //函数结束
251 ***********************左区判忙子函数***********************/
252 void lcdbusyL(void) //函数名为lcdbusyL 的左区判忙子函数
253 { //函数开始
254 1 CS1=1;CS2=0; //选中左区
255 1 wtcom(); //调用判忙等待子函数
256 1 } //函数结束
257
258 void lcdbusyM(void) //函数名为lcdbusyM的中区判忙子函数
259 { //函数开始
260 1 CS1=0;CS2=1; //选中中区
261 1 wtcom(); //调用判忙等待子函数
262 1 } //函数结束
263
264 /*void lcdbusyR(void) //函数名为lcdbusyR的右区判忙子函数(这里不用)
265 { //函数开始
266 CS1=?;CS2=?; //根据所用LCM器件决定取值
267 wtcom(); //调用判忙等待子函数
268 }*/ //函数结束
269 /***********公用判忙等待子函数********************/
270 void wtcom(void) //函数名为wtcom 的公用判忙等待子函数
271 { //函数开始
272 1 RS=0; //选择指令寄存器
273 1 RW=1; //选择读
274 1 DataPort=0xff; //数据0xff输出至数据口
275 1 EN=1; //使能
276 1 while(DataPort&Lcdbusy);// 若LCM忙则等待
277 1 EN=0; //禁能
278 1 } //函数结束
279 /************根据设定的col、row座标数据,定位LCM下一个操作单元************/
280 void Locatexy(void) //函数名为Locatexy 的子函数
281 { //函数开始
282 1 uchar x,y; //定义x,y为无符号字符型变量
283 1 switch(col&0xc0) //限定x列最大值为192
284 1 {
285 2 case 0:{lcdbusyL();break;} //判左区忙
286 2 case 0x40:{lcdbusyM();break;} //判中区忙
287 2 //case 0x80:{lcdbusyR();break;} //判右区忙(这里不用)
288 2 }
289 1
290 1 x=col&0x3f|SETX; //获得x列(0~63)地址
291 1 y=row&0x07|SETY; //获得y页(0~7)地址
292 1
293 1 wtcom(); //调用判忙等待子函数
294 1 RS=0; //选择指令寄存器
295 1 RW=0; //选择写
296 1 DataPort=y; //y页地址传送至LCM口
297 1 EN=1;EN=0; //使能,禁能
298 1 wtcom(); //调用判忙等待子函数
299 1 RS=0; //选择指令寄存器
300 1 RW=0; //选择写
301 1 DataPort=x; //x列地址传送至LCM口
C51 COMPILER V8.02 CS23_2 09/15/2008 16:50:43 PAGE 6
302 1 EN=1;EN=0; //使能,禁能
303 1 } //函数结束
304 /*******************液晶屏初始化******************************/
305 void Lcminit(void) //函数名为Lcminit的液晶屏初始化子函数
306 { //函数开始
307 1 reset(); //调用复位子函数
308 1 cbyte=DISPFIRST; //定义起始行为0行
309 1 WrcmdL(cbyte); //写命令至左区
310 1 WrcmdM(cbyte); //写命令至中区
311 1 //WrcmdR(cbyte); //写命令至右区(这里不用)
312 1 cbyte=DISPOFF; //关闭显示屏
313 1 WrcmdL(cbyte); //写命令至左区
314 1 WrcmdM(cbyte); //写命令至中区
315 1 //WrcmdR(cbyte); //写命令至右区(这里不用)
316 1 cbyte=DISPON; //打开显示屏
317 1 WrcmdL(cbyte); //写命令至左区
318 1 WrcmdM(cbyte); //写命令至中区
319 1 //WrcmdR(cbyte); //写命令至右区(这里不用)
320 1 Lcmcls(); //清屏
321 1 Delay(10000); //延时一会
322 1 Lcmclsxx(); //全屏置黑
323 1 Delay(10000); //延时一会
324 1 Lcmcls(); //清屏
325 1 Delay(30000); //延时一会
326 1 col=0; //定位x方向为0列
327 1 row=0; //定位y方向为0页
328 1 Locatexy(); //定位0列、0页为LCM下一个操作单元
329 1 } //函数结束
330 /*********************延时子函数**********************/
331 void Delay(unsigned long MS)
332 {
333 1 while(MS!=0)MS--;
334 1 }
335
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 877 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 20
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 + -