📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 03/28/2007 11:36:58 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include "Define.h"
4 #include "Set.h"
5
6 sbit dc=P0^6; /*P2.0 LCD 的RS 21*/
7 sbit rw=P0^7; /*P2.1 LCD 的R/W 22*/
8 sbit cs=P1^4; /*P2.4 LCD 的E 25*/
9 sfr lcdbus=0xA0; /*p0LCD 数据 D0=P0.0*/
10
11 unsigned int sys10mscounter;
12 unsigned char syslimitcounter;
13
14 char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号横1*/
15 char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号横2*/
16 char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号竖1*/
17 char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号竖2*/
18
19 void soft_nop()
20 {
21 1 ;
22 1 }
23
24 void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
25 {
26 1 register int i;
27 1 for(i=0;i<711;i++)
28 1 {
29 2 ;
30 2 }
31 1 }
32
33 void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
34 {
35 1 soft_10ms();
36 1 soft_10ms();
37 1 }
38
39 void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
40 {
41 1 sys10mscounter=delaytime;
42 1 while(sys10mscounter);
43 1 }
44
45 //////////////////////////////////////
46 unsigned char data lcdcounter;
47 bit lcdusing1,lcdusing2;
48
49 bit lcd_checkbusy()/*检查LCD 忙*/
50 {
51 1 register lcdstate;
52 1 dc=0; /*dc=1为数据,=0 为命令.*/
53 1 rw=1; /*rw=1为读,=0为写.*/
54 1 cs=1; /*cs=1选通.*/
55 1 soft_nop();
C51 COMPILER V7.50 LCD 03/28/2007 11:36:58 PAGE 2
56 1 lcdstate=lcdbus;
57 1 cs=0;
58 1
59 1 return((bit)(lcdstate&0x80));
60 1 }
61
62 void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
63 {
64 1 lcdusing1=1;
65 1
66 1 while(lcd_checkbusy());
67 1
68 1 lcdbus=lcdcmd;
69 1 dc=0; /*dc=1为数据,=0 为命令.*/
70 1 rw=0; /*rw=1为读,=0为写.*/
71 1 cs=1; /*cs=1选通.*/
72 1 soft_nop();
73 1 cs=0;
74 1 lcdbus=0xff;
75 1 lcdusing1=0;
76 1 }
77
78 void lcd_moveto(char position) /*移动光标到指定位.0-79*/
79 {
80 1 register cmd=0x80;
81 1 lcdcounter=position;
82 1
83 1 if (position > 59)
84 1 {
85 2 position += 0x18;
86 2 }
87 1 else
88 1 {
89 2 if (position > 39)
90 2 {
91 3 position -= 0x14;
92 3 }
93 2 else
94 2 {
95 3 if (position > 19)position += 0x2c;
96 3 }
97 2 }
98 1
99 1 cmd=cmd|position;
100 1 lcd_wrcmd(cmd);
101 1 }
102 void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
103 {
104 1 //char i;
105 1 lcdusing2=1;
106 1
107 1 while(lcd_checkbusy());
108 1
109 1 if(lcdcounter==20)
110 1 {
111 2 lcd_moveto(20);
112 2 while(lcd_checkbusy());
113 2 }
114 1 if(lcdcounter==40)
115 1 {
116 2 lcd_moveto(40);
117 2 while(lcd_checkbusy());
C51 COMPILER V7.50 LCD 03/28/2007 11:36:58 PAGE 3
118 2 }
119 1 if(lcdcounter==60)
120 1 {
121 2 lcd_moveto(60);
122 2 while(lcd_checkbusy());
123 2 }
124 1 if(lcdcounter==80)
125 1 {
126 2 lcd_moveto(0);
127 2 while(lcd_checkbusy());
128 2 lcdcounter=0;
129 2 } /*为通用而如此*/
130 1
131 1 lcdcounter++;
132 1 lcdbus=lcddata;
133 1 dc=1; /*dc=1为数据,=0 为命令.*/
134 1 rw=0; /*rw=1为读,=0为写.*/
135 1 cs=1; /*cs=1选通.*/
136 1 soft_nop();
137 1 cs=0;
138 1
139 1 lcdbus=0xff;
140 1 lcdusing2=0;
141 1 }
142
143 void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
144 {
145 1 register i=0;
146 1 while(strpoint[i]!=0)
147 1 {
148 2 lcd_wrdata(strpoint[i]);
149 2 i++;
150 2 }
151 1 }
152
153 void lcd_init()/*初始化*/
154 {
155 1 lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
156 1 lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
157 1 lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
158 1 lcd_wrcmd(0x01); /*清除显示*/
159 1 lcdcounter=0;
160 1 }
161
162 void lcd_cls()/*清除显示*/
163 {
164 1 lcd_wrcmd(0x01);
165 1 lcdcounter=0;
166 1 }
167
168
169
170
171 /****************************************************************/
172 /*
173 main()
174 {
175 unsigned char j;
176
177 IE=0;
178 P0=0xff;
179 P1=0xff;
C51 COMPILER V7.50 LCD 03/28/2007 11:36:58 PAGE 4
180 P2=0xff;
181 P3=0xff; /*初始化T*/
182 //lcd_init();
183 //soft_20ms();
184
185 /*TMOD=0x51;
186 TH0=0xd8; /*12M,10ms*/
187 /*TL0=0xf6;
188 TR0=1;
189 ET0=1;
190 EA=1;
191
192 lcd_moveto(4);
193
194 lcd_wrcmd(0x40);
195
196 while(1)
197 {
198 /*全黑横一横二竖一竖二U Q ABCD... */
199 /*lcd_init(); /*全黑*/
200
201 /*for(j=0;j<80;j++)
202 {
203 lcd_wrdata(0xff);
204 }
205
206
207 hard_10ms(50);
208 lcd_init(); /*横一可参考自行设计符号*/
209 /*lcd_wrcmd(0x40);
210
211 for(j=0;j<8;j++)
212 {
213 lcd_wrdata(path1[j]);
214 }
215
216 for(j=0;j<100;j++)
217 {
218 lcd_wrdata(0);
219 }
220
221 hard_10ms(50);
222
223 lcd_init(); /*横二*/
224 /*lcd_wrcmd(0x40);
225 for(j=0;j<8;j++)
226 {
227 lcd_wrdata(path2[j]);
228 }
229 for(j=0;j<100;j++)
230 {
231 lcd_wrdata(0);
232 }
233
234 hard_10ms(50);
235
236 lcd_init(); /*竖一*/
237 /*lcd_wrcmd(0x40);
238
239 for(j=0;j<8;j++)
240 {
241 lcd_wrdata(pats1[j]);
C51 COMPILER V7.50 LCD 03/28/2007 11:36:58 PAGE 5
242 }
243
244 for(j=0;j<100;j++)
245 {
246 lcd_wrdata(0);
247 }
248
249 hard_10ms(50);
250 lcd_init(); /*竖二*/
251 /*lcd_wrcmd(0x40);
252
253 for(j=0;j<8;j++)
254 {
255 lcd_wrdata(pats2[j]);
256 }
257 for(j=0;j<100;j++)
258 {
259 lcd_wrdata(0);
260 }
261 hard_10ms(50);
262
263 lcd_init();
264 lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
265 hard_10ms(50);
266
267 lcd_init();
268 lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
269 hard_10ms(50);
270
271 lcd_init();
272 lcd_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789+-!#$%&?");
273 hard_10ms(50);
274
275 }
276 }
277 */
278
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 306 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 5
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -