?? ks0108.lst
字號:
C51 COMPILER V7.20 KS0108 09/04/2007 22:35:41 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE KS0108
OBJECT MODULE PLACED IN .\Obj\Ks0108.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Src\Ks0108.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\Lst\Ks0108.lst) OBJECT
-(.\Obj\Ks0108.obj)
line level source
1 /******************************************************************************
2 * Ks0108.C - Ks0108 液晶控制器驅動程序
3 *
4 *
5 * DESCRIPTION: -
6 *
7 * modification history
8 * --------------------
9 * 01a, 04/sep/2007, 梁炎昌 written
10 * --------------------
11 ******************************************************************************/
12
13 #include "CPU.H"
14 #include "Ks0108.H"
15 #include "Chinese.C"
16 #include "ASCII.c"
17
18
19
20 //------------------------------------------------------------------------------------------
21
22 /*
23 -------------------------------------------------------------------------
24 GUI相關全局變量
25 -------------------------------------------------------------------------
26 */
27 U8 GUIEnFont = En_8x16; //英文字體
28 U8 GUITextMode = GUI_TEXTMODE_NORMAL; //顯示模式
29
30 U8 Char_XSIZE; //英文字體X寬度
31 U8 Char_YSIZE; //英文字體Y寬度
32
33 U8 PosX = 0; //當前系統X坐標
34 U8 PosY = 0; //當前系統Y坐標
35
36 U8 NoXY = true;//是否使用PosX PosY的標志 1-->不使用 0-->使用
37
38
39 // ---- 延遲程序 ----------------------------------------------------
40 #if OSC_48MHZ == true
41
42 #define SomeNop(); { \
43 _nop_(); _nop_(); _nop_(); _nop_(); \
44 _nop_(); _nop_(); _nop_(); _nop_(); \
45 }
46
47 #elif OSC_24MHZ == true
#define SomeNop(); { \
_nop_(); _nop_(); _nop_(); _nop_(); \
}
#endif
54
C51 COMPILER V7.20 KS0108 09/04/2007 22:35:41 PAGE 2
55
56
57
58
59
60 /*
61 *****************************************************************************
62 * WriteCommand_0108 - 寫命令到KS0108
63 * DESCRIPTION: -
64 * 本函數不接管片選信號
65 * @Param CmdData:命令碼
66 * @Return :
67 * ----
68 *****************************************************************************
69 */
70 void WriteCommand_0108(U8 CmdData)
71 {
72 1 LCD_E = 0;
73 1 LCD_RS = 0;
74 1 LCD_RW = 0;
75 1 LCD_Bus = CmdData;
76 1 SomeNop();
77 1 LCD_E = 1;
78 1 SomeNop();
79 1 LCD_E = 0;
80 1
81 1 }
82
83
84 /*
85 *****************************************************************************
86 * WriteData_0108 - 寫數據到KS0108
87 * DESCRIPTION: -
88 * 本函數不接管片選信號
89 * @Param Data:寫入的數據
90 * @Return :
91 * ----
92 *****************************************************************************
93 */
94 void WriteData_0108(U8 Data)
95 {
96 1 LCD_E = 0;
97 1 LCD_RS = 1;
98 1 LCD_RW = 0;
99 1 LCD_Bus = Data;
100 1 SomeNop();
101 1 LCD_E = 1;
102 1 SomeNop();
103 1 LCD_E = 0;
104 1
105 1 }
106 /*-------------------讀LCD數據----------------------------*/
107 #if 0
U8 ReadData_0108(void)
{ U8 Temp;
LCD_Bus = 0xFF;//切換成輸入
LCD_RS = 1;
LCD_RW = 1;
SomeNop();
LCD_E = 1;
SomeNop();
Temp = LCD_Bus;
C51 COMPILER V7.20 KS0108 09/04/2007 22:35:41 PAGE 3
return(Temp);
/*
U8 Temp;
PIN_KS0108_Di_HIGH;
PIN_KS0108_RW_HIGH;
DelayS(0);
PIN_KS0108_Enable_HIGH;
DelayS(0);
PIN_KS0108_Enable_LOW;
Temp = PIN_KS0108_Lcd_InBus;
return (Temp);
*/
}
U8 ReadState_0108(void)
{
U8 Temp;
LCD_Bus = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
SomeNop();
LCD_E = 1;
SomeNop();
LCD_E = 0;
Temp = LCD_Bus;
return (Temp);
}
U8 Busy(void)
{
U16 TimeOut;
U8 Flag;
TimeOut = 200;
do{
Flag = ReadState_0108();
LED1 ^= 0x01;
if (TimeOut-- == 0){
return 0;
}
}while(Flag &0x80);
return 1;
}
#endif
162 //Option = 1 --->Disp On
163 //Option = 0 --->Disp Off
164 void KS0108_DisplayOn(U8 Option)
165 {
166 1 if (Option == 1) {
167 2 WriteCommand_0108(Ks0108_CMD_Disp_ON);
168 2 }else{
169 2 WriteCommand_0108(Ks0108_CMD_Disp_OFF);
170 2 }
171 1 }
172
173 void KS0108_SetStartRow(U8 Row)
174 {
175 1 WriteCommand_0108(Ks0108_CMD_Disp_Start_Line + Row);
176 1 }
177 /*
178 *****************************************************************************
C51 COMPILER V7.20 KS0108 09/04/2007 22:35:41 PAGE 4
179 * Display_Locate - LCD上指定位置 顯示指定數據
180 * DESCRIPTION: -
181 *
182 * @Param x0:0--191橫向坐標
183 * @Param y0:0--7 縱向坐標
184 * @Param DisplayData:寫入的數據
185 * @Return :
186 * ----
187 *****************************************************************************
188 */
189 void Display_Locate(U8 DisplayData, U8 x0, U8 y0)
190 {
191 1 if ((x0 <= (LCD_XSIZE-1))&(y0 <= (LCD_YSIZE-1))){
192 2 if (x0 <= 63){ //0--191
193 3 LCD_CSA();
194 3 // Busy();//判忙
195 3 WriteCommand_0108(Ks0108_CMD_Set_Addr + x0);
196 3 } else if (x0 <= 127){
197 3 LCD_CSB();
198 3 // Busy();//判忙
199 3 WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 - 64);
200 3 } else if (x0 <= 191){
201 3 LCD_CSC();
202 3 // Busy();//判忙
203 3 WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 -128);
204 3 }
205 2 // Busy();//判忙
206 2 WriteCommand_0108(y0 + Ks0108_CMD_Set_Page); //0--7
207 2 // Busy();//判忙
208 2 WriteData_0108(DisplayData);
209 2 LCD_CS_None();//不再片選任何一個Ks0108
210 2 }
211 1 }
212
213
214 /*
215 *****************************************************************************
216 * Display_Clear - 清空LCD顯示
217 * DESCRIPTION: -
218 *
219 * @Param void:
220 * @Return :
221 * ----
222 *****************************************************************************
223 */
224 void Display_Clear(void)
225 {
226 1 U8 j,k;
227 1 //--------------------------------------
228 1 LCD_CSA();
229 1 for(k = 0; k < 8; k++){
230 2 WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
231 2 WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
232 2 for(j = 0;j < 64;j++){
233 3 WriteData_0108(0x00);
234 3 }
235 2 }
236 1 KS0108_SetStartRow(0);
237 1 //--------------------------------------
238 1 LCD_CSB();
239 1 for(k = 0; k < 8; k++){
240 2 WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
C51 COMPILER V7.20 KS0108 09/04/2007 22:35:41 PAGE 5
241 2 WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
242 2 for(j = 0;j < 64;j++){
243 3 WriteData_0108(0x00);
244 3 }
245 2 }
246 1 KS0108_SetStartRow(0);
247 1 //-------------------------------------
248 1 LCD_CSC();
249 1 for(k = 0; k < 8; k++){
250 2 WriteCommand_0108(0 + Ks0108_CMD_Set_Addr);//0--7
251 2 WriteCommand_0108(k + Ks0108_CMD_Set_Page);//0-63
252 2 for(j = 0;j < 64;j++){
253 3 WriteData_0108(0x00);
254 3 }
255 2 }
256 1 KS0108_SetStartRow(0);
257 1 //-------------------------------------
258 1 LCD_CS_None();
259 1 }
260
261
262 /*
263 *****************************************************************************
264 * Display_Init - 初始化LCD
265 * DESCRIPTION: -
266 *
267 * @Param void:
268 * @Return :
269 * ----
270 *****************************************************************************
271 */
272 void Display_Init(void)
273 {
274 1 //---------------------------
275 1 LCD_CSA();
276 1 KS0108_DisplayOn(0);
277 1 KS0108_SetStartRow(0);
278 1 KS0108_DisplayOn(1);
279 1 //---------------------------
280 1 LCD_CSB();
281 1 KS0108_DisplayOn(0);
282 1 KS0108_SetStartRow(0);
283 1 KS0108_DisplayOn(1);
284 1 //---------------------------
285 1 LCD_CSC();
286 1 KS0108_DisplayOn(0);
287 1 KS0108_SetStartRow(0);
288 1 KS0108_DisplayOn(1);
289 1 //---------------------------
290 1 LCD_CS_None();
291 1 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -