📄 ocm240128.lst
字号:
208 2 case 3:
209 2 D_Addr = dat1; //图形显示区宽度字节数
210 2 while (!OCM_busy(0)); //单次读写遇忙判断
211 2 D_Addr = 0; //数据2格式为0
212 2 while (!OCM_busy(0)); //单次读写遇忙判断
213 2 C_Addr = 0X43; //图形显示区宽度设置
214 2 break;
215 2 default: //命令无效
216 2 break;
217 2 }
218 1 }
219
220
221 /******************************************************************************************
222 ** 函数名称: void OCM_mode(uchar mod,uchar cg)
223 ** 功能描述: 显示方式设置:或 异或 与 文本显示特性以双字节表示
224 CG 位 字符发生器选择位
225 ** 输入参数: mode: 0: 文本与图形以逻辑“或”的关系合成显示
226 1: 文本与图形“异或”
227 2: 文本与图形“与”
228 3: 文本显示特性以双字节表示
229 在设置了文本属性显示方式后,图形显示区将转换成为文本属性区,用来控制文本属性
230 其他:默认为无效
231 cg: 非0:启用内部字符发生器CGROM
232 0:禁止内部 CGROM
233 ******************OCM240128内部有CGRAM 2K(256字节)空间*************************************
234 使用内部字符发生器CGROM时低128字节为内部字符,CGROM的高128字节可自己定义
235 禁止内部字符发生器CGROM时CGRAM256字节都用于用户字符定义
236 通过void OCM_mode(uchar mod,uchar cg) cg参数控制
237 *******************************************************************************************
238 ** 输出参数: 无
239 ** 全局变量: 无
240 ** 调用模块: 0CM240128.C文件内部调用
241 ******************************************************************************************/
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 5
242 void OCM_mode(uchar mod,uchar cg)
243 {
244 1 uchar cgrom_stat;
245 1
246 1 if (cg) //cg !=0 启用内部字符发生器CGROM
247 1 {
248 2 cgrom_stat = (0x00 << 3); //第4位位0启用
249 2 }
250 1 else //cg = 0 禁止内部 CGROM
251 1 {
252 2 cgrom_stat = (0x01 << 3); //CG位为1禁止内部 CGROM
253 2 }
254 1
255 1 while (!OCM_busy(0)); //单次读写遇忙判断
256 1
257 1 switch (mod)
258 1 {
259 2 case 0: C_Addr = 0X80 | cgrom_stat; break; //“或”
260 2 case 1: C_Addr = 0X81 | cgrom_stat; break; //“异或”
261 2 case 2: C_Addr = 0X83 | cgrom_stat; break; //“与”
262 2 case 3: C_Addr = 0X84 | cgrom_stat; break; //文本显示特性以双字节表示
263 2 default: break;
264 2 }
265 1 }
266
267
268
269
270
271 /******************************************************************************************
272 ** 函数名称: void OCM_state(uchar mod)
273 ** 功能描述: 显示状态设置,相应位为1,启用相应功能,为0关闭相应功能
274 N1 N2 N3 N4
275 光标闪烁设 光标显示设置 文本显示设置 图形显示设置
276 ** 输入参数: mod: 参数格式 (1 << 0 | 1 << 1 | 1 << 2 | 1 << 3)所以功能打开
277 ** 输出参数: 无
278 ** 全局变量: 无
279 ** 调用模块: 0CM240128.C文件内部调用
280 ******************************************************************************************/
281 void OCM_state(uchar mod)
282 {
283 1 uchar tmp = mod;
284 1
285 1 while (!OCM_busy(0)); //单次读写遇忙判断
286 1
287 1 tmp &= 0X0F; //低4位有效
288 1
289 1 C_Addr = 0X90 | tmp; //写命令字
290 1 }
291
292
293 /******************************************************************************************
294 ** 函数名称: void OCM_cursor(uchar mod)
295 ** 功能描述: 光标形状设置(Cursor pattern select)
296 mod (0~7) mod越大,光标也越大
297 ** 输入参数: mod:
298 ** 输出参数: 无
299 ** 全局变量: 无
300 ** 调用模块: 无
301 ******************************************************************************************/
302 void OCM_cursor(uchar mod)
303 {
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 6
304 1 uchar tmp = mod;
305 1 tmp &= 0x07; //低3位有效
306 1
307 1 while (!OCM_busy(0)); //单次读写遇忙判断
308 1
309 1 C_Addr = 0XA0 | tmp; //写命令字
310 1 }
311
312
313
314
315
316 /******************************************************************************************
317 ** 函数名称: void OCM_bit(uchar bite, uchar byte)
318 ** 功能描述: 位操作 (Bit set reset)
319 ** 输入参数: byte: (0~7有效)显示单元中的数据的任一位写“0”或“1”
320 bite: 0:byte选择的为置0,非0:byte选择的位置1
321 ** 输出参数: 无
322 ** 全局变量: 无
323 ** 调用模块: 无
324 ******************************************************************************************/
325 void OCM_bit(uchar bite, uchar byte)
326 {
327 1 uchar tmp = byte;
328 1
329 1 if (bite) //bite转换为位
330 1 {
331 2 bite = 1;
332 2 }
333 1 else
334 1 {
335 2 bite = 0;
336 2 }
337 1
338 1 tmp &= 0X07; //后3位有效
339 1
340 1 while (!OCM_busy(0)); //单次读写遇忙判断
341 1
342 1 C_Addr = 0XF0 | (bite << 3) | tmp; //写命令字
343 1 }
344
345
346
347 /******************************************************************************************
348 ** 函数名称: void OCM_onewr(uchar mod,uchar dat)
349 ** 功能描述: 单次写液晶函数
350 ** 输入参数: mod: mod =0: 地址加一
351 =1:地址减一
352 =2: 地址不变
353 其他: 地址不变
354 dat: 数据
355 ** 输出参数: 无
356 ** 全局变量: 无
357 ** 调用模块: 无
358 ******************************************************************************************/
359 void OCM_onewr(uchar mod, uchar dat)
360 {
361 1 while (!OCM_busy(0));
362 1 D_Addr = dat;
363 1 while (!OCM_busy(0));
364 1 switch (mod)
365 1 {
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 7
366 2 case 0: C_Addr = 0XC0; break;
367 2 case 1: C_Addr = 0XC2; break;
368 2 case 2: C_Addr = 0XC4; break;
369 2 default:C_Addr = 0XC4; break;
370 2 }
371 1 }
372
373 /******************************************************************************************
374 ** 函数名称: uchar OCM_onerd(uchar mod,uchar dat)
375 ** 功能描述: 单次读液晶函数
376 ** 输入参数: mod: mod =0: 地址加一
377 =1:地址减一
378 =2: 地址不变
379 其他: 地址不变
380 ** 输出参数: uchar 读到的数据
381 ** 全局变量: 无
382 ** 调用模块: 无
383 *******************************************************************************************/
384 uchar OCM_onerd(uchar mod)
385 {
386 1 uchar dat;
387 1 switch (mod)
388 1 {
389 2 case 0: C_Addr = 0XC1; break;
390 2 case 1: C_Addr = 0XC3; break;
391 2 case 2: C_Addr = 0XC5; break;
392 2 default:C_Addr = 0XC5; break;
393 2 }
394 1
395 1 dat = D_Addr; //读数据
396 1
397 1 return (dat);
398 1 }
399
400
401
402
403 /******************************************************************************************
404 ** 函数名称: void OCM_autrd(uchar addr, uchar num, uchar *p)
405 ** 功能描述: 自动读液晶函数
406 ** 输入参数: addr: 液晶开始读的地址
407 num: 自动读数据的个数
408 *p: 读到数据的存储区
409 ** 输出参数: 无
410 ** 全局变量: 无
411 ** 调用模块: 无
412 ******************************************************************************************/
413 void OCM_autrd(uint addr, uchar num, uchar *p)
414 {
415 1 uchar i;
416 1
417 1 OCM_ac(2,addr); //显示地址设置
418 1 OCM_autrd_start(); //启动自动读操作
419 1
420 1 for (i = 0; i < num; i++)
421 1 {
422 2 while (!OCM_busy(1)); //自动读忙检查
423 2 p[i] = D_Addr; //读数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -