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