📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 10/24/2006 12:59:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************************
2 程序名称:LCD驱动程序
3 显示功能:显示ASCII码
4 硬件接法:D/I---------A0
5 R/W---------A1
6 E-----------读写0xA000~0xA003时,选中
7 CSA---------P1.5(前半屏选通,低电平有效)
8 CSB---------P1.6(后半屏选通,低电平有效)
9 DB0~DB7----D0~D7
10 *******************************************************************************/
11
12
13 #include "Lcd.h"
14 #include "ASCII.h"
15
16
17 /*******************************************************************************
18 函数:LcdWaitBusy()
19 功能:读取LCD的Busy标志,如果LCD忙则等待,如果空闲则返回
20 说明:每次操作之前都应当确认LCD处于空闲状态
21 *******************************************************************************/
22 void LcdWaitBusy()
23 {
24 1 while ( (XBYTE[0xA002] & 0x80) != 0 );
25 1 }
26
27
28 /*******************************************************************************
29 函数:LcdOn()
30 功能:打开LCD显示
31 *******************************************************************************/
32 void LcdOn()
33 {
34 1 LcdWaitBusy();
35 1 XBYTE[0xA000] = 0x3F;
36 1 }
37
38
39 /*******************************************************************************
40 函数:LcdOff()
41 功能:关闭LCD显示
42 *******************************************************************************/
43 void LcdOff()
44 {
45 1 LcdWaitBusy();
46 1 XBYTE[0xA000] = 0x3E;
47 1 }
48
49
50 /*******************************************************************************
51 函数:LcdStartLine()
52 功能:设置显示起始行
53 参数:line是行号,取值0~63
54 *******************************************************************************/
55 void LcdStartLine(unsigned char line)
C51 COMPILER V7.06 LCD 10/24/2006 12:59:48 PAGE 2
56 {
57 1 LcdWaitBusy();
58 1 XBYTE[0xA000] = line | 0xC0;
59 1 }
60
61
62 /*******************************************************************************
63 函数:LcdSetP()
64 功能:设置页地址
65 参数:page取值0~7
66 *******************************************************************************/
67 void LcdSetP(unsigned char page)
68 {
69 1 LcdWaitBusy();
70 1 XBYTE[0xA000] = (page & 0x07) | 0xB8;
71 1 }
72
73
74 /*******************************************************************************
75 函数:LcdSetY()
76 功能:设置Y地址
77 参数:y取值0~63
78 *******************************************************************************/
79 void LcdSetY(y)
80 {
81 1 LcdWaitBusy();
82 1 XBYTE[0xA000] = (y & 0x3F) | 0x40;
83 1 }
84
85
86 /*******************************************************************************
87 函数:LcdWriteDat()
88 功能:写显示数据
89 参数:dat为显示数据
90 说明:写完后,Y地址自动加1
91 *******************************************************************************/
92 void LcdWriteDat(unsigned char dat)
93 {
94 1 LcdWaitBusy();
95 1 XBYTE[0xA001] = dat;
96 1 }
97
98
99 /*******************************************************************************
100 函数:LcdReadDat()
101 功能:读显示数据
102 返回:读到的数据
103 *******************************************************************************/
104 /*
105 unsigned char LcdReadDat()
106 {
107 LcdWaitBusy();
108 return XBYTE[0xA003];
109 }
110 */
111
112
113 void _LcdClear_()
114 {
115 1 unsigned char p,y;
116 1 for ( p=0; p<8; p++ )
117 1 {
C51 COMPILER V7.06 LCD 10/24/2006 12:59:48 PAGE 3
118 2 LcdSetP(p);
119 2 LcdSetY(0);
120 2 for ( y=0; y<64; y++ )
121 2 {
122 3 LcdWriteDat(0x00);
123 3 }
124 2 }
125 1 }
126
127
128 //定义光标的横纵坐标
129 unsigned char LcdCursorX;
130 unsigned char LcdCursorY;
131
132
133 /*******************************************************************************
134 函数:LcdGotoXY()
135 功能:把光标移到(x,y)处
136 参数:(x,y)为屏幕坐标,x=0~15,y=0~4
137 *******************************************************************************/
138 void LcdGotoXY(unsigned char x, unsigned char y)
139 {
140 1 LcdCursorX = x & 0x0F;
141 1 LcdCursorY = y & 0x03;
142 1 }
143
144
145 /*******************************************************************************
146 函数:LcdClear()
147 功能:LCD清屏
148 *******************************************************************************/
149 void LcdClear()
150 {
151 1 LCD_CSA = 0;
152 1 _LcdClear_();
153 1 LCD_CSA = 1;
154 1 LCD_CSB = 0;
155 1 _LcdClear_();
156 1 LCD_CSB = 1;
157 1 LcdCursorX = 0;
158 1 LcdCursorY = 0;
159 1 }
160
161
162 /*******************************************************************************
163 函数:LcdInit()
164 功能:LCD初始化
165 *******************************************************************************/
166 void LcdInit()
167 {
168 1 LCD_CSA = 1;
169 1 LCD_CSB = 1;
170 1 LcdStartLine(0);
171 1 LcdClear();
172 1 LcdOn();
173 1 }
174
175
176 /*******************************************************************************
177 函数:LcdPutchar()
178 功能:在LCD上显示ASCII码
179 *******************************************************************************/
C51 COMPILER V7.06 LCD 10/24/2006 12:59:48 PAGE 4
180 void LcdPutchar(unsigned char c)
181 {
182 1 unsigned char i;
183 1 unsigned char n;
184 1 unsigned char code *p;
185 1 //检查是否为可显示字符
186 1 if ( c < ' ' ) //如果是控制字符
187 1 {
188 2 if ( c == '\r' ) //如果是回车符
189 2 {
190 3 LcdCursorX = 0;
191 3 }
192 2 else if ( c == '\n' ) //如果是换行符
193 2 {
194 3 LcdCursorY++;
195 3 if ( LcdCursorY >= 4 )
196 3 {
197 4 LcdCursorY = 0;
198 4 }
199 3 }
200 2 return;
201 2 }
202 1 //计算字符点阵位置
203 1 p = ASCII_TAB + (c - ' ') * 16;
204 1 //确定显示位置在左半屏还是右半屏
205 1 if ( LcdCursorX < 8 )
206 1 {
207 2 LCD_CSB = 0;
208 2 // x = 0;
209 2 }
210 1 else
211 1 {
212 2 LCD_CSA = 0;
213 2 // x = 64;
214 2 }
215 1 //显示ASCII码
216 1 for ( i=0; i<2; i++ )
217 1 {
218 2 LcdSetP(LcdCursorY*2+i); //设置页地址
219 2 LcdSetY(LcdCursorX*8); //设置Y地址
220 2 n = 8;
221 2 do
222 2 {
223 3 LcdWriteDat(*p++); //写入显示数据
224 3 } while ( --n != 0 );
225 2 }
226 1 //取消选中
227 1 if ( LcdCursorX < 8 )
228 1 {
229 2 LCD_CSB = 1;
230 2 }
231 1 else
232 1 {
233 2 LCD_CSA = 1;
234 2 }
235 1 //光标移到下个位置
236 1 LcdCursorX++;
237 1 if ( LcdCursorX >= 16 )
238 1 {
239 2 LcdCursorX = 0;
240 2 LcdCursorY++;
241 2 if ( LcdCursorY >= 4 )
C51 COMPILER V7.06 LCD 10/24/2006 12:59:48 PAGE 5
242 2 {
243 3 LcdCursorY = 0;
244 3 }
245 2 }
246 1 }
247
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = 1536 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 2
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 + -