lcd1602.lst
来自「基于51单片机的用LCD1602液晶的人机界面代码。可以直接调用。基于keil开」· LST 代码 · 共 230 行
LST
230 行
C51 COMPILER V8.05a LCD1602 04/18/2009 09:19:44 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE LCD1602.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 功能:lcd1602的驱动
3 提供的函数为:
4 Delayms(uchar i) 延时ms数,单位ms
5 Lcdclr(void) LCD清屏函数
6 Lcdreset(void) LCD复位函数
7 Lcdcur(uchar cur) 光标控制命令
8 Lcdwrchar(uchar c,uchar xpos,uchar ypos) Lcd写字符函数
9 Lcdwrstring(uchar *s,uchar xpos,uchar ypos) Lcd写字符串函数
10 作者:荒草
11 时间:2008年6月6日
12 修改:无
13 */
14
15 //#include "spce061a.h"
16 #include "LCD1602.h"
17 #include <reg52.h>
18
19 #define DPORT P1
20
21
22 sbit RS = P2^0;
23 sbit RW = P2^2;
24 sbit E = P2^1;
25
26 ///功能:延时ms函数,单位是ms
27 //参数:延时的时间
28 //返回:无
29 void Delayms(unsigned char i)
30 {
31 1 unsigned int j;
32 1 for(;i>0;i--)
33 1 {
34 2 for(j=350;j>0;j--)
35 2 {;}
36 2 }
37 1 }
38
39 //功能:检查LCD的状态是否为忙信号
40 //参数:无
41 //返回:若忙,则等待
42 void Waitfree(void)
43 {
44 1 unsigned char temp1;
45 1 RS=0;
46 1 RW=1;
47 1 E=0;
48 1 Delayms(5);
49 1 E=1;
50 1 DPORT=0xFF00;
51 1 for(;;)
52 1 {
53 2 temp1=DPORT;
54 2 temp1&=0x80;
55 2 if(temp1==0)
C51 COMPILER V8.05a LCD1602 04/18/2009 09:19:44 PAGE 2
56 2 break;
57 2 }
58 1 E=0;
59 1 }
60
61 //功能:送控制字(不检测忙信号)
62 //参数:控制字代码:c
63 //返回:无
64 void Lcdwcmdn(unsigned char c)
65 {
66 1 RS=0;
67 1 RW=0;
68 1 E=1;
69 1 DPORT=c;
70 1 Delayms(3);
71 1 E=0;
72 1 }
73
74 //功能:送控制字(检测忙信号)
75 //参数:控制字代码:C
76 //返回:无
77 void Lcdwcmd(unsigned char c)
78 {
79 1 Waitfree();
80 1 Lcdwcmdn(c);
81 1 }
82
83 //功能:复位LCD
84 //参数:无
85 //返回:无
86 void Lcdreset(void)
87 {
88 1 Delayms(15);
89 1 Lcdwcmd(0x38);
90 1 Delayms(5);
91 1 Lcdwcmd(0x08);
92 1 Delayms(5);
93 1 Lcdwcmd(0x01);
94 1 Delayms(5);
95 1 Lcdwcmd(0x06);
96 1 Delayms(5);
97 1 Lcdwcmd(0x0c);
98 1 Delayms(5);
99 1 }
100
101 //功能:光标设置
102 //参数:光标类型0为关显示,关光标,且不闪烁
103 // 1为开显示,无光标,无闪烁
104 // 2为开显示,开光标,但光标不闪烁
105 // 3为开显示,开光标,开闪烁
106 //返回:无
107 void Lcdcur(unsigned char cur)
108 {
109 1 Delayms(5);
110 1 switch(cur)
111 1 {
112 2 case 0:
113 2 {
114 3 Lcdwcmd(0x08);
115 3 break;
116 3 }
117 2 case 1:
C51 COMPILER V8.05a LCD1602 04/18/2009 09:19:44 PAGE 3
118 2 {
119 3 Lcdwcmd(0x0c);
120 3 break;
121 3 }
122 2 case 2:
123 2 {
124 3 Lcdwcmd(0x0e);
125 3 break;
126 3 }
127 2 case 3:
128 2 {
129 3 Lcdwcmd(0x0f);
130 3 break;
131 3 }
132 2 default:
133 2 break;
134 2 }
135 1 }
136
137 //功能:清屏LCD
138 //参数:无
139 //返回:无
140 void Lcdclr(void)
141 {
142 1 Lcdwcmd(0x01);
143 1 }
144
145 //功能:确定显示位置
146 //参数:光标位置x y
147 //返回:无
148 void Lcdpos(unsigned char xpos,unsigned char ypos)
149 {
150 1 unsigned char temp;
151 1 xpos &=0x0f;
152 1 ypos &=0x01;
153 1 if(ypos==0)
154 1 temp=xpos;
155 1 else temp=xpos+0x40;
156 1 temp |=0x80;
157 1 Lcdwcmd(temp);
158 1 }
159
160 //功能:送字符
161 //参数:待显示的字符
162 //返回:无
163 void Lcdwr(unsigned char c)
164 {
165 1 Waitfree();
166 1 RS=1;
167 1 RW=0;
168 1 E=1;
169 1 DPORT=c;
170 1 Delayms(3);
171 1 E=0;
172 1 }
173
174 //功能:写字符
175 //参数:待显示的字符
176 //返回:无
177 void Lcdwrchar(unsigned char c,unsigned char xpos,unsigned char ypos)
178 {
179 1 Lcdpos(xpos,ypos);
C51 COMPILER V8.05a LCD1602 04/18/2009 09:19:44 PAGE 4
180 1 Lcdwr(c);
181 1 }
182
183 //功能:写字符串
184 //参数:字符串,位置
185 //返回:无
186 void Lcdwrstring(unsigned char *s,unsigned char xpos,unsigned char ypos)
187 {
188 1 unsigned char i;
189 1 if(*s==0)
190 1 return;
191 1 for(i=0;;i++)
192 1 {
193 2 if(*(s+i)==0)
194 2 break;
195 2 Lcdwrchar(*(s+i),xpos,ypos);
196 2 xpos++;
197 2 if(xpos>=15)
198 2 break;
199 2 }
200 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 277 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?