📄 lcd.lst
字号:
C51 COMPILER V8.05a LCD 10/07/2008 19:46:54 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE LCD.C BROWSE DEBUG OBJECTEXTEND CODE
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 main(void)
25 *** 功能描述:
26 *** 全局变量:
27 *** 输 入:
28 *** 输 出:
29 *** 创 建 人:huangtiexiong 日期:2006-11-28
30 *** 修 改 人: 日期:2006-11-28
31 *** 函数说明:
32 /******************************************************************************/
33 extern void LCD_Init(void)
34 {
35 1 Delay20ms();
36 1 LCD_WriteCmd(0x38); //功能设置:8位机接口、双行显示、5×7字符点阵;
37 1 LCD_WriteCmd(0x0c); //显示控制:光标开启、字符不闪烁;
38 1 LCD_WriteCmd(0x01); //清屏;
39 1 LCD_WriteCmd(0x06); //访问模式:光标右移一位、整屏不移动;
40 1 LCD_Goto(0,0);
41 1 }
42 static void LCD_WriteDat(int8u lcd_dat)
43 {
44 1 int8u tmp;
45 1 tmp = LCD_ReadStatus(); //读状态;
46 1 while((tmp & 0x80)) //是否忙 ? 用来看其中的一位,应该是第12位,一直读直到不忙
47 1 {
48 2 tmp = LCD_ReadStatus();
49 2 }
50 1 #if 0
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
C51 COMPILER V8.05a LCD 10/07/2008 19:46:54 PAGE 2
LCD_DATA = lcd_dat;
_nop_();
_nop_();
LCD_EN = 0;
#endif
61 1 LCD_RS = 1;
62 1 LCD_RW = 0;
63 1 LCD_DATA = lcd_dat;
64 1 _nop_();
65 1 LCD_EN = 0;
66 1 _nop_();
67 1 _nop_();
68 1 LCD_EN = 1;
69 1
70 1 }
71 static void LCD_WriteCmd(int8u lcd_cmd)
72 {
73 1 int8u tmp;
74 1 tmp = LCD_ReadStatus();
75 1 while((tmp & 0x80))
76 1 {
77 2 tmp = LCD_ReadStatus();
78 2 }
79 1 #if 0
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
LCD_DATA = lcd_cmd;
_nop_();
_nop_();
LCD_EN = 0;
#endif
90 1 LCD_RS = 0;
91 1 LCD_RW = 0;
92 1 LCD_DATA = lcd_cmd;
93 1 _nop_();
94 1 LCD_EN = 0;
95 1 _nop_();
96 1 _nop_();
97 1 LCD_EN = 1;
98 1 }
99 static int8u LCD_ReadStatus(void)
100 {
101 1 int8u tmp;
102 1 #if 0
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
tmp = LCD_DATA;
LCD_EN = 0;
#endif
109 1 LCD_DATA = 0xff;
110 1 LCD_RS = 0;
111 1 LCD_RW = 1;
112 1 LCD_EN = 0;
113 1 _nop_();
114 1 _nop_();
115 1 LCD_EN = 1;
116 1 tmp = LCD_DATA;
117 1 return tmp;
C51 COMPILER V8.05a LCD 10/07/2008 19:46:54 PAGE 3
118 1 }
119 static void LCD_Goto(int8u x,int8u y)
120 {
121 1 int8u tmp;
122 1 if(y) //若是第二行;
123 1 {
124 2 tmp = 0xc0 + x;
125 2 LCD_WriteCmd(tmp);
126 2 }
127 1 else
128 1 {
129 2 tmp = 0x80 + x;
130 2 LCD_WriteCmd(tmp);
131 2 }
132 1 }
133
134
135 #if 0
extern void LCD_DisplayShiftR(void) //整屏右移;
{
LCD_WriteCmd(0x1f);
}
extern void LCD_DisplayShiftL(void) //整屏左移;
{
LCD_WriteCmd(0x18);
}
#endif
146
147 extern void LCD_Display(int8u row,int8u *str)
148 {
149 1 if(row)
150 1 {
151 2 LCD_Goto(0,1);
152 2 }
153 1 else
154 1 {
155 2 LCD_Goto(0,0);
156 2 }
157 1 while(*str != '\0')
158 1 {
159 2 LCD_WriteDat(*str++);
160 2 }
161 1 }
162
163 #if 0
extern void LCD_Display(int8u x,int8u y,int8u disp_dat)
{
LCD_Goto(x,y);
LCD_WriteDat(disp_dat);
}
#endif
170
171 #if 0
extern void LCD_Display(int8u disp_dat)
{
int8u tmp;
tmp = LCD_ReadStatus();
tmp &= 0x7f;
if(tmp == 0x10) //第一行显示满则转向第二行;
{
LCD_Goto(0,1);
C51 COMPILER V8.05a LCD 10/07/2008 19:46:54 PAGE 4
}
if(tmp == 0x50) //全屏显示满则清屏;
{
LCD_WriteCmd(0x01);
}
LCD_WriteDat(disp_dat); //将接收字符显示在LCD屏上;
}
#endif
188
189 extern void Delay20ms() //粗略延时;
190 {
191 1 int16u tmp = 50000;
192 1 while(tmp--);
193 1 }
194 /*******************************************************************************
195 **** End Of File
196 *******************************************************************************/
C51 COMPILER V8.05a LCD 10/07/2008 19:46:54 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION LCD_Init (BEGIN)
; SOURCE LINE # 33
; SOURCE LINE # 34
; SOURCE LINE # 35
0000 120000 R LCALL Delay20ms
; SOURCE LINE # 36
0003 7F38 MOV R7,#038H
0005 120000 R LCALL _LCD_WriteCmd
; SOURCE LINE # 37
0008 7F0C MOV R7,#0CH
000A 120000 R LCALL _LCD_WriteCmd
; SOURCE LINE # 38
000D 7F01 MOV R7,#01H
000F 120000 R LCALL _LCD_WriteCmd
; SOURCE LINE # 39
0012 7F06 MOV R7,#06H
0014 120000 R LCALL _LCD_WriteCmd
; SOURCE LINE # 40
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -