📄 lmb204bdc.lst
字号:
C51 COMPILER V7.01 LMB204BDC 04/29/2006 16:28:39 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE LMB204BDC
OBJECT MODULE PLACED IN LMB204BDC.OBJ
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE LMB204BDC.c DEBUG OBJECTEXTEND
stmt level source
1 /*===================================================================
2
3 LMB204BDC 20x4 字符液晶屏驱动程序
4 /*=====================================================================
5 连接线图: LCM-------51 LCM-------51 LCM--------51
6 DB0-----P0.0 DB4-----P0.4 RS-------P1.7
7 DB1-----P0.1 DB5-----P0.5 RW-------P1.6
8 DB2-----P0.2 DB6-----P0.6 E--------P1.5
9 DB3-----P0.3 DB7-----P0.7
10
11 LCD CDDROM Address
12 0x00-------------------------------------0x13
13 0x40-------------------------------------0x53
14 0x14-------------------------------------0x27
15 0x54-------------------------------------0x67
16
17 [注]:AT89C51的晶振频率为11.0592MHz
18 ====================================================================*/
19
20 #include "reg52.h"
21 #include "intrins.h"
22 #include "main.h"
23
24
25
26
27
28 void Delay400Ms(void);
29 void Delay5Ms(void);
30 void WaitForEnable( void );
31 void LcdWriteData( char dataW );
32 void LcdWriteCommand( Uchar CMD,Uchar AttribC );
33 void LcdReset( void );
34 void Display( Uchar dd );
35 void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
36 void ePutstr(Uchar x,Uchar y, Uchar *ptr);
37
38
39
40 /*=======================================================
41 显示字符串
42 =======================================================*/
43 void ePutstr(Uchar x,Uchar y, Uchar *ptr) {
44 1 Uchar i,l=0;
45 1 while (ptr[l] >31){l++;};
46 1 for (i=0;i<l;i++) {
47 2 DispOneChar(x++,y,ptr[i]);
48 2 if ( x == 20 )
49 2 {
50 3 x = 0;
51 3 if(y<3)
52 3 y=y+1;
53 3 else
54 3 y=0;
55 3 }
C51 COMPILER V7.01 LMB204BDC 04/29/2006 16:28:39 PAGE 2
56 2 }
57 1 }
58
59 /*=======================================================
60 演示一行连续字符串,配合上位程序演示移动字串
61 =======================================================*/
62 /*extern void Display(char posx,char posy, Uchar dd ) {
63
64 Uchar i;
65
66 for (i=0;i<20;i++) {
67 DispOneChar(posx,posy,dd++);
68 dd &= 0x7f;
69 if (dd<32) dd=32;
70 }
71 }*/
72
73 /*=======================================================
74 显示光标定位
75 =======================================================*/
76 void LocateXY( char posx,char posy) {
77 1
78 1 Uchar temp;
79 1
80 1 temp = posx ;//& 0x13;
81 1 // posy &= 0x03;
82 1
83 1 if ( posy==1 )temp += 0x40;
84 1 if ( posy==2 )temp += 0x14;
85 1 if ( posy==3 )temp += 0x54;
86 1
87 1 temp |= 0x80;
88 1 LcdWriteCommand(temp,0);
89 1 }
90
91 /*=======================================================
92 按指定位置显示数出一个字符
93 =======================================================*/
94 void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
95 1
96 1 LocateXY( x, y ); // 定位显示地址
97 1 LcdWriteData( Wdata ); // 写字符
98 1 }
99
100 /*=======================================================
101 初始化程序, 必须按照产品资料介绍的初始化过程进行
102 =======================================================*/
103 void LcdReset( void ) {
104 1
105 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
106 1 Delay5Ms();
107 1 LcdWriteCommand( 0x38, 0); // 共三次
108 1 Delay5Ms();
109 1 LcdWriteCommand( 0x38, 0);
110 1 Delay5Ms();
111 1
112 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
113 1 LcdWriteCommand( 0x08, 1); // 显示关闭
114 1 LcdWriteCommand( 0x01, 1); // 显示清屏
115 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
116 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
117 1 }
C51 COMPILER V7.01 LMB204BDC 04/29/2006 16:28:39 PAGE 3
118
119 /*=======================================================
120 写控制字符子程序: E=1 RS=0 RW=0
121 =======================================================*/
122 void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
123 1
124 1 if (AttribC) WaitForEnable(); // 检测忙信号?
125 1
126 1 RS = 0; RW = 0; _nop_();
127 1
128 1 DataPort = CMD; _nop_(); // 送控制字子程序
129 1
130 1 Elcm = 1;_nop_();_nop_();Elcm = 0; // 操作允许脉冲信号
131 1 }
132
133 /*=======================================================
134 当前位置写字符子程序: E =1 RS=1 RW=0
135 =======================================================*/
136 void LcdWriteData( char dataW ) {
137 1
138 1 WaitForEnable(); // 检测忙信号
139 1
140 1 RS = 1; RW = 0; _nop_();
141 1
142 1 DataPort = dataW; _nop_();
143 1
144 1 Elcm = 1; _nop_(); _nop_(); Elcm = 0; // 操作允许脉冲信号
145 1
146 1 }
147
148 /*=======================================================
149 正常读写操作之前必须检测LCD控制器状态: CS=1 RS=0 RW=1
150 DB7: 0 LCD控制器空闲; 1 LCD控制器忙
151 ========================================================*/
152 void WaitForEnable( void ) {
153 1
154 1 DataPort = 0xff;
155 1
156 1 RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
157 1
158 1 while( DataPort & Busy );
159 1
160 1 Elcm = 0;
161 1 }
162
163
164 // 短延时
165 void Delay5Ms(void)
166 {
167 1 Uint i = 5552;
168 1 while(i--);
169 1 }
170
171 //长延时
172 void Delay400Ms(void)
173 {
174 1 Uchar i = 5;
175 1 Uint j;
176 1 while(i--)
177 1 {
178 2 j=7269;
179 2 while(j--);
C51 COMPILER V7.01 LMB204BDC 04/29/2006 16:28:39 PAGE 4
180 2 };
181 1 }
182
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -