📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 08/23/2007 14:58:57 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 ( y == 16 )
19 2 { x ^= 1; y= 0;
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 ( y == 16 )
33 2 { x^=1; y=0;
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=0x00;
45 1 // posy &= 0x03;
46 1 switch ( posx)
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
C51 COMPILER V8.02 LCD 08/23/2007 14:58:57 PAGE 2
55 1
56 1
57 1 temp |=posy;
58 1
59 1 temp|= 0x80;
60 1 LcdWriteCommand(temp,0);
61 1 }
62 /*=======================================================
63 按指定位置显示输出一个字符
64 =======================================================*/
65 extern void DispOneChar(unsigned char x,unsigned char y,unsigned char Wdata)
66 {
67 1 LocateXY( x, y ); // 定位显示地址
68 1 LcdWriteData( Wdata ); // 写字符
69 1 }
70
71 /*=======================================================
72 初始化程序, 必须按照产品资料介绍的初始化过程进行
73 =======================================================*/
74 extern void LcdReset( void )
75 { Delay5Ms();
76 1 Delay5Ms();
77 1 Delay5Ms();
78 1 LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
79 1 Delay5Ms();
80 1 LcdWriteCommand( 0x38, 0); // 共三次
81 1 Delay5Ms();
82 1 LcdWriteCommand( 0x38, 0);
83 1 //=============================
84 1 LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号 参数--"1")
85 1 LcdWriteCommand( 0x08, 1); // 显示关闭
86 1 LcdWriteCommand( 0x01, 1); // 显示清屏
87 1 LcdWriteCommand( 0x06, 1); // 显示光标移动设置
88 1 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置
89 1 }
90
91 /*=======================================================
92 写控制字符子程序: E=1 RS=0 RW=0
93 =======================================================*/
94 extern void LcdWriteCommand(unsigned char CMD,unsigned char AttribC ) {
95 1
96 1 if (AttribC)
97 1 {
98 2 P0=0xff;
99 2 while( Lcd1602StatusPort & Busy ); // 检测忙信号?
100 2 }
101 1 Lcd1602CmdPort = CMD;
102 1 }
103
104 /*=======================================================
105 当前位置写字符子程序: E =1 RS=1 RW=0
106 =======================================================*/
107 extern void LcdWriteData( char dataW ) {
108 1
109 1 while( Lcd1602StatusPort & Busy ); // 检测忙信号
110 1
111 1 Lcd1602WdataPort = dataW;
112 1 }
113
114
115
116 //-------------------------------------显示清屏-----------------------------------------------------------
C51 COMPILER V8.02 LCD 08/23/2007 14:58:57 PAGE 3
--------------
117 extern void cls(void)
118 { LcdWriteCommand( 0x01, 1); // 显示清屏
119 1 }
120 //--------------------------------------------------------------------------------------------------------
-----
121
122
123
124
125
C51 COMPILER V8.02 LCD 08/23/2007 14:58:57 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 0006H 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 = 316 ----
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 + -