lcd.lst
来自「基于51单片机实现UART通信 SPI通信 和IIC通信」· LST 代码 · 共 215 行
LST
215 行
C51 COMPILER V7.50 LCD 05/24/2008 19:43:51 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 #include "Includes.h"
2
3
4 /*************************************************
5 模块级变量申明
6 *************************************************/
7 static void LCD_WriteDat(int8u lcd_dat);
8 static void LCD_WriteCmd(int8u lcd_cmd);
9 static int8u LCD_ReadStatus(void);
10 static void LCD_Goto(int8u x,int8u y);
11
12 /*******************************************************************************
13 *** 函 数 名: void main(void)
14 *** 功能描述:
15 *** 全局变量:
16 *** 输 入:
17 *** 输 出:
18 *** 创 建 人:huangtiexiong 日期:2006-11-28
19 *** 修 改 人: 日期:2006-11-28
20 *** 函数说明:
21 /******************************************************************************/
22 extern void LCD_Init(void)
23 {
24 1 Delay20ms();
25 1 LCD_WriteCmd(0x38); //功能设置:8位机接口、双行显示、5×7字符点阵;
26 1 LCD_WriteCmd(0x0c); //显示控制:光标开启、字符不闪烁;
27 1 LCD_WriteCmd(0x01); //清屏;
28 1 LCD_WriteCmd(0x06); //访问模式:光标右移一位、整屏不移动;
29 1 LCD_Goto(0,0);
30 1 }
31 static void LCD_WriteDat(int8u lcd_dat)
32 {
33 1 int8u tmp;
34 1 tmp = LCD_ReadStatus(); //读状态;
35 1 while((tmp & 0x80)) //是否忙 ?
36 1 {
37 2 tmp = LCD_ReadStatus();
38 2 }
39 1 #if 0
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
LCD_DATA = lcd_dat;
_nop_();
_nop_();
LCD_EN = 0;
#endif
50 1 LCD_RS = 1;
51 1 LCD_RW = 0;
52 1 LCD_DATA = lcd_dat;
53 1 _nop_();
54 1 LCD_EN = 0;
55 1 _nop_();
C51 COMPILER V7.50 LCD 05/24/2008 19:43:51 PAGE 2
56 1 _nop_();
57 1 LCD_EN = 1;
58 1
59 1 }
60 static void LCD_WriteCmd(int8u lcd_cmd)
61 {
62 1 int8u tmp;
63 1 tmp = LCD_ReadStatus();
64 1 while((tmp & 0x80))
65 1 {
66 2 tmp = LCD_ReadStatus();
67 2 }
68 1 #if 0
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
_nop_();
_nop_();
LCD_DATA = lcd_cmd;
_nop_();
_nop_();
LCD_EN = 0;
#endif
79 1 LCD_RS = 0;
80 1 LCD_RW = 0;
81 1 LCD_DATA = lcd_cmd;
82 1 _nop_();
83 1 LCD_EN = 0;
84 1 _nop_();
85 1 _nop_();
86 1 LCD_EN = 1;
87 1 }
88 static int8u LCD_ReadStatus(void)
89 {
90 1 int8u tmp;
91 1 #if 0
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
tmp = LCD_DATA;
LCD_EN = 0;
#endif
98 1 LCD_DATA = 0xff;
99 1 LCD_RS = 0;
100 1 LCD_RW = 1;
101 1 LCD_EN = 0;
102 1 _nop_();
103 1 _nop_();
104 1 LCD_EN = 1;
105 1 tmp = LCD_DATA;
106 1 return tmp;
107 1 }
108 static void LCD_Goto(int8u x,int8u y)
109 {
110 1 int8u tmp;
111 1 if(y) //若是第二行;
112 1 {
113 2 tmp = 0xc0 + x;
114 2 LCD_WriteCmd(tmp);
115 2 }
116 1 else
117 1 {
C51 COMPILER V7.50 LCD 05/24/2008 19:43:51 PAGE 3
118 2 tmp = 0x80 + x;
119 2 LCD_WriteCmd(tmp);
120 2 }
121 1 }
122
123
124 #if 0
extern void LCD_DisplayShiftR(void) //整屏右移;
{
LCD_WriteCmd(0x1f);
}
extern void LCD_DisplayShiftL(void) //整屏左移;
{
LCD_WriteCmd(0x18);
}
#endif
135
136 extern void LCD_Display(int8u row,int8u *str)
137 {
138 1 if(row)
139 1 {
140 2 LCD_Goto(0,1);
141 2 }
142 1 else
143 1 {
144 2 LCD_Goto(0,0);
145 2 }
146 1 while(*str != '\0')
147 1 {
148 2 LCD_WriteDat(*str++);
149 2 }
150 1 }
151
152 #if 0
extern void LCD_Display(int8u x,int8u y,int8u disp_dat)
{
LCD_Goto(x,y);
LCD_WriteDat(disp_dat);
}
#endif
159
160 #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
177
178 extern void Delay20ms() //粗略延时;
179 {
C51 COMPILER V7.50 LCD 05/24/2008 19:43:51 PAGE 4
180 1 int16u tmp = 50000;
181 1 while(tmp--);
182 1 }
183 /*******************************************************************************
184 **** End Of File
185 *******************************************************************************/
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 + =
减小字号Ctrl + -
显示快捷键?