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