📄 glcd.lst
字号:
C51 COMPILER V7.07 GLCD 09/14/2005 15:20:56 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE GLCD
OBJECT MODULE PLACED IN Glcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Glcd.c LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include "Global.h"
3 #include "Hzlib.h"
4
5 ///////////////////////////////////////////////////////////////////////////////
6 // 内部存储区变量 0~128字节 直接寻址
7 // 全局变量定义
8 extern data uchar u8CursorX; // 光标X坐标列
9 extern data uchar u8CursorY; // 光标Y坐标行
10 extern data uchar cs; // 显示片选
11
12 extern bdata bit reverse; // LCD底色显示控制
13
14 //////////////////////////////////////////////////////////////////////////////
15 // LCD定位,列、行
16 ///////////////////////////////////////////////////////////////////////////////
17 void GLCD_Locate (uchar u8Column, uchar u8Line)
18 {
19 1 u8CursorX = u8Column;
20 1 u8CursorY = u8Line;
21 1 }
22
23 ///////////////////////////////////////////////////////////////////////////////
24 // LCD延时
25 ///////////////////////////////////////////////////////////////////////////////
26 void LcdDelay(uchar u32Duration)
27 {
28 1 idata uchar i;
29 1
30 1 for(i=0;i<u32Duration;i++);
31 1 }
32
33 ///////////////////////////////////////////////////////////////////////////////
34 // 写指令
35 ///////////////////////////////////////////////////////////////////////////////
36 void wcmd(uchar cmd)
37 {
38 1 E=0;
39 1 RS=0;
40 1 RW=0;
41 1 E=1;
42 1 P0=cmd;
43 1 E=0;
44 1 }
45
46 ///////////////////////////////////////////////////////////////////////////////
47 // 写数据
48 ///////////////////////////////////////////////////////////////////////////////
49 void wdat(uchar dat)
50 {
51 1 E=0;
52 1 RS=1;
53 1 RW=0;
54 1 E=1;
55 1 P0=dat;
C51 COMPILER V7.07 GLCD 09/14/2005 15:20:56 PAGE 2
56 1 E=0;
57 1 }
58
59 ///////////////////////////////////////////////////////////////////////////////
60 // 输出左屏指令
61 ///////////////////////////////////////////////////////////////////////////////
62 void OutLI(uchar i)
63 {
64 1 CS1=1; // 左屏片选
65 1 CS2=0;
66 1 wcmd(i); // 写指令
67 1 }
68
69 ///////////////////////////////////////////////////////////////////////////////
70 // 输出左屏数据
71 ///////////////////////////////////////////////////////////////////////////////
72 void OutLD(uchar i)
73 {
74 1 CS1=1; // 左屏片选
75 1 CS2=0;
76 1 wdat(i); // 写数据
77 1 }
78
79 ///////////////////////////////////////////////////////////////////////////////
80 // 输出右屏指令
81 ///////////////////////////////////////////////////////////////////////////////
82 void OutRI(uchar i)
83 {
84 1 CS1=0;
85 1 CS2=1; // 右屏片选
86 1 wcmd(i); // 写指令
87 1 }
88
89 ///////////////////////////////////////////////////////////////////////////////
90 // 输出右屏数据
91 ///////////////////////////////////////////////////////////////////////////////
92 void OutRD(uchar i)
93 {
94 1 CS1=0;
95 1 CS2=1; // 右屏片选
96 1 wdat(i); // 写数据
97 1 }
98
99 ///////////////////////////////////////////////////////////////////////////////
100 // 判断LCD控制器是否忙
101 ///////////////////////////////////////////////////////////////////////////////
102 void LcdWaitBusy (unsigned char u8LcdSide)
103 {
104 1 u8LcdSide=u8LcdSide;
105 1 LcdDelay(5);
106 1 }
107
108 ///////////////////////////////////////////////////////////////////////////////
109 // 向LCD控制器写指令
110 ///////////////////////////////////////////////////////////////////////////////
111 void LcdInstructionWrite (uchar u8Instruction,uchar u8LcdSide)
112 {
113 1 LcdWaitBusy (u8LcdSide); // 如果忙就等待
114 1
115 1 if(u8LcdSide==RIGHT)
116 1 {
117 2 OutRI(u8Instruction); // 写右屏指令
C51 COMPILER V7.07 GLCD 09/14/2005 15:20:56 PAGE 3
118 2 }
119 1 else if(u8LcdSide==LEFT)
120 1 {
121 2 OutLI(u8Instruction); // 写左屏指令
122 2 }
123 1 }
124
125 ///////////////////////////////////////////////////////////////////////////////
126 // 向LCD控制器写数据
127 ///////////////////////////////////////////////////////////////////////////////
128 void LcdDataWrite (uchar u8Data,uchar u8LcdSide)
129 {
130 1 LcdWaitBusy (u8LcdSide); // 如果忙就等待
131 1
132 1 if(u8LcdSide == LEFT)
133 1 {
134 2 OutLD(u8Data); // 写左屏数据
135 2 }
136 1 else if(u8LcdSide == RIGHT)
137 1 {
138 2 OutRD(u8Data); // 写左屏数据
139 2 }
140 1 }
141
142 ///////////////////////////////////////////////////////////////////////////////
143 // 清LCD屏幕
144 //
145 // LCD分8页
146 ///////////////////////////////////////////////////////////////////////////////
147 void GLCD_ClearScreen ()
148 {
149 1 idata uchar u8Page=0;
150 1 idata uchar u8Column=0;
151 1
152 1 OutLI(START_LINE);
153 1 OutLI(X_ADRESS);
154 1 OutLI(Y_ADRESS);
155 1 OutLI(DISPLAY_ON);
156 1 OutRI(START_LINE);
157 1 OutRI(X_ADRESS);
158 1 OutRI(Y_ADRESS);
159 1 OutRI(DISPLAY_ON);
160 1
161 1 for(u8Page=0;u8Page<8;u8Page++)
162 1 {
163 2 LcdInstructionWrite(X_ADRESS|u8Page,LEFT); // 设置页号
164 2 LcdInstructionWrite(Y_ADRESS,LEFT); // 设置列号
165 2
166 2 for(u8Column=0;u8Column<64;u8Column++)
167 2 {
168 3 LcdDataWrite(0X00,LEFT);
169 3 }
170 2
171 2 LcdInstructionWrite(X_ADRESS|u8Page,RIGHT); // 设置页号
172 2 LcdInstructionWrite(Y_ADRESS,RIGHT); // 设置列号
173 2
174 2 for(u8Column=0;u8Column<64;u8Column++)
175 2 {
176 3 LcdDataWrite(0X00,RIGHT);
177 3 }
178 2 }
179 1 }
C51 COMPILER V7.07 GLCD 09/14/2005 15:20:56 PAGE 4
180
181 ///////////////////////////////////////////////////////////////////////////////
182 // LCD控制器初始化
183 ///////////////////////////////////////////////////////////////////////////////
184 void GLCD_LcdInit()
185 {
186 1 OutLI(START_LINE); // 起始行
187 1 OutLI(X_ADRESS);
188 1 OutLI(Y_ADRESS);
189 1 OutLI(DISPLAY_ON);
190 1 OutRI(START_LINE);
191 1 OutRI(X_ADRESS);
192 1 OutRI(Y_ADRESS);
193 1 OutRI(DISPLAY_ON);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -