📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 08/23/2007 12:54:42 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe lcd.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)
line level source
*** WARNING C500 IN LINE 1 OF LCD.C: LICENSE ERROR (R225: REGISTRATION FILE 'TOOLS.INI' NOT FOUND)
1 /*+++++++++++++++++++++++++++++++++++++++++++++++++++/
2 程序名 :lcd.c液晶显示子程序
3 入口:坐标X,Y和所显示的字符
4 出口:显示
5 +++++++++++++++++++++++++++++++++++++++++++++++++++*/
6 #include "CPLD.h"
7 char xdata Lcd1602CmdPort _at_ 0xf1fc; //E=1 RS=0 RW=0
8 char xdata Lcd1602WdataPort _at_ 0xf1fd; //E=1 RS=1 RW=0
9 char xdata Lcd1602StatusPort _at_ 0xf1fe; //E=1 RS=0 RW=1
10
11 extern void Putstr(unsigned char x,unsigned char y,unsigned char code *ptr)
12 {
13 1 unsigned char i,l=0;
14 1 while (ptr[l] >31){l++;};
15 1 for (i=0;i<l;i++)
16 1 {
17 2 DispOneChar(x++,y,ptr[i]);
18 2 if ( x == 16 )
19 2 { x = 0; y ^= 1;
20 3 }
21 2 }
22 1 }
23 extern void ePutStr(unsigned char x,unsigned char y, unsigned char *ptr)
24 {
25 1 unsigned char i,l=0;
26 1 while (ptr[l] >31){l++;}; //如果数组中的数为字符,计算字符的个数
27 1 for (i=0;i<l;i++)
28 1 {
29 2 DispOneChar(x++,y,ptr[i]);
30 2
31 2
32 2 if ( x == 16 )
33 2 { x = 0; y^=1;
34 3 }
35 2 }
36 1 }
37 /*=======================================================
38 显示光标定位4行
39 =======================================================*/
40 extern void LocateXY( char posx,char posy)
41
42 {unsigned char temp;
43 1
44 1 temp = posx & 0xf;
45 1 posy &= 0x03;
46 1 switch ( posy)
47 1 {
48 2 case 0:;
49 2 break;
50 2 case 1:temp |= 0x40;
51 2 break;
52 2 default:;
53 2 }
54 1 temp |= 0x80;
C51 COMPILER V8.02 LCD 08/23/2007 12:54:42 PAGE 2
55 1 LcdWriteCommand(temp,0);
56 1 }
57 /*=======================================================
58 按指定位置显示输出一个字符
59 =======================================================*/
60 extern void DispOneChar(unsigned char x,unsigned char y,unsigned char Wdata)
61 {
62 1 LocateXY( x, y ); // 定位显示地址
63 1 LcdWriteData( Wdata ); // 写字符
64 1 }
65
66 /*=======================================================
67 初始化程序, 必须按照产品资料介绍的初始化过程进行
68 =======================================================*/
69 extern void LcdReset( void )
70 { Delay5Ms();
71 1 Delay5Ms();
72 1 Delay5Ms();
73 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
74 1 Delay5Ms();
75 1 LcdWriteCommand( 0x38, 0); // 共三次
76 1 Delay5Ms();
77 1 LcdWriteCommand( 0x38, 0);
78 1 //=============================
79 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号 参数--"1")
80 1 LcdWriteCommand( 0x08, 1); // 显示关闭
81 1 LcdWriteCommand( 0x01, 1); // 显示清屏
82 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
83 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
84 1 }
85
86 /*=======================================================
87 写控制字符子程序: E=1 RS=0 RW=0
88 =======================================================*/
89 extern void LcdWriteCommand(unsigned char CMD,unsigned char AttribC ) {
90 1
91 1 if (AttribC)
92 1 {
93 2 P0=0xff;
94 2 while( Lcd1602StatusPort & Busy ); // 检测忙信号?
95 2 }
96 1 Lcd1602CmdPort = CMD;
97 1 }
98
99 /*=======================================================
100 当前位置写字符子程序: E =1 RS=1 RW=0
101 =======================================================*/
102 extern void LcdWriteData( char dataW ) {
103 1
104 1 while( Lcd1602StatusPort & Busy ); // 检测忙信号
105 1
106 1 Lcd1602WdataPort = dataW;
107 1 }
108
109
110
111 //-------------------------------------显示清屏-----------------------------------------------------------
--------------
112 extern void cls(void)
113 { LcdWriteCommand( 0x01, 1); // 显示清屏
114 1 }
115 //--------------------------------------------------------------------------------------------------------
C51 COMPILER V8.02 LCD 08/23/2007 12:54:42 PAGE 3
-----
116
117
118
119
120
C51 COMPILER V8.02 LCD 08/23/2007 12:54:42 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
_LcdWriteData. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dataW. . . . . . . . . . . . . . . . * REG * DATA CHAR 0007H 1
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
Lcd1602StatusPort. . . . . . . . . . . PUBLIC XDATA CHAR F1FEH 1
size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
_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
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
LcdReset . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Lcd1602CmdPort . . . . . . . . . . . . PUBLIC XDATA CHAR F1FCH 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
_ePutStr . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
x. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
y. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
ptr. . . . . . . . . . . . . . . . . AUTO DATA PTR 0002H 3
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1
l. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0006H 1
cls. . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_LcdWriteCommand . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
CMD. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
AttribC. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
Delay5Ms . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
_LocateXY. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
posx . . . . . . . . . . . . . . . . * REG * DATA CHAR 0007H 1
posy . . . . . . . . . . . . . . . . * REG * DATA CHAR 0005H 1
temp . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
_Putstr. . . . . . . . . . . . . . . . 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
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
Lcd1602WdataPort . . . . . . . . . . . PUBLIC XDATA CHAR F1FDH 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 318 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -