📄 lcd1602c.lst
字号:
C51 COMPILER V8.02 LCD1602C 02/11/2007 10:15:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602C
OBJECT MODULE PLACED IN LCD1602C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602C.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //█使用举例(仅供参考)
2 #include <reg52.h>
3 //#include <intrins.h>
4 //#define lcdbus P3
5 sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
6 sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
7 sbit cs=P1^5; /*P1.5 LCD 的E 25*/
8 sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/
9 sfr ZW=0xA0; /*p2 LCD 数据D0=P3.0*/
10 sfr ZX=0x80; /*p0 LCD 数据D0=P3.0*/
11 unsigned int sys10mscounter;
12 unsigned char syslimitcounter;
13 char code path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
14 char code path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
15 char code pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
16 char code pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
17
18 //extern void lcd_init(void);
19 //extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/
20 //extern lcd();
21 void soft_nop(){}
22 void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
23 { register unsigned int i;
24 1 //for(i=0;i<711;i++); // 12M
25 1 for(i=0;i<1422;i++); // 24M
26 1 }
27 void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
28 { soft_10ms();
29 1 soft_10ms();
30 1 }
31
32 void delay2()
33 { int i;
34 1 i=3000;
35 1 while(i--) soft_10ms();
36 1 }
37 void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
38 { sys10mscounter=delaytime;
39 1 //while(sys10mscounter);
40 1 while(sys10mscounter--) soft_10ms();
41 1 }
42 unsigned char data lcdcounter;
43 bit lcdusing1,lcdusing2;
44 bit lcd_checkbusy()/*检查LCD 忙*/
45 { register lcdstate;
46 1 dc=0; /*dc=1为数据,=0为命令.*/
47 1 rw=1; /*rw=1为读,=0为写.*/
48 1 cs=1; /*cs=1选通.*/
49 1 soft_nop();
50 1 //lcdbus = 0xff;
51 1 lcdstate=lcdbus;
52 1 cs=0;
53 1 return((bit)(lcdstate&0x80));
54 1 }
55 void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
C51 COMPILER V8.02 LCD1602C 02/11/2007 10:15:12 PAGE 2
56 { lcdusing1=1;
57 1 while(lcd_checkbusy());
58 1 lcdbus=lcdcmd;
59 1 dc=0; /*dc=1为数据,=0为命令.*/
60 1 rw=0; /*rw=1为读,=0为写.*/
61 1 cs=1; /*cs=1选通.*/
62 1 soft_nop();
63 1 cs=0;
64 1 lcdbus=0xff;
65 1 lcdusing1=0;
66 1 }
67 void lcd_moveto(char position) /*移动光标到指定位.0-79*/
68 { register cmd=0x80;
69 1 lcdcounter=position;
70 1 if (position > 59)
71 1 position += 0x18;
72 1 else
73 1 { if (position > 39)position -= 0x14;
74 2 else
75 2 { if (position > 19)position += 0x2c;
76 3 }
77 2 }
78 1 cmd=cmd|position;
79 1 lcd_wrcmd(cmd);
80 1 }
81 void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
82 { //char i;
83 1 lcdusing2=1;
84 1 while(lcd_checkbusy());
85 1 if(lcdcounter==20){
86 2 lcd_moveto(20);
87 2 while(lcd_checkbusy());
88 2 }
89 1 if(lcdcounter==40){
90 2 lcd_moveto(40);
91 2 while(lcd_checkbusy());
92 2 }
93 1 if(lcdcounter==60){
94 2 lcd_moveto(60);
95 2 while(lcd_checkbusy());
96 2 }
97 1 if(lcdcounter==80){
98 2 lcd_moveto(0);
99 2 while(lcd_checkbusy());
100 2 lcdcounter=0;
101 2 } /*为通用而如此*/
102 1 lcdcounter++;
103 1 lcdbus=lcddata;
104 1 dc=1; /*dc=1为数据,=0为命令.*/
105 1 rw=0; /*rw=1为读,=0为写.*/
106 1 cs=1; /*cs=1选通.*/
107 1 soft_nop();
108 1 cs=0;
109 1 lcdbus=0xff;
110 1 lcdusing2=0;
111 1 cs=0;
112 1 }
113
114 void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
115 { register i=0;
116 1 while(strpoint[i]!=0){
117 2 lcd_wrdata(strpoint[i]);
C51 COMPILER V8.02 LCD1602C 02/11/2007 10:15:12 PAGE 3
118 2 i++;
119 2 }
120 1 cs=0;
121 1 }
122 void lcd_init()/*初始化*/
123 { lcd_wrcmd(0x38); /*设置8 位格式,2 行,5*7*/
124 1 lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
125 1 lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
126 1 lcd_wrcmd(0x01); /*清除显示*/
127 1 lcdcounter=0;
128 1 }
129 void lcd_cls()/*清除显示*/
130 { lcd_wrcmd(0x01);
131 1 lcdcounter=0;
132 1 }
133 void timer0(void) interrupt 1 /*T0 中断*/
134 { //TH0=0xd8; /*12M,10ms*/
135 1 //TL0=0xf6;
136 1 TH0=0xb1; /*24M,10ms*/
137 1 TL0=0xe0;
138 1
139 1 TR0=1;
140 1 if(sys10mscounter!=0)sys10mscounter--; /*定时器10ms*/
141 1 if(syslimitcounter!=0)syslimitcounter--; /*定时器10ms*/
142 1 }
143
144
145 void initUart2(void)
146 {
147 1 TMOD|=0x20;
148 1 SCON=0x50;
149 1 PCON|=0x80;
150 1 TH1=0xf3;
151 1 TL1=0xf3;
152 1 TR1=1;
153 1 ES=1;
154 1 }
155 void initTimer(void)
156 {
157 1 TMOD=0x1;
158 1 TH0=0xb1;
159 1 TL0=0xe0;
160 1 }
161
162 void rs232(void) //interrupt 4
163 { unsigned char j;
164 1 if(RI){
165 2 RI=0;
166 2 j=SBUF;
167 2 SBUF = j;
168 2 }
169 1 if(TI) {
170 2 TI=0;
171 2 }
172 1 }
173 /*
174 lcdiiiii()
175 {
176 unsigned char j;
177 IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; 初始化T
178 ZW = 0x01;
179 ZX = 0x80;
C51 COMPILER V8.02 LCD1602C 02/11/2007 10:15:12 PAGE 4
180
181 initTimer();
182 initUart();
183
184 lcd_init();soft_20ms();
185 TR0=1; ET0=1; EA=1; TI=0;
186 lcd_init(); //全黑
187 for(j=0;j<32;j++){lcd_wrdata(0xff);}
188
189 }
190 test()
191 {
192 unsigned char j;
193 IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; //初始化T
194 ZW = 0x01;
195 ZX = 0x80;
196
197 initTimer();
198 initUart();
199
200 lcd_init();soft_20ms();
201 TR0=1; ET0=1; EA=1; TI=0;
202 lcd_init(); //全黑
203 for(j=0;j<32;j++){lcd_wrdata(0xff);}
204
205 ZW = 0xff; ZX = 0x80; //3
206
207
208 while(1)
209 {
210
211 lcd_init();
212 for(j=0;j<80;j++){lcd_wrdata(0xf0);}
213 //ZX = 0xb0;
214 //while(1);
215 hard_10ms(50);
216 lcd_init();
217 lcd_wrcmd(0x40);
218 for(j=0;j<8;j++)lcd_wrdata(path1[j]);
219 for(j=0;j<100;j++)lcd_wrdata(0);
220 hard_10ms(50);
221 lcd_init();
222 lcd_wrcmd(0x40);
223 for(j=0;j<8;j++)lcd_wrdata(path2[j]);
224 for(j=0;j<100;j++)lcd_wrdata(0);
225 hard_10ms(50);
226 lcd_init();
227 lcd_wrcmd(0x40);
228 for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
229 for(j=0;j<100;j++)lcd_wrdata(0);
230 hard_10ms(50);
231 lcd_init();
232 lcd_wrcmd(0x40);
233 for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
234 for(j=0;j<100;j++)lcd_wrdata(0);
235 hard_10ms(50);
236 lcd_init();
237 lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
238 hard_10ms(50);
239 lcd_init();
240 lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
241 hard_10ms(50);
C51 COMPILER V8.02 LCD1602C 02/11/2007 10:15:12 PAGE 5
242 lcd_init();
243 lcd_string("You are wellcome! LCD Driver for51");
244 hard_10ms(500);
245 }
246 }
247 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 420 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 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 + -