📄 lcd16b20.lst
字号:
C51 COMPILER V6.23a LCD16B20 10/16/2008 12:20:45 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE LCD16B20
OBJECT MODULE PLACED IN LCD16B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD16B20.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X52.H>
2 #include <intrins.h>
3 #include "LCD16B20.H"
4 #define NOP() _nop_();_nop_();_nop_();_nop_();_nop_();
5 /*************************************************
6 * 函数说明:读取AC地址 *
7 * 输出参数: unsigned char AC: 表示AC地址
8 **************************************************/
9 #if LCD_EN_readBFAC
10 unsigned char LCDreadBFAC(void)
11 {
12 1 unsigned char redata;
13 1 #if LCD_DL<8
unsigned char temp;
#endif
16 1
17 1 LCD_RS=0;//选择指令寄存器
18 1 NOP();
19 1 LCD_RW=1;//读取指令寄存器
20 1 NOP();
21 1 #if LCD_DL>4
22 1 LCD_Data_Port=0xff;
23 1 LCD_EN=1;
24 1 NOP();
25 1 redata=LCD_Data_Port;
26 1 #elif
LCD_Data_Port=LCD_Data_Port | 0xf0;
LCD_EN=1;
NOP();
redata=LCD_Data_Port;
LCD_EN=0;
redata=redata & 0xf0;
NOP();
LCD_EN=1;
NOP();
temp=LCD_Data_Port;
LCD_EN=0;
temp=temp>>4;
temp=temp & 0xf;
redata=redata | temp;
#endif
43 1
44 1 return (redata);
45 1 }
46 #endif
47
48 /*************************************************
49 * 函数说明:等等LCD16B20空闲 *
50 **************************************************/
51 #if LCD_EN_waitForReady
52 void LCDwaitForReady(void)
53 {
54 1 unsigned char i,re;
55 1 i=100;
C51 COMPILER V6.23a LCD16B20 10/16/2008 12:20:45 PAGE 2
56 1 do
57 1 {
58 2 re=LCDreadBFAC();
59 2 if((re & 0x80)==0)
60 2 break;
61 2 } while(i--!=0);
62 1 }
63 #endif
64
65
66 /********************************************************
67 * 函数说明:向LCD发送指令函数 *
68 * 输入: 需要发送的指令 *
69 ********************************************************/
70 #if LCD_EN_SendCommand
71 void LCDSendCommand(unsigned char Command)
72 {
73 1 #if LCD_DL<8
unsigned char order;
#endif
76 1
77 1 LCDwaitForReady();
78 1 LCD_RS=0;//选择指令寄存器
79 1 NOP();
80 1 LCD_RW=0;//MCU向LCD写入命令数据
81 1 NOP();
82 1
83 1 #if LCD_DL>4
84 1 LCD_Data_Port=Command;
85 1 NOP();
86 1 LCD_EN=1;
87 1 NOP();
88 1 LCD_EN=0;
89 1 #elif
order=Command & 0xf0;
LCD_Data_Port=LCD_Data_Port | order;
NOP();
LCD_EN=1;
NOP();
LCD_EN=0;
order=Command & 0xf;
order=order << 4;
order=order & 0xf0;
LCD_Data_Port=LCD_Data_Port | order;
NOP();
LCD_EN=1;
NOP();
LCD_EN=0;
#endif
105 1 }
106 #endif
107
108
109 /*********************************************************************
110 * 函数说明:LCD清屏,DD RAM的内容被清除,光标回到左上角原点,AC=0 *
111 **********************************************************************/
112 #if LCD_EN_clear
113 void LCDclear(void)
114 {
115 1 LCDSendCommand(0x1);
116 1 }
117 #endif
C51 COMPILER V6.23a LCD16B20 10/16/2008 12:20:45 PAGE 3
118
119
120 /*******************************************************************************
121 * 函数说明:LCD软复位,DD RAM的内容不变,但光标和光标所在的字符回到左上角原点 *
122 ********************************************************************************/
123 #if LCD_EN_goHome
void LCDgoHome(void)
{
LCDSendCommand(0x2);
}
#endif
129
130 /********************************************************
131 * 函数说明:输入方式设置,设置光标、画面移动方式 *
132 * 输入参数: bit I_D:表示读写之后AC情况,I_D=1 *
133 * 表示AC+1;I_D=0表示AC-1; *
134 * bit S: 表示画面是否移动,S=1表示 *
135 * 画面平移;S=0表示画面不动 *
136 ********************************************************/
137 /*
138 当S=1且数据写入DD RAM中时候,显示将全部左边移动(I_D=1),或者全部右边移动(I_D=0),即光标不移动
139 当S=0,画面不动,光标移动(左边移动:I_D=0,右边移动:I_D=1)
140 */
141 #if LCD_EN_setInputModel
142 void LCDsetInputModel(bit I_D,bit S)
143 {
144 1 unsigned char order;
145 1 order=0x4;
146 1 if(I_D)
147 1 order=order+0x2;
148 1 if(S)
149 1 order=order+0x1;
150 1 LCDSendCommand(order);
151 1 }
152 #endif
153
154
155 /***************************************************************
156 * 函数说明:显示模式设置,设置画面、光标以及光标是否闪烁开关 *
157 * 输入参数: bit D: 表示画面是否显示 *
158 * bit C: 表示光标是否显示 *
159 * bit B: 表示光标是否闪烁 *
160 ****************************************************************/
161 #if LCD_EN_setDisplayModel
162 void LCDsetDisplayModel(bit D,bit C,bit B)
163 {
164 1 unsigned char order;
165 1 order=0x8;
166 1 if(D)
167 1 order=order+0x4;
168 1 if(C)
169 1 order=order+0x2;
170 1 if(B)
171 1 order=order+0x1;
172 1 LCDSendCommand(order);
173 1 }
174 #endif
175
176
177 //画面和光标一起右边移动n个字符位置
178 #if LCD_EN_shiftRight
void LCDshiftRight(unsigned char n) //shift by n characters Right
C51 COMPILER V6.23a LCD16B20 10/16/2008 12:20:45 PAGE 4
{
unsigned char i;
for(i=0;i<n;i++)
LCDSendCommand(0x1e);
}
#endif
186 //-----------------------------------------------------------------
187 //画面和光标一起左边移动n个字符位置
188
189 #if LCD_EN_shiftLeft
void LCDshiftLeft(unsigned char n) //shift by n characters Left
{
unsigned char i;
for(i=0;i<n;i++)
LCDSendCommand(0x18);
}
#endif
197 //-----------------------------------------------------------------
198 //光标往右边移动n个字符位置
199 #if LCD_EN_cursorRight
void LCDcursorRight(unsigned char n) //shif cursor right by n
{
unsigned char i;
for(i=0;i<n;i++)
LCDSendCommand(0x14);
}
#endif
207 //------------------------------------------------------------------
208 //光标往左边移动n个字符位置
209 #if LCD_EN_cursorLeft
void LCDcursorLeft(unsigned char n) //Shift cursor left by n
{
unsigned char i;
for(i=0;i<n;i++)
LCDSendCommand(0x10);
}
#endif
217 //------------------------------------------------------------------
218
219
220 /*******************************************************************
221 * 函数说明:设置数据接口位数是4为还是8位,显示行数是一行还是二行, *
222 字体格式是5*7还是5*10 *
223 * 输入参数: bit DL: 表示数据接口长度,DL=1,表示8位;DL=0,表示4为 *
224 * bit N: 表示显示行数,N=1,表示两行;N=0,表示一行 *
225 * bit F: 表示字体格式,F=1,表示5*10;F=0,表示5*7 *
226 ********************************************************************/
227 #if LCD_EN_setFunction
228 void LCDsetFunction(bit DL,bit N,bit F)
229 {
230 1 unsigned char order;
231 1 order=0x20;
232 1 if(DL)
233 1 order=order+0x10;
234 1 if(N)
235 1 order=order+0x8;
236 1 if(F)
237 1 order=order+0x4;
238 1 LCDSendCommand(order);
239 1 }
240 #endif
241
C51 COMPILER V6.23a LCD16B20 10/16/2008 12:20:45 PAGE 5
242
243 /**************************************************
244 * 函数说明:设置CG RAM地址 *
245 * 输入参数: unsigned char CG: 表示CG RAM地址 *
246 ***************************************************/
247 #if LCD_EN_setCGRAMAddress
void LCDsetCGRAMAddress(unsigned char CG)
{
unsigned char order;
order=0x40;
order=order+CG;
LCDSendCommand(order);
}
#endif
256
257
258
259 /*************************************************
260 * 函数说明:MCU向LCD16B20写入数据 *
261 * 输入参数: unsigned char DATA *
262 **************************************************/
263 #if LCD_EN_writeData
264 void LCDwriteData(unsigned char DATA)
265 {
266 1 #if LCD_DL<8
unsigned char d;
#endif
269 1
270 1 LCDwaitForReady();
271 1 LCD_RS=1;//选择数据寄存器
272 1 NOP();
273 1 LCD_RW=0;//MCU向LCD写入
274 1 NOP();
275 1 #if LCD_DL>4
276 1 LCD_Data_Port=DATA;
277 1 NOP();
278 1 LCD_EN=1;
279 1 NOP();
280 1 LCD_EN=0;
281 1 #elif
d=DATA & 0xf0;
LCD_Data_Port=LCD_Data_Port | d;
NOP();
LCD_EN=1;
NOP();
LCD_EN=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -