📄 text1.lst
字号:
C51 COMPILER V8.08 TEXT1 07/29/2009 22:15:41 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: f:\Keil3\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 ** 1602A液晶屏驱动程序
3 ** 晶 振 频 率:11.0592M
4 ** 线路->单片机实验开发板A
5 ******************************************************************/
6 #include "reg51.h"
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 sbit LCM_E=P3^5; //定义接口
11 sbit LCM_RW=P3^6;
12 sbit LCM_RS=P3^7;
13
14 #define LCM_Data P2//数据接口
15
16 void LCM_WriteData(uchar WDLCM);
17 void LCM_WriteCommand(uchar WCLCM,BuysC);
18 uchar LCM_ReadData(void);
19 uchar LCM_ReadStatus(void);
20 void LCM_Init(void);
21 void DisplayOneChar(uchar X, uchar Y, uchar DData);
22 void DisplayListChar(uchar X, uchar Y, uchar code *DData);
23 void Delay5Ms(void);
24 void Delay400Ms(void);
25
26 uchar code uctech[] = {"yong yuan !"};
27 uchar code net[] = {"zhuzhuyaoxingfuo!"};
28
29 void main(void)
30 {
31 1 Delay400Ms(); //启动等待,等LCM讲入工作状态
32 1 LCM_Init(); //LCM初始化
33 1 Delay5Ms(); //延时片刻(可不要)
34 1
35 1 DisplayListChar(6, 1, uctech);
36 1 DisplayListChar(0, 0, net);
37 1 LCM_ReadData();//测试用句无意义
38 1 LCM_Data=255;
39 1 while(1);
40 1 }
41
42 /****************************1602A写数据函数**************************/
43 /*函数原型:void LCM_WriteData(uchar WDLCM)
44 /*函数功能:1602A写数据
45 /*输入参数:要写入的数据
46 /*输出参数:无
47 /*调用模块:
48 /*建立时间:2005/11/14
49 /*作者:站长
50 /**********************************************************************/
51 void LCM_WriteData(uchar WDLCM)
52 {
53 1 LCM_ReadStatus(); //检测忙
54 1 LCM_Data = WDLCM;
55 1 LCM_RS = 1;
C51 COMPILER V8.08 TEXT1 07/29/2009 22:15:41 PAGE 2
56 1 LCM_RW = 0;
57 1 LCM_E = 0; //若晶振速度太高可以在这后加小的延时
58 1 LCM_E = 0; //延时
59 1 LCM_E = 1;
60 1 }
61
62 /****************************1602A写指令函数**************************/
63 /*函数原型:void LCM_WriteCommand(uchar WCLCM,BuysC)
64 /*函数功能:1602A写指令
65 /*输入参数:要写入的指令
66 /*输出参数:无
67 /*调用模块:
68 /*建立时间:2005/11/14
69 /*作者:站长
70 /**********************************************************************/
71 void LCM_WriteCommand(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测
72 {
73 1 if (BuysC) LCM_ReadStatus(); //根据需要检测忙
74 1 LCM_Data = WCLCM;
75 1 LCM_RS = 0;
76 1 LCM_RW = 0;
77 1 LCM_E = 0;
78 1 LCM_E = 0;
79 1 LCM_E = 1;
80 1 }
81
82 /****************************1602A读数据函数**************************/
83 /*函数原型:uchar LCM_ReadData(void)
84 /*函数功能:1602A读数据
85 /*输入参数:无
86 /*输出参数:1602A返回的数据
87 /*调用模块:
88 /*建立时间:2005/11/14
89 /*作者:站长
90 /**********************************************************************/
91 uchar LCM_ReadData(void)
92 {
93 1 LCM_RS = 1;
94 1 LCM_RW = 1;
95 1 LCM_E = 0;
96 1 LCM_E = 0;
97 1 LCM_E = 1;
98 1 return(LCM_Data);
99 1 }
100
101 /****************************1602A读状态函数**************************/
102 /*函数原型:uchar LCM_ReadData(void)
103 /*函数功能:1602A读状态
104 /*输入参数:无
105 /*输出参数:1602A返回的状态
106 /*调用模块:
107 /*建立时间:2005/11/14
108 /*作者:站长
109 /**********************************************************************/
110 uchar LCM_ReadStatus(void)
111 {
112 1 LCM_Data = 0xFF;
113 1 LCM_RS = 0;
114 1 LCM_RW = 1;
115 1 LCM_E = 0;
116 1 LCM_E = 0;
117 1 LCM_E = 1;
C51 COMPILER V8.08 TEXT1 07/29/2009 22:15:41 PAGE 3
118 1 while (LCM_Data & 0x80); //检测忙信号
119 1 return(LCM_Data);
120 1 }
121
122 /****************************1602A初始化函数**************************/
123 /*函数原型:void LCM_Init(void)
124 /*函数功能:1602A初始化
125 /*输入参数:无
126 /*输出参数:无
127 /*调用模块:
128 /*建立时间:2005/11/14
129 /*作者:站长
130 /**********************************************************************/
131 void LCM_Init(void)
132 {
133 1 LCM_Data = 0;
134 1 LCM_WriteCommand(0x38,0); //三次显示模式设置,不检测忙信号
135 1 Delay5Ms();
136 1 LCM_WriteCommand(0x38,0);
137 1 Delay5Ms();
138 1 LCM_WriteCommand(0x38,0);
139 1 Delay5Ms();
140 1
141 1 LCM_WriteCommand(0x38,1); //显示模式设置,开始要求每次检测忙信号
142 1 P1 = 0X00;
143 1 LCM_WriteCommand(0x08,1); //关闭显示
144 1 P1 = 0X04;
145 1 LCM_WriteCommand(0x0F,1); //显示清屏
146 1 LCM_WriteCommand(0x01,1);
147 1 LCM_WriteCommand(0x02,1);
148 1 LCM_WriteCommand(0x06,1); // 显示光标移动设置
149 1
150 1 }
151
152 /******************1602A按指定位置显示一个字符函数**********************/
153 /*函数原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)
154 /*函数功能:1602A按指定位置显示一个字符
155 /*输入参数:X坐标 Y坐标 要显示的字符
156 /*输出参数:无
157 /*调用模块:
158 /*建立时间:2005/11/14
159 /*作者:站长
160 /**********************************************************************/
161 void DisplayOneChar(uchar X, uchar Y, uchar DData)
162 {
163 1 Y &= 0x1;
164 1 X &= 0xF; //限制X不能大于15,Y不能大于1
165 1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
166 1 X |= 0x80; // 算出指令码
167 1 LCM_WriteCommand(X, 0); //这里不检测忙信号,发送地址码
168 1 LCM_WriteData(DData);
169 1 }
170
171 /*******************1602A按指定位置显示一串字符函数*********************/
172 /*函数原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)
173 /*函数功能:1602A按指定位置显示一个字符
174 /*输入参数:X坐标 Y坐标 要显示字符串的首地址
175 /*输出参数:无
176 /*调用模块:
177 /*建立时间:2005/11/14
178 /*作者:站长
179 /**********************************************************************/
C51 COMPILER V8.08 TEXT1 07/29/2009 22:15:41 PAGE 4
180 void DisplayListChar(uchar X, uchar Y, uchar code *DData)
181 {
182 1 uchar ListLength;
183 1 ListLength = 0;
184 1 Y &= 0x1;
185 1 X &= 0xF; //限制X不能大于15,Y不能大于1
186 1 while (DData[ListLength]>0x20) //若到达字串尾则退出
187 1 {
188 2 if (X <= 0xF) //X坐标应小于0xF
189 2 {
190 3 DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
191 3 ListLength++;
192 3 X++;
193 3 }
194 2 }
195 1 }
196
197 /********************5ms延时函数************************/
198 /*函数原型:void Delay5Ms(void)
199 /*函数功能:5ms延时
200 /*输入参数:无
201 /*输出参数:无
202 /*调用模块:
203 /*建立时间:2005/11/14
204 /*作者:站长
205 /**********************************************************************/
206 void Delay5Ms(void)
207 {
208 1 unsigned int TempCyc = 5552;
209 1 while(TempCyc--);
210 1 }
211
212 /********************400ms延时延时函数************************/
213 /*函数原型:void Delay400Ms(void)
214 /*函数功能:400ms延时延时
215 /*输入参数:无
216 /*输出参数:无
217 /*调用模块:
218 /*建立时间:2005/11/14
219 /*作者:站长
220 /**********************************************************************/
221 void Delay400Ms(void)
222 {
223 1 uchar TempCycA = 5;
224 1 unsigned int TempCycB;
225 1 while(TempCycA--)
226 1 {
227 2 TempCycB=7269;
228 2 while(TempCycB--);
229 2 };
230 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 329 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V8.08 TEXT1 07/29/2009 22:15:41 PAGE 5
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -