?? 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 + -