📄 lcd_picure.lst
字号:
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LCD_PICURE
OBJECT MODULE PLACED IN lcd_picure.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd_picure.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include < reg52.h >
2 #include < intrins.h >
3
4 #define lcd_Data P0 //数据口
5 sbit LCD_RS = P2^2; //数据命令选择端
6 sbit LCD_RW = P2^1; //读写控制
7 sbit LCD_EN = P2^0; //使能端
8 sbit lcd_Data7=P0^7;
9
10 unsigned char count1,count2,lcd_x,lcd_y,data1,data2,i,j;
11
12 void initial(void);
13 void clear_LCD(void);
14 char read_data(void);
15 void send_data(unsigned char dat);
16 void send_cmd(unsigned char cmd);
17 void lcd_check_busy(void);
18 void display1(unsigned char x_addr,unsigned char dat1,unsigned char dat2);
19 void display2(unsigned char x_addr,unsigned char data1);
20 //void picture_display(const unsigned char *s);
21 void picture_display(unsigned char s1,unsigned char s2);
22 void set_dot(unsigned char x,unsigned char y);
23 void line(unsigned char start_x,unsigned char start_y,unsigned char end_x,unsigned char end_y);
24
25 unsigned char temp;
26 void main(void)
27 {
28 1 initial();
29 1 temp=0x80;
30 1 lcd_x=0x90;
31 1 lcd_y=0x80;
32 1 while(1)
33 1 {
34 2
35 2 lcd_y=0x80; //设置液晶下半部分坐标
36 2 lcd_x=0x90;
37 2 _nop_();_nop_();_nop_();
38 2 for(i=0;i<32;i++) //写入液晶下半图象部分
39 2 {
40 3 picture_display(0x00,0x00);
41 3 lcd_y++; //y轴地址加1
42 3 }
43 2 lcd_y=0x80; //设置液晶下半部分坐标
44 2 lcd_x=0x91;
45 2 _nop_();_nop_();_nop_();
46 2 for(i=0;i<32;i++) //写入液晶下半图象部分
47 2 {
48 3 picture_display(0x00,0x00);
49 3 lcd_y++; //y轴地址加1
50 3 }
51 2 lcd_y=0x80; //设置液晶下半部分坐标
52 2 lcd_x=0x92;
53 2 _nop_();_nop_();_nop_();
54 2 for(i=0;i<32;i++) //写入液晶下半图象部分
55 2 {
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 2
56 3 picture_display(0x00,0x00);
57 3 lcd_y++; //y轴地址加1
58 3 }
59 2 lcd_y=0x80; //设置液晶下半部分坐标
60 2 lcd_x=0x93;
61 2 _nop_();_nop_();_nop_();
62 2 for(i=0;i<32;i++) //写入液晶下半图象部分
63 2 {
64 3 picture_display(0x00,0x00);
65 3 lcd_y++; //y轴地址加1
66 3 }
67 2 lcd_y=0x80; //设置液晶下半部分坐标
68 2 lcd_x=0x94;
69 2 _nop_();_nop_();_nop_();
70 2 for(i=0;i<32;i++) //写入液晶下半图象部分
71 2 {
72 3 picture_display(0x00,0x00);
73 3 lcd_y++; //y轴地址加1
74 3 }
75 2 lcd_y=0x80; //设置液晶下半部分坐标
76 2 lcd_x=0x95;
77 2 _nop_();_nop_();_nop_();
78 2 for(i=0;i<32;i++) //写入液晶下半图象部分
79 2 {
80 3 picture_display(0x00,0x00);
81 3 lcd_y++; //y轴地址加1
82 3 }
83 2 lcd_y=0x80; //设置液晶下半部分坐标
84 2 lcd_x=0x96;
85 2 _nop_();_nop_();_nop_();
86 2 for(i=0;i<32;i++) //写入液晶下半图象部分
87 2 {
88 3 picture_display(0x00,0x00);
89 3 lcd_y++; //y轴地址加1
90 3 }
91 2 lcd_y=0x80; //设置液晶下半部分坐标
92 2 lcd_x=0x97;
93 2 _nop_();_nop_();_nop_();
94 2 for(i=0;i<32;i++) //写入液晶下半图象部分
95 2 {
96 3 picture_display(0x00,0x00);
97 3 lcd_y++; //y轴地址加1
98 3 }
99 2 lcd_y=0x80; //设置液晶下半部分坐标
100 2 lcd_x=0x98;
101 2 _nop_();_nop_();_nop_();
102 2 for(i=0;i<32;i++) //写入液晶下半图象部分
103 2 {
104 3 picture_display(0x00,0x00);
105 3 lcd_y++; //y轴地址加1
106 3 }
107 2 lcd_y=0x80; //设置液晶下半部分坐标
108 2 lcd_x=0x99;
109 2 _nop_();_nop_();_nop_();
110 2 for(i=0;i<32;i++) //写入液晶下半图象部分
111 2 {
112 3 picture_display(0x00,0x00);
113 3 lcd_y++; //y轴地址加1
114 3 }
115 2 lcd_y=0x80; //设置液晶下半部分坐标
116 2 lcd_x=0x9a;
117 2 _nop_();_nop_();_nop_();
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 3
118 2 for(i=0;i<32;i++) //写入液晶下半图象部分
119 2 {
120 3 picture_display(0x00,0x00);
121 3 lcd_y++; //y轴地址加1
122 3 }
123 2 lcd_y=0x80; //设置液晶下半部分坐标
124 2 lcd_x=0x9b;
125 2 _nop_();_nop_();_nop_();
126 2 for(i=0;i<32;i++) //写入液晶下半图象部分
127 2 {
128 3 picture_display(0x00,0x00);
129 3 lcd_y++; //y轴地址加1
130 3 }
131 2 lcd_y=0x80; //设置液晶下半部分坐标
132 2 lcd_x=0x9c;
133 2 _nop_();_nop_();_nop_();
134 2 for(i=0;i<32;i++) //写入液晶下半图象部分
135 2 {
136 3 picture_display(0x00,0x00);
137 3 lcd_y++; //y轴地址加1
138 3 }
139 2 lcd_y=0x80; //设置液晶下半部分坐标
140 2 lcd_x=0x9d;
141 2 _nop_();_nop_();_nop_();
142 2 for(i=0;i<32;i++) //写入液晶下半图象部分
143 2 {
144 3 picture_display(0x00,0x00);
145 3 lcd_y++; //y轴地址加1
146 3 }
147 2 lcd_y=0x80; //设置液晶下半部分坐标
148 2 lcd_x=0x9e;
149 2 _nop_();_nop_();_nop_();
150 2 for(i=0;i<32;i++) //写入液晶下半图象部分
151 2 {
152 3 picture_display(0x00,0x00);
153 3 lcd_y++; //y轴地址加1
154 3 }
155 2 lcd_y=0x80; //设置液晶下半部分坐标
156 2 lcd_x=0x9f;
157 2 _nop_();_nop_();_nop_();
158 2 for(i=0;i<32;i++) //写入液晶下半图象部分
159 2 {
160 3 picture_display(0x00,0x00);
161 3 lcd_y++; //y轴地址加1
162 3 }
163 2 line(1,30,120,5);
164 2
165 2 line(5,5,50,50);
166 2
167 2 line(80,10,30,50);
168 2
169 2 while(1);
170 2 }
171 1 }
172
173 /******************************************************/
174 /******************* 液晶显示 ******************/
175 /******************************************************/
176 void lcd_check_busy(void)
177 {
178 1 _nop_();_nop_();_nop_();
179 1 LCD_RS =0;//RC5
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 4
180 1 _nop_();_nop_();_nop_();
181 1 LCD_RW =1;//RC4
182 1 while(1)
183 1 {
184 2 LCD_EN=1;//RC3
185 2 _nop_();_nop_();_nop_();
186 2 if(lcd_Data7==0)break;
187 2 _nop_();_nop_();_nop_();
188 2 }
189 1 LCD_EN=0;
190 1 }
191
192 void send_cmd(unsigned char cmd)
193 {
194 1 lcd_check_busy();
195 1 _nop_();_nop_();_nop_();
196 1 LCD_RS=0;
197 1 _nop_();_nop_();_nop_();
198 1 LCD_RW=0;
199 1 _nop_();_nop_();_nop_();
200 1 LCD_EN=1;
201 1 _nop_();_nop_();_nop_();
202 1 lcd_Data=cmd;
203 1 _nop_();_nop_();_nop_();
204 1 LCD_EN=0; //停止工作
205 1 }
206
207 void initial(void)
208 {
209 1 _nop_();_nop_();_nop_();
210 1 send_cmd(0x30);//基本指令集;
211 1 _nop_();_nop_();_nop_();
212 1 send_cmd(0x0c);//整体显示,关光标,不闪烁;
213 1 _nop_();_nop_();_nop_();
214 1 send_cmd(0x01);//清DDRAM;
215 1 _nop_();_nop_();_nop_();
216 1 send_cmd(0x02);//DDRAM地址归位;
217 1 _nop_();_nop_();_nop_();
218 1 send_cmd(0x80);//设定DDRAM 7位地址000,0000到地址计数器AC;
219 1 _nop_();_nop_();_nop_();
220 1 send_cmd(0x04);//指定在资料写入或读取时,光标的移动方向,
221 1 //DDRAM的地址计数器(AC)加一;
222 1 _nop_();_nop_();_nop_();
223 1 send_cmd(0x0c);//整体显示,开光标,开闪烁;
224 1
225 1 }
226
227 void clear_LCD(void)
228 {
229 1 send_cmd(0x01);
230 1 _nop_();_nop_();_nop_();
231 1 send_cmd(0x34);
232 1 _nop_();_nop_();_nop_();
233 1 send_cmd(0x30);
234 1 }
235
236 char read_data(void)
237 {
238 1 unsigned char read_data;
239 1 lcd_check_busy();
240 1 LCD_RS=1;
241 1 _nop_();_nop_();_nop_();
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 5
242 1 LCD_RW=1;
243 1 _nop_();_nop_();_nop_();
244 1 LCD_EN=1;
245 1 _nop_();_nop_();_nop_();
246 1 read_data=lcd_Data;
247 1 LCD_EN=0;
248 1 return (read_data);
249 1 }
250
251 void send_data(unsigned char dat)
252 {
253 1 lcd_check_busy();
254 1 LCD_RS =1;
255 1 _nop_();_nop_();_nop_();
256 1 LCD_RW =0;
257 1 _nop_();_nop_();_nop_();
258 1 LCD_EN =1;
259 1 _nop_();_nop_();_nop_();
260 1 lcd_Data =dat;
261 1 _nop_();_nop_();_nop_();
262 1 LCD_EN =0;
263 1 }
264
265 void display1(unsigned char x_addr,unsigned char data1,unsigned char data2)
266 {
267 1 send_cmd(x_addr);//1xxx,xxxx设定DDRAM7位地址xxx,xxxx到地址计数器AC;
268 1 send_data(data1);
269 1 send_data(data2);
270 1 }
271
272
273 void display2(unsigned char x_addr,unsigned char data1)
274 {
275 1 send_cmd(x_addr);//1xxx,xxxx设定DDRAM7位地址xxx,xxxx到地址计数器AC;
276 1 send_data(data1);
277 1 }
278
279 void picture_display(unsigned char s1,unsigned char s2)
280 {
281 1 //unsigned char dat1,dat2;
282 1 lcd_check_busy();
283 1 send_cmd(0x34); //扩充指令集,绘图显示关闭
284 1 _nop_();_nop_();_nop_();
285 1 // send_cmd(0x80);
286 1 send_cmd(lcd_y);
287 1 send_cmd(lcd_x);
288 1 // i=read_data();
289 1 // j=read_data();
290 1 // s2 =(s2|j);
291 1 // s1 =(s1|i);
292 1 _nop_();_nop_();_nop_();
293 1 send_data(s1);
294 1 _nop_();_nop_();_nop_();
295 1 send_data(s2);
296 1 _nop_();_nop_();_nop_();
297 1 send_cmd(0x36); //扩充指令集,绘图显示关闭
298 1 _nop_();_nop_();_nop_();
299 1 send_cmd(0x30); //恢复到基本指令集
300 1 }
301 /*
302 void set_dot(unsigned char x,unsigned char y)
303 {
C51 COMPILER V7.20 LCD_PICURE 09/02/2007 16:28:22 PAGE 6
304 unsigned char x1,x2;
305 if(y>31)
306 {
307 lcd_y=63-y+0x80;
308 x1=x/16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -