📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 12/01/2007 19:20:00 PAGE 1
C51 COMPILER V7.50, 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 /**
3 /** 模 块 名: -------------------Virtual_UART.C-----------------------------
4 /** -----------------虚拟串口调试------------------------------*/
5 /** 功能描述:
6 /**
7 /** 创 建 人: huangtiexiong 日期:2006-11-28 */
8 /** 修 改 人: 日期:2006-11-28 */
9 /** 其他说明:
10 /******************************************************************************/
11
12 #include "Includes.h"
13
14
15 /*************************************************
16 模块级变量申明
17 *************************************************/
18 static void LCD_WriteDat(int8u lcd_dat);
19 static void LCD_WriteCmd(int8u lcd_cmd);
20 static int8u LCD_ReadStatus(void);
21 static void LCD_Goto(int8u x,int8u y);
22
23 /*******************************************************************************
24 *** 函 数 名: void LCD_Init(void)
25 *** 功能描述:
26 *** 全局变量:
27 *** 输 入:
28 *** 输 出:
29 *** 创 建 人:huangtiexiong 日期:2006-11-28
30 *** 修 改 人: 日期:2006-11-28
31 *** 函数说明: 字符LCD初始化;
32 /******************************************************************************/
33 extern void LCD_Init(void)
34 {
35 1 Delay20ms();
36 1 /*************************************************
37 1 功能设置: DB5=1;DB6...=0;
38 1 DB4=1:8位接口; 0:4位接口;
39 1 DB3=1:双行显示;0:单行显示;
40 1 DB3=1:5×10点阵;0:5×7点阵;
41 1 *************************************************/
42 1 LCD_WriteCmd(0x38); //8位机接口、双行显示、5×7字符点阵;
43 1 /*************************************************
44 1 显示控制:DB3=1;DB4...=0;
45 1 DB2=1:开启显示;0:关闭LCD显示;
46 1 DB1=1:显示光标;0:光标隐藏;
47 1 DB0=1:光标闪烁;0:光标闪烁关闭;
48 1 *************************************************/
49 1 LCD_WriteCmd(0x0c); //显示开启、光标不显示也不闪烁;
50 1 /*************************************************
51 1 清屏指令:DB0=1;DB1...=0;
52 1 *************************************************/
53 1 LCD_WriteCmd(0x01); //清屏;
54 1 /****************************************************************
55 1 访问模式:DB2=1;DB3...=0;
C51 COMPILER V7.50 LCD 12/01/2007 19:20:00 PAGE 2
56 1 DB1=1:对内部Ram读写后AC自增,否则自减;
57 1 DB0=1:与DB1设置有关,对DD RAM写时同时整屏移动1位;
58 1 *****************************************************************/
59 1 LCD_WriteCmd(0x06); //光标右移一位、整屏不移动;
60 1
61 1 LCD_Goto(0,0);
62 1 }
63 static void LCD_WriteDat(int8u lcd_dat)
64 {
65 1 int8u tmp;
66 1 tmp = LCD_ReadStatus(); //读状态;
67 1 while((tmp & 0x80)) //是否忙 ?
68 1 {
69 2 tmp = LCD_ReadStatus();
70 2 }
71 1 #if 0
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
LCD_DATA = lcd_dat;
_nop_();
_nop_();
LCD_EN = 0;
#endif
82 1 LCD_RS = 1;
83 1 LCD_RW = 0;
84 1 LCD_DATA = lcd_dat;
85 1 _nop_();
86 1 LCD_EN = 0;
87 1 _nop_();
88 1 _nop_();
89 1 LCD_EN = 1;
90 1
91 1 }
92 static void LCD_WriteCmd(int8u lcd_cmd)
93 {
94 1 int8u tmp;
95 1 tmp = LCD_ReadStatus();
96 1 while((tmp & 0x80))
97 1 {
98 2 tmp = LCD_ReadStatus();
99 2 }
100 1 #if 0
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
LCD_DATA = lcd_cmd;
_nop_();
_nop_();
LCD_EN = 0;
#endif
111 1 LCD_RS = 0;
112 1 LCD_RW = 0;
113 1 LCD_DATA = lcd_cmd;
114 1 _nop_();
115 1 LCD_EN = 0;
116 1 _nop_();
117 1 _nop_();
C51 COMPILER V7.50 LCD 12/01/2007 19:20:00 PAGE 3
118 1 LCD_EN = 1;
119 1 }
120 static int8u LCD_ReadStatus(void)
121 {
122 1 int8u tmp;
123 1 #if 0
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
tmp = LCD_DATA;
LCD_EN = 0;
#endif
130 1 LCD_DATA = 0xff;
131 1 LCD_RS = 0;
132 1 LCD_RW = 1;
133 1 LCD_EN = 0;
134 1 _nop_();
135 1 _nop_();
136 1 LCD_EN = 1;
137 1 tmp = LCD_DATA;
138 1 return tmp;
139 1 }
140 static void LCD_Goto(int8u x,int8u y)
141 {
142 1 int8u tmp;
143 1 if(y) //若是第二行;
144 1 {
145 2 tmp = 0xc0 + x;
146 2 LCD_WriteCmd(tmp);
147 2 }
148 1 else
149 1 {
150 2 tmp = 0x80 + x;
151 2 LCD_WriteCmd(tmp);
152 2 }
153 1 }
154
155 #if 0
extern void LCD_DisplayShiftR(void) //整屏右移;
{
LCD_WriteCmd(0x1f);
}
extern void LCD_DisplayShiftL(void) //整屏左移;
{
LCD_WriteCmd(0x18);
}
#endif
166
167 extern void LCD_Display(int8u row,int8u *str)
168 {
169 1 if(row)
170 1 {
171 2 LCD_Goto(0,1);
172 2 }
173 1 else
174 1 {
175 2 LCD_Goto(0,0);
176 2 }
177 1 while(*str != '\0')
178 1 {
179 2 LCD_WriteDat(*str++);
C51 COMPILER V7.50 LCD 12/01/2007 19:20:00 PAGE 4
180 2 }
181 1 }
182
183 #if 0
extern void LCD_Display(int8u x,int8u y,int8u disp_dat)
{
LCD_Goto(x,y);
LCD_WriteDat(disp_dat);
}
#endif
190
191 #if 0
extern void LCD_Display(int8u disp_dat)
{
int8u tmp;
tmp = LCD_ReadStatus();
tmp &= 0x7f;
if(tmp == 0x10) //第一行显示满则转向第二行;
{
LCD_Goto(0,1);
}
if(tmp == 0x50) //全屏显示满则清屏;
{
LCD_WriteCmd(0x01);
}
LCD_WriteDat(disp_dat); //将接收字符显示在LCD屏上;
}
#endif
208
209 extern void Delay20ms() //粗略延时;
210 {
211 1 int16u tmp = 50000;
212 1 while(tmp--);
213 1 }
214 /*******************************************************************************
215 **** End Of File
216 *******************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 189 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
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 + -