?? 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 + -