📄 lcd12864.lst
字号:
146 1 LCD_E = 1;
147 1 LCD_E = 0;
148 1 }
149
150 //读数据
151 unsigned char ReadDataLCD(void)
152 {
153 1 LCD_RS = 1;
154 1 LCD_RW = 1;
155 1 LCD_E = 0;
156 1 LCD_E = 0;
157 1 LCD_E = 1;
158 1 return(LCD_Data);
159 1 }
160
161 //读状态
162 unsigned char ReadStatusLCD(void)
163 {
164 1 LCD_Data = 0xFF;
165 1 LCD_RS = 0;
166 1 LCD_RW = 1;
167 1 LCD_E = 1;
168 1 while (LCD_Data & Busy); //检测忙信号
169 1 LCD_E = 0;
170 1 return(LCD_Data);
171 1 }
172
173 void LCDInit(void) //LCM初始化
174 {
175 1 WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号
176 1 WriteCommandLCD(0x01,1); //显示清屏
177 1 WriteCommandLCD(0x06,1); // 显示光标移动设置
178 1 WriteCommandLCD(0x0C,1); // 显示开及光标设置
179 1 }
C51 COMPILER V7.02a LCD12864 12/03/2008 18:04:56 PAGE 4
180 void LCDClear(void) //清屏
181 {
182 1 WriteCommandLCD(0x01,1); //显示清屏
183 1 WriteCommandLCD(0x34,1); // 显示光标移动设置
184 1 WriteCommandLCD(0x30,1); // 显示开及光标设置
185 1 }
186 void LCDFlash(void) //闪烁效果
187 {
188 1 WriteCommandLCD(0x08,1); //显示清屏
189 1 Delay400Ms();
190 1 WriteCommandLCD(0x0c,1); // 显示开及光标设置
191 1 Delay400Ms();
192 1 WriteCommandLCD(0x08,1); //显示清屏
193 1 Delay400Ms();
194 1 WriteCommandLCD(0x0c,1); // 显示开及光标设置
195 1 Delay400Ms();
196 1 WriteCommandLCD(0x08,1); //显示清屏
197 1 Delay400Ms();
198 1 }
199 //按指定位置显示一个字符
200 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
201 {
202 1 if(Y<1)
203 1 Y=1;
204 1 if(Y>4)
205 1 Y=4;
206 1 X &= 0x0F; //限制X不能大于16,Y不能大于1
207 1 switch(Y){
208 2 case 1:X|=0X80;break;
209 2 case 2:X|=0X90;break;
210 2 case 3:X|=0X88;break;
211 2 case 4:X|=0X98;break;
212 2 }
213 1 WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
214 1 WriteDataLCD(DData);
215 1 }
216
217 //按指定位置显示一串字符
218 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
219 {
220 1 unsigned char ListLength,X2;
221 1 ListLength = 0;
222 1 X2=X;
223 1 if(Y<1)
224 1 Y=1;
225 1 if(Y>4)
226 1 Y=4;
227 1 X &= 0x0F; //限制X不能大于16,Y在1-4之内
228 1 switch(Y){
229 2 case 1:X2|=0X80;break; //根据行数来选择相应地址
230 2 case 2:X2|=0X90;break;
231 2 case 3:X2|=0X88;break;
232 2 case 4:X2|=0X98;break;
233 2 }
234 1 WriteCommandLCD(X2, 1); //发送地址码
235 1 while (DData[ListLength]>=0x20) //若到达字串尾则退出
236 1 {
237 2 if (X <= 0x0F) //X坐标应小于0xF
238 2 {
239 3 WriteDataLCD(DData[ListLength]); //
240 3 ListLength++;
241 3 X++;
C51 COMPILER V7.02a LCD12864 12/03/2008 18:04:56 PAGE 5
242 3 Delay5Ms();
243 3 }
244 2 }
245 1 }
246
247 //图形显示122*32
248 void DisplayImage (unsigned char code *DData){
249 1 unsigned char x,y,i;
250 1 unsigned int tmp=0;
251 1 for(i=0;i<9;){ //分两屏,上半屏和下半屏,因为起始地址不同,需要分开
252 2 for(x=0;x<32;x++){ //32行
253 3 WriteCommandLCD(0x34,1);
254 3 WriteCommandLCD((0x80+x),1);//列地址
255 3 WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88
256 3 WriteCommandLCD(0x30,1);
257 3 for(y=0;y<16;y++)
258 3 WriteDataLCD(DData[tmp+y]);//读取数据写入LCD
259 3 tmp+=16;
260 3 }
261 2 i+=8;
262 2 }
263 1 WriteCommandLCD(0x36,1); //扩充功能设定
264 1 WriteCommandLCD(0x30,1);
265 1 }
266
267 //5ms延时
268 void Delay5Ms(void)
269 {
270 1 unsigned int TempCyc = 5552;
271 1 while(TempCyc--);
272 1 }
273
274 //400ms延时
275 void Delay400Ms(void)
276 {
277 1 unsigned char TempCycA = 5;
278 1 unsigned int TempCycB;
279 1 while(TempCycA--)
280 1 {
281 2 TempCycB=7269;
282 2 while(TempCycB--);
283 2 };
284 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 647 ----
CONSTANT SIZE = 1092 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -