📄 lcd.lst
字号:
C51 COMPILER V7.09 LCD 07/03/2006 09:19:46 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 LCD.C
3 128×64 LCD驱动程序
4 */
5
6
7 #include <INTRINS.H>
8 #include <ABSACC.H>
9 #include "LCD.H"
10
11
12 //定义屏幕光标(取值0~63,光标本身不可见)
13 unsigned char LcdCursor;
14
15
16 /*
17 函数:LcdLightOn()
18 功能:点亮背光灯
19 */
20 void LcdLightOn()
21 {
22 1 LCD_BL = 1;
23 1 }
24
25
26 /*
27 函数:LcdLightOff()
28 功能:熄灭背光灯
29 */
30 void LcdLightOff()
31 {
32 1 LCD_BL = 0;
33 1 }
34
35
36 /*
37 函数:LcdGetBF()
38 功能:读出状态位BF
39 返回:
40 BF=1,表示忙,不可进行任何操作
41 BF=0,表示不忙,可以进行正常操作
42 */
43 bit LcdGetBF()
44 {
45 1 unsigned char dat;
46 1 dat = XBYTE[0xD002]; //XBYTE的定义见<ABSACC.H>
47 1 return (bit)(dat & 0x80);
48 1 }
49
50
51 /*
52 函数:LcdWriteCmd()
53 功能:向LCD发送命令
54 参数:
55 cmd:命令字,详见器件的数据手册
C51 COMPILER V7.09 LCD 07/03/2006 09:19:46 PAGE 2
56 */
57 void LcdWriteCmd(unsigned char cmd)
58 {
59 1 while ( LcdGetBF() );
60 1 XBYTE[0xD000] = cmd;
61 1 }
62
63
64 /*
65 函数:LcdWriteDat()
66 功能:向LCD写入数据
67 参数:dat,要写入的数据
68 说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1
69 */
70 void LcdWriteDat(unsigned char dat)
71 {
72 1 while ( LcdGetBF() );
73 1 XBYTE[0xD001] = dat;
74 1 }
75
76
77 /*
78 函数:LcdReadDat()
79 功能:从LCD读出数据
80 返回:读出的数据
81 */
82 /*
83 unsigned char LcdReadDat()
84 {
85 volatile unsigned char dat;
86 while ( LcdGetBF() );
87 dat = XBYTE[0xD003];
88 dat = XBYTE[0xD003]; //需要连续执行两次才能够读出真正的数据
89 return dat;
90 }
91 */
92
93
94 /*
95 函数:LcdSetAC()
96 功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值
97 参数:
98 ac:地址计数器值,范围0~63
99 */
100 void LcdSetAC(unsigned char ac)
101 {
102 1 ac &= 0x3F;
103 1 ac |= 0x80;
104 1 LcdWriteCmd(ac);
105 1 }
106
107
108 /*
109 函数:LcdClear()
110 功能:LCD清屏,并使光标回到0
111 */
112 void LcdClear()
113 {
114 1 LcdWriteCmd(0x01); //清屏命令
115 1 LcdCursor = 0;
116 1 }
117
C51 COMPILER V7.09 LCD 07/03/2006 09:19:46 PAGE 3
118
119 /*
120 函数:LcdDelay()
121 功能:延时(t*100)个机器周期
122 */
123 void LcdDelay(unsigned char t)
124 {
125 1 unsigned char n;
126 1 do
127 1 {
128 2 n = 49;
129 2 while ( --n != 0 );
130 2 } while ( --t != 0 );
131 1 }
132
133
134 /*
135 函数:LcdInit()
136 功能:LCD初始化
137 */
138 void LcdInit()
139 {
140 1 LcdWriteCmd(0x30); //设置基本指令集
141 1 LcdDelay(3);
142 1 LcdWriteCmd(0x30); //设置基本指令集(需要再执行一次)
143 1 LcdDelay(1);
144 1 LcdWriteCmd(0x0C); //开启显示
145 1 LcdDelay(3);
146 1 LcdClear(); //清屏
147 1 LcdDelay(250);
148 1 LcdWriteCmd(0x06); //设置进入点
149 1 LcdDelay(10);
150 1 }
151
152
153 /*
154 函数:LcdCheckAC()
155 功能:根据光标位置调整AC
156 */
157 void LcdCheckAC()
158 {
159 1 switch ( LcdCursor )
160 1 {
161 2 case 16:
162 2 LcdSetAC(16);
163 2 break;
164 2 case 32:
165 2 LcdSetAC(8);
166 2 break;
167 2 case 48:
168 2 LcdSetAC(24);
169 2 break;
170 2 case 64:
171 2 LcdCursor = 0;
172 2 LcdSetAC(0);
173 2 break;
174 2 default:
175 2 break;
176 2 }
177 1 }
178
179
C51 COMPILER V7.09 LCD 07/03/2006 09:19:46 PAGE 4
180 /*
181 函数:LcdPutChar()
182 功能:显示ASCII码
183 参数:
184 c为可显示的ASCII码(0x20~0x7F)
185 */
186 void LcdPutChar(unsigned char c)
187 {
188 1 LcdWriteDat(c);
189 1 LcdCursor++;
190 1 LcdCheckAC();
191 1 }
192
193
194 /*
195 函数:LcdPutHZ()
196 功能:显示汉字
197 参数:
198 ch,cl:汉字编码
199 */
200 void LcdPutHZ(unsigned char ch, unsigned char cl)
201 {
202 1 if ( LcdCursor & 0x01 )
203 1 {//显示汉字时,必须偶地址对准,即光标不能是奇数
204 2 LcdPutChar(' '); //额外输出一个空格
205 2 }
206 1 LcdWriteDat(ch);
207 1 LcdWriteDat(cl);
208 1 LcdCursor += 2;
209 1 LcdCheckAC();
210 1 }
211
212
213 /*
214 函数:LcdPuts()
215 功能:显示字符串
216 参数:
217 *s:要显示的字符串(可同时包含ASCII码和汉字)
218 */
219 void LcdPuts(unsigned char *s)
220 {
221 1 unsigned char ch, cl;
222 1 for (;;)
223 1 {
224 2 ch = *s++;
225 2 if ( ch == '\0' ) break;
226 2 if ( ch < 0x80 )
227 2 {
228 3 LcdPutChar(ch);
229 3 }
230 2 else
231 2 {
232 3 cl = *s++;
233 3 LcdPutHZ(ch,cl);
234 3 }
235 2 }
236 1 }
237
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 249 ----
C51 COMPILER V7.09 LCD 07/03/2006 09:19:46 PAGE 5
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 3
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 + -