?? lcd_demo.lst
字號:
ARM COMPILER V2.53, Lcd_Demo 02/08/06 16:25:34 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE Lcd_Demo
OBJECT MODULE PLACED IN .\Obj\Lcd_Demo.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe Lcd_Demo.c THUMB BROWSE DEBUG PRINT(.\LST\LCD_DEMO.LST) TABS(4) OBJECT(.\Obj
-\Lcd_Demo.obj)
stmt level source
1 /*============================================================
2 LPC214X 液晶功能演示
3 作者: Mingtree ycxms88@163.com http://www.mcu123.com
4 ==============================================================
5
6
7
8
9
10
11
12 /*
13 引腳分布
14 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
15 TX0 RX0 CS1 K4 K3
16
17 P0.8 P0.9 P0.10 P0.11 P0.12 P0.13 P0.14 P0.15
18 TX1 RX1 RW SCL SDA K1 VRST K2
19
20 P0.16 P0.17 P0.18 P0.19 P0.20 P0.21 P0.22 P0.23
21 BEEP SCK1 MISO MOSI SSEL RS_COM RW VB
22 P0.24 P0.25 P0.26 P0.27 P0.28 P0.29 P0.30 P0.31
23 AOUT D+ D- A_IN1 A_IN2 CS2 ULED
24
25 LED引腳
26 L1---------L8
27 P1.16----P1.23
28 */
29
30 #include <LPC214X.H> /* LPC214x definitions */
31
32 #include <Code.H>
33
34 #include <adc.h>
35
36 #define ok 13
37 #define add 7
38 #define dec 15
39 #define fun 6
40
41 #define E1 4 //塊1 左邊
42 #define E2 30 //塊2 右邊
43
44 #define RW 22 //讀寫控制端 0為寫 1為讀
45 #define A0 21 //A0為1時是數據,0時為指令數據
46
47 #define BEEP 16
48
49 #define DATA PORTB //數據
50
51
52 uchar key_code=0;
53 uint data=0;
54
55
56
57 void Io_Set(uchar pin) //單個IO口置位函數
58 {
ARM COMPILER V2.53, Lcd_Demo 02/08/06 16:25:34 PAGE 2
59 1 unsigned int io_data=1;
60 1 io_data=io_data<<pin;
61 1 IOSET0=io_data; //IOSET0為IO線上置位寄存器,1有效,0無
62 1 }
63
64
65 void Io_Clr(uchar pin) //單個IO口清零函數
66 {
67 1 unsigned int io_data=1;
68 1 io_data=io_data<<pin;
69 1 IOCLR0=io_data; //IOCLR0為IO線上清零寄存器,1有效,0無
70 1 }
71
72
73 void Io_Set1(uchar pin) //單個IO口置位函數
74 {
75 1 unsigned int io_data=1;
76 1 io_data=io_data<<pin;
77 1 IOSET1=io_data; //IOSET0為IO線上置位寄存器,1有效,0無
78 1 }
79
80
81 void Io_Clr1(uchar pin) //單個IO口清零函數
82 {
83 1 unsigned int io_data=1;
84 1 io_data=io_data<<pin;
85 1 IOCLR1=io_data; //IOCLR0為IO線上清零寄存器,1有效,0無
86 1 }
87 void OUT_DATA(unsigned char data)
88 {
89 1 unsigned char i;
90 1 for(i=0;i<8;i++)
91 1 {
92 2
93 2 if(data&1) {Io_Set1(i+16);} //把相應的IO口置位或者清零
94 2 else {Io_Clr1(i+16);}
95 2 data=data>>1;
96 2 }
97 1 }
98
99
100
101 //延時
102 void delay(unsigned int i)
103 {
104 1 unsigned int k=1000;
105 1 while(i>0)
106 1 {
107 2 i--;
108 2 }
109 1 while(k>1)k--;
110 1 }
111
112
113 void delayms (unsigned int i) { /* Delay function */
114 1 unsigned int n;
115 1 while(i>1)
116 1 {
117 2 for(n=65535;n>1;n--);
118 2 i--;
119 2 }
120 1 }
121 //左頁
122 //發送數據
123 void OUTMD(unsigned char i)
124 {
ARM COMPILER V2.53, Lcd_Demo 02/08/06 16:25:34 PAGE 3
125 1 Io_Set(A0); //A0_1; //寫數據
126 1 delay(1);
127 1 Io_Set(E1); //E1_1;
128 1 delay(1);
129 1 OUT_DATA(i);// DATA=i;
130 1 delay(1);
131 1 Io_Clr(E1); //E1_0;
132 1
133 1 }
134 //左頁
135 //發送命令
136 void OUTMI(unsigned char i)
137 {
138 1 Io_Clr(A0); //A0_0; //寫指令
139 1 delay(1);
140 1 Io_Set(E1); //E1_1;
141 1 delay(1);
142 1 OUT_DATA(i); //DATA=i;
143 1 delay(1);
144 1 Io_Clr(E1); //E1_0;
145 1
146 1 }
147 //右頁
148 //發送數據
149 void OUTSD(unsigned char i)
150 {
151 1 Io_Set(A0); //A0_1; //寫數據
152 1 delay(1);
153 1 Io_Set(E2); //E2_1;
154 1 delay(1);
155 1 OUT_DATA(i); //DATA=i;
156 1 delay(1);
157 1 Io_Clr(E2); //E2_0;
158 1
159 1 }
160 //右頁
161 //發送命令
162 void OUTSI(unsigned char i)
163 {
164 1 Io_Clr(A0); //A0_0; //寫指令
165 1 delay(1);
166 1 Io_Set(E2); //E2_1;
167 1 delay(1);
168 1 OUT_DATA(i); //DATA=i;
169 1 delay(1);
170 1 Io_Clr(E2); //E2_0;
171 1
172 1 }
173
174
175
176
177 //初始化
178 void lcdini(void)
179 {
180 1 Io_Clr(RW); //RW_0;
181 1 OUTMI(0XE2);
182 1 delay(1);
183 1 OUTSI(0XE2);//復位
184 1 delay(1);
185 1 OUTMI(0XAE);
186 1 delay(1);
187 1 OUTSI(0XAE);//POWER SAVE
188 1 delay(1);
189 1 OUTMI(0XA4);
190 1 delay(1);
ARM COMPILER V2.53, Lcd_Demo 02/08/06 16:25:34 PAGE 4
191 1 OUTSI(0XA4);//動態驅動
192 1 delay(1);
193 1 OUTMI(0XA9);
194 1 delay(1);
195 1 OUTSI(0XA9);//1/32占空比
196 1 delay(1);
197 1 OUTMI(0XA0);
198 1 delay(1);
199 1 OUTSI(0XA0);//時鐘線輸出
200 1 delay(1);
201 1 OUTMI(0XEE);
202 1 delay(1);
203 1 OUTSI(0XEE);//寫模式
204 1 delay(1);
205 1 OUTMI(0X00);
206 1 OUTMI(0XC0);
207 1 OUTSI(0X00);
208 1 OUTSI(0XC0);
209 1
210 1 OUTMI(0XAF);
211 1 OUTSI(0XAF);
212 1
213 1 }
214 /*
215 函數說明:同時設置主從顯示頁為0-3頁。(內函數,私有,用戶不直接調用)
216 ------------------------------------------------------------------------
217 */
218 void SetPage(uchar page0,uchar page1)
219 {
220 1 OUTMI(0xB8|page1);OUTSI(0xB8|page0);
221 1 }
222
223 /*
224 --------------------------------------------------------------------------------
225 函數說明:同時設置主從列地址為0-121。(內函數,私有,用戶不直接調用)
226 --------------------------------------------------------------------------------
227 */
228 void SetAddress(uchar address0,uchar address1)
229 {
230 1 OUTMI(address1);OUTSI(address0);
231 1 }
232
233 /*
234 --------------------------------------------------------------------------------
235
236 調用方式:void PutChar0(uchar ch)
237 函數說明:在右頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
238 --------------------------------------------------------------------------------
239 -*/
240 void PutCharR(uchar ch)
241 {
242 1 OUTSD(ch);
243 1 }
244
245 /*
246 --------------------------------------------------------------------------------
247
248 調用方式:void PutChar1(uchar ch)
249 函數說明:在左頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
250 --------------------------------------------------------------------------------
251 -*/
252 void PutCharL(uchar ch)
253 {
254 1 OUTMD(ch);
255 1 }
256
ARM COMPILER V2.53, Lcd_Demo 02/08/06 16:25:34 PAGE 5
257 /*
258 --------------------------------------------------------------------------------
259
260 調用方式:void DrawBmp(bit layer,uchar width,uchar *bmp)
261 函數說明:畫一個圖,layer表示上下層,width是圖形的寬,高都是16,bmp是
262 圖形指針
263 使用zimo3軟件,縱向取模,字節倒序/240字節
264 --------------------------------------------------------------------------------
265 -*/
266 void DrawBmp(unsigned layer,uchar width,unsigned char const *bmp)
267 {
268 1 uchar x,address,i=0; //address表示顯存的物理地址
269 1 uchar page=0; //page表示上下兩頁
270 1 uchar window=0; //window表示左右兩頁
271 1 //putcharR //右邊
272 1 //putcharL //左邊
273 1
274 1 for (x=width;x>1;x--)
275 1 {
276 2 if (i>60) {window=1;address=i%61;}
277 2 else address=i;
278 2
279 2 if(layer==0) //顯示一行八個字
280 2 {
281 3 SetPage(0,0);
282 3 SetAddress(address,address);
283 3 if(window==1)PutCharR(bmp[i]);
284 3 else PutCharL(bmp[i]);
285 3 SetPage(1,1);
286 3 SetAddress(address,address);
287 3 if(window==1)PutCharR(bmp[i+width]);
288 3 else PutCharL(bmp[i+width]);
289 3 }
290 2 else
291 2 { //顯示第二行八個漢字
292 3 SetPage(2,2);
293 3 SetAddress(address,address);
294 3 if(window==1)PutCharR(bmp[i]);
295 3 else PutCharL(bmp[i]);
296 3 SetPage(3,3);
297 3 SetAddress(address,address);
298 3 if(window==1)PutCharR(bmp[i+width]);
299 3 else PutCharL(bmp[i+width]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -