📄 lcd.lst
字号:
C51 COMPILER V7.20 LCD 11/20/2007 08:22:13 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\pub\lcd.c BROWSE INCDIR(.\;C:\KEIL\C51\Include) DEBUG OBJECTEXTEND PRINT
-(.\lcd.lst) OBJECT(.\lcd.obj)
line level source
*** WARNING C500 IN LINE 1 OF ..\PUB\LCD.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 /*******************************************************************
2 * lcd.c
3 *
4 * LCD utility for SST89E58/SST89E516 Experimental BOARD
5 *
6 *
7 * Copyright(C) 2007, Finley ZHU, HUST
8 * All rights reserved.
9 *
10 * History
11 * 2007.11.18 ver 1.00
12 *
13 *******************************************************************/
14
15 #include <SST/SST89x5x4.H>
16
17 #include "..\pub\board.h"
18 #include "LCD.h"
19
20 sbit LCD_RS = DEF_LCD_RS;
21 sbit LCD_RW = DEF_LCD_RW;
22
23
24 /*******************************************************************
25 *
26 * Internal routines
27 *
28 *******************************************************************/
29 /*
30 * Lcd_ReadStatus
31 * 功能: LCD读状态
32 * 参数: 无
33 * 返回: 状态
34 */
35 unsigned char iLcd_ReadStatus()
36 {
37 1 unsigned char rt ;
38 1
39 1 LCD_SetCmdMode(); /* 1. 设置LCD为命令状态模式 */
40 1 LCD_SetReadMode(); /* 2. 设置LCD为读模式 */
41 1 P0 = 0xff ; /* 3. 释放P0口 */
42 1 LCD_Enable(); /* 4. 选中LCD, 多次选中等待LCD就绪 */
43 1 LCD_Enable();
44 1 LCD_Enable();
45 1 LCD_Enable();
46 1 rt = P0 ; /* 5. 通过P0端口读值 */
47 1 LCD_Disable(); /* 6. 锁存 */
48 1 return rt ;
49 1 }
50
51 /*
52 * Lcd_ReadData
53 * 功能: LCD读数据
C51 COMPILER V7.20 LCD 11/20/2007 08:22:13 PAGE 2
54 * 参数: 无
55 * 返回: 数据
56 */
57 unsigned char iLcd_ReadData()
58 {
59 1 unsigned char rt ;
60 1
61 1 LCD_SetDataMode(); /* 1. 设置LCD为数据模式 */
62 1 LCD_SetReadMode(); /* 2. 设置LCD为读出模式 */
63 1 P0 = 0xff ; /* 3. 释放P0口 */
64 1 LCD_Enable(); /* 4. 选中LCD, 多次选中等待LCD就绪 */
65 1 LCD_Enable();
66 1 LCD_Enable();
67 1 LCD_Enable();
68 1 rt = P0 ; /* 5. 通过P0端口读值 */
69 1 LCD_Disable(); /* 6. 锁存 */
70 1 return rt ;
71 1 }
72
73 /*
74 * Lcd_WriteCmd
75 * 功能: LCD写命令
76 * 参数:
77 * value: 写的具体值
78 * attrib: 0 - 不检测忙信号
79 * 1 - 监测忙信号
80 * 返回: 无
81 */
82 void Lcd_WriteCmd(unsigned char value , unsigned char attrib)
83 {
84 1 if(attrib)
85 1 while( iLcd_ReadStatus()&0x80 ); /* 1. 等待LCD就绪状态 */
86 1 LCD_SetCmdMode(); /* 2. 设置LCD为命令模式 */
87 1 LCD_SetWriteMode(); /* 3. 设置LCD为写入模式 */
88 1 LCD_Enable(); /* 4. 选中LCD */
89 1 P0 = value ; /* 5. 通过P0端口写值 */
90 1 LCD_Disable(); /* 6. 锁存 */
91 1 }
92
93 /*
94 * Lcd_WriteData
95 * 功能: LCD写数据
96 * 参数:
97 * value: 写的具体值
98 * attrib: 0 - 不检测忙信号
99 * 1 - 监测忙信号
100 * 返回: 无
101 */
102 void Lcd_WriteData(unsigned char value , unsigned char attrib)
103 {
104 1 if(attrib)
105 1 while( iLcd_ReadStatus()&0x80 ); /* 1. 等待LCD就绪状态 */
106 1 LCD_SetDataMode(); /* 2. 设置LCD为数据模式 */
107 1 LCD_SetWriteMode(); /* 3. 设置LCD为写入模式 */
108 1 LCD_Enable(); /* 4. 选中LCD */
109 1 P0 = value ; /* 5. 通过P0端口写值 */
110 1 LCD_Disable(); /* 6. 锁存 */
111 1 }
112
113 #define Lcd_WriteCmdNoWait(x) Lcd_WriteCmd((x), 0)
114 #define Lcd_WriteCmdWait(x) Lcd_WriteCmd((x), 1)
115 #define Lcd_WriteDataNoWait(x) Lcd_WriteData((x), 0)
C51 COMPILER V7.20 LCD 11/20/2007 08:22:13 PAGE 3
116 #define Lcd_WriteDataWait(x) Lcd_WriteData((x), 1)
117
118
119 /*******************************************************************
120 *
121 * published routines
122 *
123 *******************************************************************/
124
125 /*
126 * LCD_Init
127 * 功能: LCD初始化
128 * 参数: 无
129 * 返回: 无
130 */
131 void LCD_Init(void)
132 {
133 1 Delay500Ms();
134 1
135 1 /* 写指令0x38连续3次, 不检测忙信号*/
136 1 Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
137 1 Delay5Ms();
138 1
139 1 Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
140 1 Delay5Ms();
141 1
142 1 Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
143 1 Delay5Ms();
144 1
145 1 /* 以后的读写操作均要判断忙信号 */
146 1 Lcd_WriteCmdWait(LCD_CMD_SETDISPMODE);
147 1
148 1 /* 先设置关屏 */
149 1 Lcd_WriteCmdWait(LCD_CMD_CURSOR);
150 1
151 1 /* 清屏 */
152 1 Lcd_WriteCmdWait(LCD_CMD_CLEAR);
153 1
154 1 /* 设置光标显示模式 */
155 1 Lcd_WriteCmdWait(LCD_CMD_CURPOS|LCD_CMD_CURPOS_INC);
156 1
157 1 /* 开屏, 显示光标, 闪烁 */
158 1 Lcd_WriteCmdWait(LCD_CMD_CURSOR|LCD_CMD_CURSOR_ON|
159 1 LCD_CMD_CURSOR_SHOW|LCD_CMD_CURSOR_HILIGHT);
160 1 }
161
162 /*
163 * LCD_Clear
164 * 功能: LCD清屏
165 * 参数: 无
166 * 返回: 无
167 */
168 void LCD_Clear()
169 {
170 1 Lcd_WriteCmdWait(LCD_CMD_CLEAR);
171 1 }
172
173 /*
174 * LCD_Cursor
175 * 功能: LCD定位光标
176 * 参数:
177 * x - 列
C51 COMPILER V7.20 LCD 11/20/2007 08:22:13 PAGE 4
178 * y - 行
179 * 返回: 无
180 */
181 void LCD_Cursor(char x , char y)
182 {
183 1 unsigned char temp;
184 1
185 1 temp = x & 0xf; /* 列有效范围为 0-15 */
186 1 if ( y&0x01 ) /* 行有效范围为 0, 1 */
187 1 temp |= 0x40;
188 1 Lcd_WriteCmdWait(LCD_CMD_SETDP|temp);
189 1 }
190
191 /*
192 * LCD_TTYOut
193 * 功能: LCD以TTY方式显示字符
194 * 参数:
195 * aChar - 字符
196 *
197 * 返回: 无
198 */
199 void LCD_TTYOut(char aChar)
200 {
201 1 Lcd_WriteDataWait(aChar);
202 1 }
203
204 /*
205 * LCD_PutChar
206 * 功能: LCD在指定位置显示字符
207 * 参数:
208 * x - 列
209 * y - 行
210 * aChar - 字符
211 *
212 * 返回: 无
213 */
214 void LCD_PutChar(char x , char y , char aChar)
215 {
216 1 LCD_Cursor(x,y);
217 1 Lcd_WriteDataWait(aChar);
218 1 }
219
220 /*
221 * LCD_PutStr
222 * 功能: LCD在指定开始位置处显示字符串
223 * 参数:
224 * x - 列
225 * y - 行
226 * aChar - 字符
227 *
228 * 返回: 无
229 */
230 void LCD_PutStr(char x , char y , char* str)
231 {
232 1 unsigned char i,len=0;
233 1 /* 计算字符串长度 */
234 1 while (str[len] >31)
235 1 len++;
236 1
237 1 /* 显示字符串 */
238 1 for (i=0;i<len;i++)
239 1 {
C51 COMPILER V7.20 LCD 11/20/2007 08:22:13 PAGE 5
240 2 LCD_PutChar(x++,y,str[i]);
241 2 if ( x == 16 )
242 2 {
243 3 x = 0; y ^= 1;
244 3 }
245 2 }
246 1 }
247
248 /*
249 * LCD_ReadData
250 * 功能: LCD读数据
251 * 参数: 无
252 * 返回: 数据
253 */
254 unsigned char LCD_ReadData()
255 {
256 1 /* 监测忙状态 */
257 1 while( iLcd_ReadStatus()&0x80 );
258 1 return iLcd_ReadData();
259 1 }
260
261 /************* END of FILE *****************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 343 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -