📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //============================
2 //绕线机程序
3 //240*64LCD子程序
4 //============================
5 #ifndef __LCD_c__
6 #define __LCD_c__
7 #include "included.h"
8 /*==========================
9 LY-62256SRAM===32K*8
10 字符区:DISPLAY RAM 0000H-07FFH(2K)
11 图形区:DISPLAY RAM 0800H-7FFFH(30K)
12 ===========================*/
13 void int_lcd(void)
14 {
15 1 pr_1(0x00,0x00,0x40);//设置文本显示区域首地址
16 1 pr_1(0x1e,0x00,0x41);//;一行所占字节数30个字符
17 1
18 1 pr_1(0x00,0x08,0x42);//设置设置图形显示区域首地址
19 1 pr_1(0x1e,0x00,0x43);//设置图形显示区域宽度一行所占字节数30个字符
20 1
21 1 pr_12(0xa7); //光标形状设置
22 1
23 1 pr_12(0x80); //启动内部字符发生器
24 1 //;文本与图形以逻辑或的关系合成显示
25 1
26 1 pr_12(0x9c); //启动文本显示,启动图形显示
27 1
28 1 }
29 //===================
30 //对LCD显示SRAM全部清零
31 //==================
32 void clr_dis_sram(void)
33 {
34 1 uint i;
35 1
36 1 pr_1(0x00,0x00,0x24);//地址指针设置
37 1 pr_12(0xb0); //数据自动读写设置,进入自动写模式 //
38 1
39 1 for(i=0;i<0x8000;i++) //32k的字节空间
40 1 {
41 2 st_3();
42 2 d_add = 0x00; //设置数据通道地址/数据写入入口
43 2 }
44 1
45 1 pr_12(0xb3); //退出自动写模式
46 1 }
47 //===============
48 //读状态字子程序
49 //================
50 uchar r_st(void)
51 {
52 1 return (c_add);
53 1 }
54 //==============
55 //判断S1,S0子程序
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 2
56 //==============
57 void st_01(void)
58 {
59 1 uchar date_0;
60 1 do
61 1 {
62 2 date_0 = r_st();
63 2 date_0 &=0x03;
64 2 }while(date_0 != 0x03);
65 1 }
66 //==============
67 //判断S2子程序
68 //==============
69
70 void st_2(void)
71 {
72 1 uchar date_0;
73 1 do
74 1 {
75 2 date_0 = r_st();
76 2 date_0 &=0x04;
77 2 }while(date_0 != 0x04);
78 1 }
79
80 //==============
81 //判断S3子程序
82 //==============
83 void st_3(void)
84 {
85 1 uchar date_0;
86 1 do
87 1 {
88 2 date_0 = r_st();
89 2 date_0 &=0x08;
90 2 }while(date_0 != 0x08);
91 1 }
92 /*==========================
93 ;写指令和数据子程序
94 ;-----2个参数------------
95 ===========================*/
96 void pr_1(uchar date_1,uchar date_2,uchar com_0)
97 {
98 1 st_01();
99 1 d_add = date_1; //第一参数单元
100 1
101 1 st_01();
102 1 d_add = date_2; //取第二参数单元数据
103 1
104 1 st_01();
105 1 c_add = com_0; //写入指令代码
106 1 }
107
108 /*==========================
109 ;写指令和数据子程序
110 ;-----1个参数------------
111 ===========================*/
112 void pr_11(uchar date_1,uchar com_0)
113 {
114 1 st_01();
115 1 d_add = date_1; //一参数单元
116 1
117 1 st_01();
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 3
118 1 c_add = com_0; //写入指令代码
119 1 }
120
121 /*==========================
122 ;写指令
123 ;-----0个参数------------
124 ===========================*/
125 void pr_12(uchar com_0)
126 {
127 1 st_01();
128 1 c_add = com_0; //写入指令代码
129 1 }
130 //=========================
131 //读数据子程序
132 //==========================
133 uchar pr_2(void)
134 {
135 1 st_01();
136 1 return ( d_add); //设置数据通道地址/数据写入入口
137 1 }
138 /*=========在LCD上显示图形===============
139 图形写入子程序(图形方式)
140 参数说明:
141 X:在屏幕上水平方向的位置(字节为单位0--30)
142 Y:在屏幕上垂直方向的位置(像数点为单位0--63)
143 tim0:表示该图形在屏幕上一行上要显示多小个字节
144 tim1:表示该图形在屏幕上要显示多小行
145 tab_add:表的地址位置
146 =================================*/
147
148 void wri_pic(uchar x,uchar y,uchar tim0,uchar tim1,uchar *tab_add)
149 {
150 1 uint dis_add;
151 1 uint cod;
152 1 uchar *pt;
153 1 uint temp_pos;
154 1
155 1 pt = tab_add; //表的地址位置
156 1 dis_add = x+y*0x1e+0x0800;//计算显示RAM的地址
157 1
158 1 for(cod =0;cod<tim1;cod++ ) //tim1=图形的行数
159 1 {
160 2 pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
161 2 for(temp_pos=0;temp_pos<tim0;temp_pos++ )//tim0 =图形的列数
162 2 {
163 3 pr_11(*pt,0xc0);//写指令和数据子程序1个参数
164 3 ++pt;
165 3 }
166 2 dis_add +=30; //修正显示RAM的地址
167 2 }
168 1 }
169
170 ///*;********在LCD上显示西文字符*********************
171 //西文字符写入子程序(文本显示)
172 //参数说明:
173 //X:水平方向的坐标单位(字节)范围(0-30)240/8
174 //Y:垂直方向的坐标单位(字节)范围(0-7)64/8
175 //COD:ASCII码位置在00H-7FH之间,字符代码
176 // ============================================= */
177 void wri_c(uchar x,uchar y,uchar cod)
178 {
179 1 uint dis_add;
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 4
180 1
181 1 dis_add = y*0x1e+x;
182 1 pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
183 1 pr_11(cod,0xc0);
184 1 }
185 /*===========在LCD上显示一个西文字符===========
186 图形方式下显示一个西文字符子程序
187 X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
188 Y:显示屏上的第几行(0--63)像数点为单位
189 cod:该字符在数组中的位置
190 字体下对应的点阵为:宽x高=8x16
191 西文字符写入子程序(图形方式)
192 =============================*/
193
194 void wri_s(uchar x,uchar y,uchar cod,uchar *tab_add)
195 {
196 1 uint dis_add;
197 1 uchar count;
198 1 uchar *true_add;
199 1
200 1 dis_add = y*0x1e+x+0x0800; //0800H OF 30K
201 1 true_add= tab_add+cod*0x10; //西文字符
202 1
203 1 for(count=0;count<16;count++)
204 1 {
205 2 pr_1(dis_add,dis_add>>8,0x24);
206 2 pr_11(*true_add,0xc0);
207 2 ++true_add;
208 2 dis_add +=30;
209 2 }
210 1 }
211
212 /*==========在LCD上显示一个汉字======================
213 在图形方式下显示一个汉字的子程序
214 参数说明:
215 X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
216 Y:显示屏上的第几行(0--63)像数点为单位
217 COD:在字模表中定义的要显示的字是哪个(32个字节为单位)
218 ;汉字写入子程序(图形方式)
219 ;y*30+x+0800 = 要显示的RAM地址d2,d1==>y,x
220 ;====================================*/
221 void wri_cc(uchar x,uchar y,uchar cod,uchar *tab_add)
222 {
223 1 uint dis_add;
224 1 uchar count;
225 1 uchar *true_add;
226 1
227 1 dis_add = y*0x1e+x+0x0800; //显示地址的偏移设置
228 1 true_add = tab_add+cod *32;//数据在表中的地址
229 1 for(count=0;count<16;count++)
230 1 {
231 2 pr_1(dis_add,dis_add>>8,0x24);
232 2 pr_11(*true_add,0xc0);
233 2 ++true_add;
234 2 pr_11(*true_add,0xc0);
235 2 ++true_add;
236 2 dis_add +=30;
237 2 }
238 1 }
239 //;*********在LCD上显示一个点********************
240 //;绘点子程序(240X64)
241 /*==========================================
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 5
242 参数说明:
243 X:显示屏上的水平方向(0--234)像数点为单位
244 Y:显示屏上的垂直方向(0--63)像数点为单位
245 ============================================*/
246
247 void wri_d(void)
248 {
249 1 uint dis_add;
250 1 uchar temp_0;
251 1 dis_add = 5*0x1e+7/8+0x0800;
252 1 pr_1(dis_add,dis_add>>8,0x24);
253 1
254 1 temp_0 =7%8;
255 1 temp_0 = 0x07-temp_0;
256 1 temp_0 |=0xf8; //确定位,相应位为1
257 1 pr_12(temp_0);
258 1 }
259
260 //==============文本显示==ASCII码==========================
261 /*=======显示外部RAM一个地址单元里的值==============
262 参数说明:8*8
263 X:水平方向的坐标单位(字节)范围(0-30)240/8
264 Y:垂直方向的坐标单位(字节)范围(0-7)64/8
265 tim0:数字位数的1/2数,N为数据的位数
266 ==============================*/
267 void dis_dat(uchar x,uchar y,uchar xdata_sram)
268 {
269 1 uint dis_add;
270 1 uchar temp;
271 1
272 1 dis_add = y*0x1e+x;
273 1 pr_1(dis_add,dis_add>>8,0x24);
274 1
275 1 temp =xdata_sram;
276 1 temp =temp>>4;
277 1 temp &=0x0f;
278 1 temp |=0x10; //显示BCD码,如0X79,则屏幕上就显示79
279 1 pr_11(temp,0xc0);
280 1
281 1 temp =xdata_sram;
282 1 temp &=0x0f;
283 1 temp |=0x10;
284 1 pr_11(temp,0xc0);
285 1 }
286 /*======================================
287 读出2汉字并取反后再写入子程序(图形方式)
288 取反显示,是选中的那2个字,变成空心字,
289 以表示选中了当前要设置的子项目
290 =======================================*/
291 void wri_rd(uchar x,uchar y)
292 {
293 1 uchar count=0,col=0;
294 1 uint dis_add;
295 1 uchar temp;
296 1
297 1 dis_add=y*30+x+0x0800;//显示地址
298 1
299 1 for(count=0;count<16;count++)
300 1 {
301 2 pr_1(dis_add,dis_add>>8,0x24);
302 2
303 2 for(col=0;col<4;col++)
C51 COMPILER V7.06 LCD 05/21/2009 11:42:54 PAGE 6
304 2 {
305 3 pr_12(0xc5);//执行一次读操作
306 3 temp=pr_2(); //读数据子程序
307 3 pr_11(~temp,0xc0);//一次写操作
308 3 }
309 2 dis_add +=30;
310 2 }
311 1 }
312 //==============================
313 #endif
314
315
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 691 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 42
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -