📄 ocm240128.lst
字号:
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE OCM240128
OBJECT MODULE PLACED IN OCM240128.OBJ
COMPILER INVOKED BY: f:\Keil3\C51\BIN\C51.EXE OCM240128.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************************************************
2 ** 文件名称: OCM240128.H
3 ** 最后修改: 2009-10-26
4 ** 版 本: 1.0
5 ** 描 素: OCM240128液晶驱动程序
6 **---------------------------------------------------------------------------------------------
7 ** 作 者: 李雪川
8 ** 创作日期: 2009-10-6-26
9 ** 文件描述: OCM240128液晶驱动程序,采用8位数据总线方式驱动
10 内部字符库使用方式:字符地址 = ASCII - 0x20
11
12 ------------------------硬件端口连接定义-------------------------------------------------------
13 ** OXM240128 MCU
14 ** FS GND 字形选择0: 8*8 1: 6*8
15 ** C_D P2.6 =1选择指令, =0选择数据
16 ** _CE P2.7 片选=0有效
17 ** _RW P3.6(_RW) 总线控制读写
18 ** _RD P3.7(_RD)
19 ** PDAT P0 8位总线数据端口
20 ----------------------------------------------------------------------------------------------
21 ** 全局变量:
22
23 ** 主要函数:
24 ******************OCM240128内部有CGRAM 2K(256字节)空间*************************************
25 使用内部字符发生器CGROM时低128字节为内部字符,CGROM的高128字节可自己定义
26 禁止内部字符发生器CGROM时CGRAM256字节都用于用户字符定义
27 通过void OCM_mode(uchar mod,uchar cg) cg参数控制
28 *******************************************************************************************
29 void OCM_ac(uchar target, uint dat) 地址设置
30 void OCM_area(uchar target, uint int) 显示区域设置
31 OCM_onewr(mod, dat) 单次写
32 void OCM_autrd(uint, uchar num, uchar *p) 连续自动读
33 void OCM_autwr(uadd, uchar num, uchar *p) 连续自动写)
34 void OCM_picture(uint addr, uchar w, uchar h, uchar *tab) 图形显示
35 void OCM_picture_clr(uint addr, uchar w, uchar h) 图形清除
36 void OCM_line_clr(uint addr,uchar dat) 清除一行
37 void OCM_clr(uchar dat) 清屏
38 void OCM_init(void) 初始化
39
40
41
42
43 **----------------------------------------------------------------------------------------------
44 ** 硬件平台: 51系列单片机,总线方式驱动
45 ** 软件平台: Keil3.0
46 *************************************************************************************************/
47 #include "OCM240128.H"
48
49
50
51
52 /****************************************************************************************
53 ** 函数名称: uchar OCM_rdint(void)
54 ** 功能描述: 读OCM液晶状态字
55 ** 输入参数; 无
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 2
56 ** 输出参数: uchar OCM液晶当前状态字
57 ** 全局变量: 无
58 ** 调用模块: OCM240128.C文件内部调用
59 ****************************************************************************************/
60 uchar OCM_rdint(void)
61 {
62 1 uchar init;
63 1 init = C_Addr; //定义外部数据,总线方式读取指令
64 1 return (init);
65 1 }
66
67 /******************************************************************************************
68 ** 函数名称: uchar OCM_busy(uchar mode)
69 ** 功能描述: 读忙判断,单次读写,自动读,自动写,屏读/考呗出错
70 对应位为1准备好,0状态忙
71 ** 输入参数: uchar mode: 0 单次读写遇忙判断
72 1 自动读遇忙判断
73 2 自动写遇忙判断
74 3 屏读/考呗出错判断
75 其他 默认为0,单次读写遇忙判断
76 ** 输出参数: uchar 1当前查询状态准备好,0当前查询状态忙
77 ** 全局变量: 无
78 ** 调用模块: 0CM240128.C文件内部调用
79 ******************************************************************************************/
80 uchar OCM_busy(uchar mode)
81 {
82 1 uchar state = 0,busy = 0;
83 1
84 1 state = OCM_rdint(); //读取当前状态字
85 1
86 1 switch (mode)
87 1 {
88 2 case 0: busy = ((state & 0X03) == 0X03)? 1 : 0; break; //单次读写遇忙判断
89 2 case 1: busy = state & (0X01 << 2); break; //自动读遇忙判断
90 2 case 2: busy = state & (0X01 << 3); break; //自动写遇忙判断
91 2 case 3: busy = state & (0X01 << 6); break; //屏读/考呗出错判断
92 2 default:busy = ((state & 0X01) & (state & 0X02)); //默认为判断单次读写遇忙
93 2 }
94 1
95 1 return (busy);
96 1 }
97
98
99
100 /******************************************************************************************
101 ** 函数名称: void 0CM_ac(uchar target, uint dat)
102 ** 功能描述: AC地址设置:光标地址,CGRAM地址,显示地址设置
103 双参数指令
104 ** 输入参数: target: 0: 光标地址设置
105 1: CGRAM地址设置默认设置的地址为0X80开始
106 2: 显示地址设置(显示存储器的地址为, 该地址指针计
107 数器为 16 位字长)显示地址超出范围无效
108 其他:默认为0:光标地址设置
109 tartet:0 1 2
110 dat低位: 水平位置(字节单位) 偏置地址值 低 8 位地址(字节单位)
111 dat高位: 垂直位置 0X80 高 8 位地址
112 ** 输出参数: 无
113 ** 全局变量: 无
114 ** 调用模块: 0CM240128.C文件内部调用
115 ******************************************************************************************/
116 void OCM_ac(uchar target, uint dat)
117 {
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 3
118 1 uchar dat1 ,dat2;
119 1
120 1 dat1 = (uchar)(dat & 0xFF);
121 1 dat2 = (uchar)(dat >> 8);
122 1
123 1 while (!OCM_busy(0)); //单次读写遇忙判断
124 1
125 1 switch (target)
126 1 {
127 2 case 0:
128 2 D_Addr = (dat1 & 0X7F); //水平位置,数据的第7位有效,地址范围(0~0X4F),该指令判断不准确
129 2 while (!OCM_busy(0)); //单次读写遇忙判断
130 2 D_Addr = (dat2 & 0X1F); //垂直位置,第5位有效
131 2 while (!OCM_busy(0)); //单次读写遇忙判断
132 2 C_Addr = 0X21; //光标地址设置
133 2 break;
134 2 case 1:
135 2 D_Addr = (dat1 & 0X1F); // 偏置地址值(高 5 位),数据第5位有效
136 2 while (!OCM_busy(0)); //单次读写遇忙判断
137 2 D_Addr = 0X80; //数据2格式为0
138 2 while (!OCM_busy(0)); //单次读写遇忙判断
139 2 C_Addr = 0X22; //CGRAM地址设置
140 2 break;
141 2 case 2:
142 2 D_Addr = dat1; //dat1为低 8 位地址
143 2 while (!OCM_busy(0)); //单次读写遇忙判断
144 2 D_Addr = dat2; //dat2为高 8 位地址
145 2 while (!OCM_busy(0)); //单次读写遇忙判断
146 2 C_Addr = 0X24; //显示地址设置
147 2 break;
148 2 default:
149 2 D_Addr = (dat1 & 0X7F);
150 2 while (!OCM_busy(0));
151 2 D_Addr = (dat2 & 0X1F);
152 2 while (!OCM_busy(0));
153 2 C_Addr = 0X21; //默认为光标地址设置
154 2 break;
155 2 }
156 1 }
157
158
159
160 /******************************************************************************************
161 ** 函数名称: void OCM_area(uchar target, uint dat)
162 ** 功能描述: 显示区域设置:文本显示区 图形显示区
163 双参数指令
164 ** 输入参数: target: 0: 文本显示区首地址设置
165 1: 文本显示区宽度设置
166 2: 图形显示区首地址设置
167 3: 图形显示区宽度设置
168 其他:默认为无效
169 tartet: 0 1 2 3
170 datL: 低字节 字节数 低字节 字节数
171 datH: 高字节 00 高字节 00
172 ** 输出参数: 无
173 ** 全局变量: 无
174 ** 调用模块: 0CM240128.C文件内部调用
175 ******************************************************************************************/
176 void OCM_area(uchar target, uint dat)
177 {
178 1 uchar dat1 ,dat2;
179 1
C51 COMPILER V8.08 OCM240128 11/21/2009 22:14:42 PAGE 4
180 1 dat1 = (uchar)(dat & 0xFF);
181 1 dat2 = (uchar)(dat >> 8);
182 1
183 1 while (!OCM_busy(0)); //单次读写遇忙判断
184 1
185 1 switch (target)
186 1 {
187 2 case 0:
188 2 D_Addr = dat1; //文本显示区首地址低字节
189 2 while (!OCM_busy(0)); //单次读写遇忙判断
190 2 D_Addr = dat2; //文本显示区首地址高字节
191 2 while (!OCM_busy(0)); //单次读写遇忙判断
192 2 C_Addr = 0X40; //文本显示区首地址设置
193 2 break;
194 2 case 1:
195 2 D_Addr = dat1; //文本显示区宽度字节数
196 2 while (!OCM_busy(0)); //单次读写遇忙判断
197 2 D_Addr = 0; //数据2格式为0
198 2 while (!OCM_busy(0)); //单次读写遇忙判断
199 2 C_Addr = 0X41; //文本显示区宽度设置
200 2 break;
201 2 case 2:
202 2 D_Addr = dat1; //图形显示区首地址低字节
203 2 while (!OCM_busy(0)); //单次读写遇忙判断
204 2 D_Addr = dat2; //图形显示区首地址高字节
205 2 while (!OCM_busy(0)); //单次读写遇忙判断
206 2 C_Addr = 0X42; //图形显示区首地址设置
207 2 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -