📄 32.lst
字号:
C51 COMPILER V7.50 32 08/20/2005 16:00:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 32
OBJECT MODULE PLACED IN F:\MCS_51\LCD\32.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\MCS_51\LCD\32.C DB SB OE
line level source
1 #include <reg51.h>
2 #include<intrins.h>
3
4 #define Uchar unsigned char
5 #define Uint unsigned int
6
7 // LCM1602A端口地址定义
8 char xdata Lcd1602CmdPort _at_ 0x7cff; //E=1 RS=0 RW=0
9 char xdata Lcd1602WdataPort _at_ 0x7eff; //E =1 RS=1 RW=0
10 char xdata Lcd1602StatusPort _at_ 0x7dff; //CS=1 RS=0 RW=1
11
12 #define Busy 0x80 // 忙判别位
13
14 code char exampl[]="For an example. - By xiaoqi\n";
15
16 void Delay400Ms(void);
17 void Delay5Ms(void);
18 void LcdWriteData( char dataW );
19 void LcdWriteCommand( Uchar CMD,Uchar AttribC );
20 void LcdReset( void );
21 void Display( Uchar dd );
22 void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
23 void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
24
25 //主程序
26 void main(void)
27 {
28 1 Uchar temp;
29 1
30 1 Delay400Ms(); //启动时必须的延时,等待lcm进入工作状态
31 1
32 1 LcdReset(); //这也是必需的....初始化
33 1 temp = 32;
34 1 ePutstr(0,0,exampl); //上面一行显示一个预定字符串
35 1
36 1 Delay400Ms(); //保留显示内容
37 1 Delay400Ms();
38 1 Delay400Ms();
39 1 Delay400Ms();
40 1 Delay400Ms();
41 1 Delay400Ms();
42 1 Delay400Ms();
43 1 Delay400Ms();
44 1
45 1 while(1)
46 1 {
47 2 temp &= 0x7f; //只显示ASCII字符
48 2
49 2 if (temp<32)temp=32; //屏蔽控制字符,不予显示
50 2 Display( temp++ );
51 2
52 2 Delay400Ms();
53 2 }
54 1 }
55
C51 COMPILER V7.50 32 08/20/2005 16:00:53 PAGE 2
56 //显示字符串
57 void ePutstr(Uchar x,Uchar y, Uchar code *ptr)
58 {
59 1 Uchar i,l=0;
60 1 while (ptr[l] >31){l++;};
61 1 for (i=0;i<l;i++) {
62 2 DispOneChar(x++,y,ptr[i]);
63 2 if ( x == 16 )
64 2 {
65 3 x = 0; y ^= 1;
66 3 }
67 2 }
68 1 }
69
70 // 演示一行连续字符串,配合上位程序演示移动字串
71 void Display( Uchar dd )
72 {
73 1
74 1 Uchar i;
75 1
76 1 for (i=0;i<16;i++)
77 1 {
78 2
79 2 DispOneChar(i,1,dd++);
80 2
81 2 dd &= 0x7f;
82 2 if (dd<32) dd=32;
83 2 }
84 1 }
85
86 // 显示光标定位
87 void LocateXY( char posx,char posy)
88 {
89 1
90 1 Uchar temp;
91 1
92 1 temp = posx & 0xf;
93 1 posy &= 0x1;
94 1 if ( posy )temp |= 0x40;
95 1 temp |= 0x80;
96 1 LcdWriteCommand(temp,0);
97 1 }
98
99 // 按指定位置显示数出一个字符
100 void DispOneChar(Uchar x,Uchar y,Uchar Wdata)
101 {
102 1 LocateXY( x, y ); // 定位显示地址
103 1 LcdWriteData( Wdata ); // 写字符
104 1 }
105
106 // 初始化程序, 必须按照产品资料介绍的初始化过程进行
107 void LcdReset( void ) {
108 1
109 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
110 1 Delay5Ms();
111 1 LcdWriteCommand( 0x38, 0); // 共三次
112 1 Delay5Ms();
113 1 LcdWriteCommand( 0x38, 0);
114 1 Delay5Ms();
115 1
116 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
117 1 LcdWriteCommand( 0x08, 1); // 显示关闭
C51 COMPILER V7.50 32 08/20/2005 16:00:53 PAGE 3
118 1 LcdWriteCommand( 0x01, 1); // 显示清屏
119 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
120 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
121 1 }
122
123 // 写控制字符子程序: E=1 RS=0 RW=0
124
125 void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
126 1
127 1 if (AttribC) while( Lcd1602StatusPort & Busy ); // 检测忙信号?
128 1 Lcd1602CmdPort = CMD;
129 1 }
130
131 // 当前位置写字符子程序: E =1 RS=1 RW=0
132 void LcdWriteData( char dataW ) {
133 1
134 1 while( Lcd1602StatusPort & Busy ); // 检测忙信号
135 1 Lcd1602WdataPort = dataW;
136 1 }
137
138 // 短延时
139 void Delay5Ms(void)
140 {
141 1 Uchar i;
142 1
143 1 i=5552;
144 1 while(i--) // for (i=0;i<5552;i++)
145 1 { ; }
146 1 }
147
148 //长延时
149 void Delay400Ms(void)
150 {
151 1 Uchar i = 5;
152 1 Uint j;
153 1 while(i--)
154 1 {
155 2
156 2 for (j=0;j<7269;j++);
157 2 };
158 1 }
C51 COMPILER V7.50 32 08/20/2005 16:00:53 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
_LcdWriteData. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dataW. . . . . . . . . . . . . . . . * REG * DATA CHAR 0007H 1
exampl . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 29
Lcd1602StatusPort. . . . . . . . . . . PUBLIC XDATA CHAR 7DFFH 1
_DispOneChar . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
x. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
y. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
Wdata. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
LcdReset . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Lcd1602CmdPort . . . . . . . . . . . . PUBLIC XDATA CHAR 7CFFH 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
temp . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
_Display . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dd . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
_LcdWriteCommand . . . . . . . . . . . PUBLIC CODE PROC 0004H -----
CMD. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
AttribC. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
Delay400Ms . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
j. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
_ePutstr . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
x. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
y. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
ptr. . . . . . . . . . . . . . . . . AUTO DATA PTR 0002H 2
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
l. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1
Delay5Ms . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
_LocateXY. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
posx . . . . . . . . . . . . . . . . * REG * DATA CHAR 0007H 1
posy . . . . . . . . . . . . . . . . * REG * DATA CHAR 0005H 1
temp . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
Lcd1602WdataPort . . . . . . . . . . . PUBLIC XDATA CHAR 7EFFH 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 343 ----
CONSTANT SIZE = 29 ----
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 + -