📄 1602液晶移动显示.lst
字号:
C51 COMPILER V7.06 1602襙__移___允_ 05/21/2010 10:42:36 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 1602襙__移___允_
OBJECT MODULE PLACED IN .\obj\1602液晶移动显示.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1602液晶移动显示.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\1602液晶移动显示.l
-st) OBJECT(.\obj\1602液晶移动显示.obj)
stmt level source
1 /*-----------------------------------------------
2 名称:LCD1602
3 论坛:www.doflye.net
4 编写:shifang
5 日期:2009.5
6 修改:无
7 内容:通过标准程序动态显示字符
8 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
9 ------------------------------------------------*/
10 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
11 #include<intrins.h>
12
13 sbit RS = P2^4; //定义端口
14 sbit RW = P2^5;
15 sbit EN = P2^6;
16
17 #define RS_CLR RS=0
18 #define RS_SET RS=1
19
20 #define RW_CLR RW=0
21 #define RW_SET RW=1
22
23 #define EN_CLR EN=0
24 #define EN_SET EN=1
25
26 #define DataPort P0
27 /*------------------------------------------------
28 uS延时函数,含有输入参数 unsigned char t,无返回值
29 unsigned char 是定义无符号字符变量,其值的范围是
30 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
31 长度如下 T=tx2+5 uS
32 ------------------------------------------------*/
33 void DelayUs2x(unsigned char t)
34 {
35 1 while(--t);
36 1 }
37 /*------------------------------------------------
38 mS延时函数,含有输入参数 unsigned char t,无返回值
39 unsigned char 是定义无符号字符变量,其值的范围是
40 0~255 这里使用晶振12M,精确延时请使用汇编
41 ------------------------------------------------*/
42 void DelayMs(unsigned char t)
43 {
44 1
45 1 while(t--)
46 1 {
47 2 //大致延时1mS
48 2 DelayUs2x(245);
49 2 DelayUs2x(245);
50 2 }
51 1 }
52 /*------------------------------------------------
53 判忙函数
54 ------------------------------------------------*/
C51 COMPILER V7.06 1602襙__移___允_ 05/21/2010 10:42:36 PAGE 2
55 bit LCD_Check_Busy(void)
56 {
57 1 DataPort= 0xFF;
58 1 RS_CLR;
59 1 RW_SET;
60 1 EN_CLR;
61 1 _nop_();
62 1 EN_SET;
63 1 return (bit)(DataPort & 0x80);
64 1 }
65 /*------------------------------------------------
66 写入命令函数
67 ------------------------------------------------*/
68 void LCD_Write_Com(unsigned char com)
69 {
70 1 while(LCD_Check_Busy()); //忙则等待
71 1 RS_CLR;
72 1 RW_CLR;
73 1 EN_SET;
74 1 DataPort= com;
75 1 _nop_();
76 1 EN_CLR;
77 1 }
78 /*------------------------------------------------
79 写入数据函数
80 ------------------------------------------------*/
81 void LCD_Write_Data(unsigned char Data)
82 {
83 1 while(LCD_Check_Busy()); //忙则等待
84 1 RS_SET;
85 1 RW_CLR;
86 1 EN_SET;
87 1 DataPort= Data;
88 1 _nop_();
89 1 EN_CLR;
90 1 }
91
92 /*------------------------------------------------
93 清屏函数
94 ------------------------------------------------*/
95 void LCD_Clear(void)
96 {
97 1 LCD_Write_Com(0x01);
98 1 DelayMs(5);
99 1 }
100 /*------------------------------------------------
101 写入字符串函数
102 ------------------------------------------------*/
103 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
104 {
105 1 if (y == 0)
106 1 {
107 2 LCD_Write_Com(0x80 + x);
108 2 }
109 1 else
110 1 {
111 2 LCD_Write_Com(0xC0 + x);
112 2 }
113 1 while (*s)
114 1 {
115 2 LCD_Write_Data( *s);
116 2 s ++;
C51 COMPILER V7.06 1602襙__移___允_ 05/21/2010 10:42:36 PAGE 3
117 2 }
118 1 }
119 /*------------------------------------------------
120 写入字符函数
121 ------------------------------------------------*/
122 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
123 {
124 1 if (y == 0)
125 1 {
126 2 LCD_Write_Com(0x80 + x);
127 2 }
128 1 else
129 1 {
130 2 LCD_Write_Com(0xC0 + x);
131 2 }
132 1 LCD_Write_Data( Data);
133 1 }
134 /*------------------------------------------------
135 初始化函数
136 ------------------------------------------------*/
137 void LCD_Init(void)
138 {
139 1 LCD_Write_Com(0x38); /*显示模式设置*/
140 1 DelayMs(5);
141 1 LCD_Write_Com(0x38);
142 1 DelayMs(5);
143 1 LCD_Write_Com(0x38);
144 1 DelayMs(5);
145 1 LCD_Write_Com(0x38);
146 1 LCD_Write_Com(0x08); /*显示关闭*/
147 1 LCD_Write_Com(0x01); /*显示清屏*/
148 1 LCD_Write_Com(0x06); /*显示光标移动设置*/
149 1 DelayMs(5);
150 1 LCD_Write_Com(0x0C); /*显示开及光标设置*/
151 1 }
152
153 /*------------------------------------------------
154 主函数
155 ------------------------------------------------*/
156 void main(void)
157 {
158 1 unsigned char i;
159 1 unsigned char *pa,*pb;
160 1
161 1 LCD_Init();
162 1 LCD_Write_Com(0x0f);//光标开,光标闪烁开
163 1
164 1
165 1
166 1
167 1 while (1)
168 1 {
169 2 pa = "Welcome to";
170 2 pb = "www.doflye.net";
171 2 LCD_Clear();
172 2 LCD_Write_String(2,0,pa); //显示2行信息
173 2 LCD_Write_String(1,1,pb);
174 2 for(i=0;i<8;i++) //延时2s左右
175 2 DelayMs(250);
176 2 LCD_Clear(); //清屏显示其他信息
177 2 i = 2;
178 2 while (*pa) //循环输入方式显示2行信息
C51 COMPILER V7.06 1602襙__移___允_ 05/21/2010 10:42:36 PAGE 4
179 2 {
180 3 LCD_Write_Char(i,0,*pa);
181 3 i ++;
182 3 pa ++;
183 3 DelayMs(250);
184 3 }
185 2 i=1;
186 2 while (*pb)
187 2 {
188 3 LCD_Write_Char(i,1,*pb);
189 3 i ++;
190 3 pb ++;
191 3 DelayMs(250);
192 3 }
193 2
194 2 DelayMs(250);
195 2 }
196 1 }
197
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 357 ----
CONSTANT SIZE = 26 ----
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 + -