📄 lcd12864.lst
字号:
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE lcd12864.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: LCD12864显示程序 */
-
-
4 /*功能: 显示英文,数字,符号,图片。 */
-
5 /*难度等级: 高 */
-
6 /* 作者: zengrenliang */
7 /* 版权: http://www.51kaifa.com */
8 /*编写日期: 2006.05.20 */
-
-
9 /*****************************************************************/
10
11 #include <reg52.h>
12 #include <string.h>
13
14 #define uchar unsigned char
15
16 /**********引脚定义*********/
17
18 sbit lck = P3^5;//锁存信号
19 sbit CSA = P2^4;//又区选择
20 sbit CSB = P2^5;//左区选择
21 sbit RW = P2^7;//LCD片选
22 sbit DI = P2^6;//数据/命令选择
23
24 /********常用命令及参数定义********/
25 #define DISPON 0x3f
26 #define DISPOFF 0x3e
27 #define DISPFIRST 0xc0
28 #define SETX 0x40
29 #define SETY 0xb8
30 #define LCDBUZY 0x80
31 #define L 0x00
32 #define R 0x40
33 #define LIMIT 0x80
34
35
36 /**********全局变量************/
37 uchar cbyte;
38 uchar data statu;
39 bit xy;
40
41 /**************函数声明******************/
42
43 void WrL(uchar x);
44 void WrR(uchar x);
45 void Lcmcls(void);
46 void delay1s(void);
47 void Lcminit (void);
48 void Putpicture(uchar flag);
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 2
49 void delay(unsigned int time);
50 void VtoH8x16change(uchar *hzbuf);
51 void Puthalf(uchar *strch,uchar row,uchar col);
52 void Wrdata(uchar x,uchar row,uchar col);
53 void Locatexy(uchar row,uchar col);
54 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
55 void vWrite8x16String(uchar *str,uchar col, uchar row, bit flag);
56
57
58 extern uchar code picture1[];
59 extern uchar code picture2[];
60 extern uchar code char_Table[95][16];
61
62 /***********主程序***************/
63 void main(void)
64 {
65 1 P1 = 0x20;//"液晶"指示灯亮
66 1 Lcminit();
67 1 while(1){
68 2 Putpicture(0);
69 2 delay1s();
70 2 Lcmcls();
71 2 Putpicture(1);
72 2 delay1s();
73 2 Lcmcls();
74 2 vWrite8x16String("abcdefghijklmn" ,0, 8,0);
75 2 vWrite8x16String("ABCDEFGHIJKLMN", 2, 8,0);
76 2 vWrite8x16String("12345678901234", 4, 8,0);
77 2 vWrite8x16String("+-*/!@#$%^&*()", 6, 8,0);
78 2 delay1s();
79 2 Lcmcls();
80 2 }
81 1
82 1 }
83
84
85 /***************微秒级延时*****************/
86 void delay(unsigned int time)
87 { unsigned int i;
88 1 for(i=0;i<time;i++);
89 1 }
90
91 /***************约5S延时********************/
92 void delay1s(void)
93 {
94 1 delay(50000);
95 1 delay(50000);
96 1 delay(50000);
97 1 delay(50000);
98 1 delay(50000);
99 1 delay(50000);
100 1 delay(50000);
101 1 delay(50000);
102 1 delay(50000);
103 1 delay(50000);
104 1 delay(50000);
105 1 delay(50000);
106 1 delay(50000);
107 1 delay(50000);
108 1 delay(50000);
109 1 }
110
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 3
111 //***********初始化LCD*******************/
112
113 void Lcminit (void)
114 {
115 1 cbyte=DISPOFF;
116 1 WrL(cbyte);
117 1 WrR(cbyte);
118 1 cbyte=DISPON;
119 1 WrL(cbyte);
120 1 WrR(cbyte);
121 1 cbyte=DISPFIRST;
122 1 WrL(cbyte);
123 1 WrR(cbyte);
124 1 Lcmcls();
125 1 Locatexy(0,0);
126 1 }
127
128
129 /***************LCD清屏********************/
130 void Lcmcls(void)
131 { uchar i,j;
132 1 for(i=0;i<8;i++){
133 2 delay(6);
134 2 for(j=0;j<LIMIT;j++){
135 3 delay(6);
136 3 Wrdata(0x0,i,j);
137 3 }
138 2 }
139 1 }
140
141 /*****************写左区******************/
142
143 void WrL(uchar x)
144 {
145 1
146 1 RW = 1;//RW=1(读)
147 1 CSA = 0;
148 1 CSB = 1;
149 1 DI = 0;//命令操作
150 1 lck = 0;
151 1 P1 = 0xff;//ELCD=1,使能LCD
152 1 lck = 1;
153 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环检测
154 1 lck = 0;
155 1 P1 = 0xef;//ELCD=1,使能LCD
156 1 lck = 1;
157 1 RW = 0;//RW=0(写)
158 1 P0 = x; //数据送到P0口
159 1
160 1 CSA = 0;
161 1 CSB = 1;
162 1 DI = 0;
163 1
164 1 lck = 0;
165 1 P1 = 0xff;//ELCD=1,使能LCD,把数据打入LCD
166 1 lck = 1;
167 1 delay(3);
168 1 lck = 0;
169 1 P1 = 0xef;//ELCD=0
170 1 lck = 1;
171 1
172 1 }
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 4
173
174 /**************写右区**************/
175 void WrR(uchar data x)
176 {
177 1 RW = 1;//R/W=1读
178 1 CSA = 1;
179 1 CSB = 0;
180 1 DI = 0;//命令操作
181 1 lck = 0;
182 1 P1 = 0xff;
183 1 lck = 1;
184 1 //EN = 1;//使能LCD
185 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
186 1 lck = 0;
187 1 P1 = 0xe;
188 1 lck = 1;
189 1 RW = 0;//RW = 0写
190 1
191 1 P0=x; //数据送到P0口
192 1
193 1 CSA = 1;
194 1 CSB = 0;
195 1 DI = 0;
196 1 lck = 0;
197 1 P1 = 0xff;
198 1 lck = 1;//使能LCD,把数据打入LCD
199 1 delay(3);
200 1 lck = 0;
201 1 P1 = 0xef;
202 1 lck = 1;
203 1
204 1 }
205
206
207 /*************定位*****************/
208 void Locatexy(uchar row,uchar col)
209 {
210 1 uchar x, y, right;
211 1 switch(col&0xc0)
212 1 {
213 2 case 0:{//右半屏
214 3 RW = 1;//R/W=1(读)
215 3 CSA = 1;
216 3 CSB = 0;
217 3 DI = 0;//命令操作
218 3 lck = 0;
219 3 P1 = 0xff;
220 3 lck = 1;; //使能LCD
221 3 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
222 3 lck = 0;
223 3 P1 = 0xef;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -