📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 02/27/2009 02:52:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "lcd.h"
*** WARNING C258 IN LINE 32 OF LCD.H: 'img': mspace on parameter ignored
2
3 /*************************************************************************************************/
4 //内部函数
5 void CheckBusy (void)
6 {
7 1 P1=0xff;
8 1 LcdRs=0;
9 1 LcdRw=1;
10 1 LcdE=1;
11 1 while(Busy==1);
12 1 LcdE =0;
13 1 }
14
15 unsigned char ReadLcd () //写操作
16 {
17 1 unsigned char Rddata;
18 1 CheckBusy ();
19 1 LcdRs=1; //数据
20 1 LcdRw=1; //读
21 1 LcdE=1;
22 1 Rddata=LCD_DATA;
23 1 LcdE=0;
24 1 return Rddata;
25 1 }
26
27 void WriteLcd (unsigned char dat_type,unsigned char content) //写操作
28 {
29 1 CheckBusy ();
30 1 if(dat_type)
31 1 {
32 2 LcdRs=1; //数据
33 2 LcdRw=0; //写
34 2 }
35 1 else
36 1 {
37 2 LcdRs=0; //指令
38 2 LcdRw=0; //写
39 2 }
40 1 LCD_DATA=content;
41 1 LcdE=1;
42 1 LcdE=0;
43 1 }
44
45 //用户函数
46 void Initlcd (void) //初始化LCD
47 {
48 1
49 1 WriteLcd (LCDCOMM,0x30); //基本指令动作
50 1 WriteLcd (LCDCOMM,0x01); //清屏,地址指针指向00
51 1 WriteLcd (LCDCOMM,0x06); //光标的移动方向
52 1 WriteLcd (LCDCOMM,0x0c); //开显示,关游标
53 1
54 1 }
C51 COMPILER V7.06 LCD 02/27/2009 02:52:51 PAGE 2
55
56 void ClearRam (void) //清RAM
57 {
58 1 WriteLcd (LCDCOMM,0x30);
59 1 WriteLcd (LCDCOMM,0x01);
60 1 }
61
62 void ChnPrintf (unsigned char x,unsigned char y,unsigned char code *chn) //显示汉字或字符
63 {
64 1 xdata unsigned char i,len;
65 1 WriteLcd (LCDCOMM,0x30);
66 1 for(len=0;*chn!='\0';chn++,len++);
67 1 chn-=len;
68 1 switch(x)
69 1 {
70 2 case 1:
71 2 WriteLcd (LCDCOMM,0x80+y-1);
72 2 for (i=0;i<16-2*(y-1)&&i<len;i++)
73 2 WriteLcd (LCDDAT,chn[i]);
74 2 WriteLcd (LCDCOMM,0x90);
75 2 for (;i<16-2*(y-1)+16&&i<len;i++)
76 2 WriteLcd (LCDDAT,chn[i]);
77 2 WriteLcd (LCDCOMM,0x88);
78 2 for (;i<16-2*(y-1)+32&&i<len;i++)
79 2 WriteLcd (LCDDAT,chn[i]);
80 2 WriteLcd (LCDCOMM,0x98);
81 2 for (;i<16-2*(y-1)+48&&i<len;i++)
82 2 WriteLcd (LCDDAT,chn[i]);
83 2 break;
84 2 case 2:
85 2 WriteLcd (LCDCOMM,0x90+y-1);
86 2 for (i=0;i<16-2*(y-1)&&i<len;i++)
87 2 WriteLcd (LCDDAT,chn[i]);
88 2 WriteLcd (LCDCOMM,0x88);
89 2 for (;i<16-2*(y-1)+16&&i<len;i++)
90 2 WriteLcd (LCDDAT,chn[i]);
91 2 WriteLcd (LCDCOMM,0x98);
92 2 for (;i<16-2*(y-1)+32&&i<len;i++)
93 2 WriteLcd (LCDDAT,chn[i]);
94 2 break;
95 2 case 3:
96 2 WriteLcd (LCDCOMM,0x88+y-1);
97 2 for (i=0;i<16-2*(y-1)&&i<len;i++)
98 2 WriteLcd (LCDDAT,chn[i]);
99 2 WriteLcd (LCDCOMM,0x98);
100 2 for (;i<16-2*(y-1)+16&&i<len;i++)
101 2 WriteLcd (LCDDAT,chn[i]);
102 2 break;
103 2 case 4:
104 2 WriteLcd (LCDCOMM,0x98+y-1);
105 2 for (i=0;i<16-2*(y-1)&&i<len;i++)
106 2 WriteLcd (LCDDAT,chn[i]);
107 2 break;
108 2 }
109 1 }
110 void ImgPrintf (unsigned char x,unsigned char y,unsigned char Row,unsigned char Lis,unsigned char code img
-[][2]) //显示图形
*** WARNING C258 IN LINE 110 OF LCD.C: 'img': mspace on parameter ignored
111 {
112 1 xdata unsigned char i,j;
113 1 for(i=0;i<Row;i++)
114 1 for(j=0;j<Lis;j++)
C51 COMPILER V7.06 LCD 02/27/2009 02:52:51 PAGE 3
115 1 {
116 2 if(y+i>32)
117 2 {
118 3 WriteLcd (LCDCOMM,0x34);
119 3 WriteLcd (LCDCOMM,Y+y+i-33);
120 3 WriteLcd (LCDCOMM,X+x+j+7);
121 3 }
122 2 else
123 2 {
124 3 WriteLcd (LCDCOMM,0x34);
125 3 WriteLcd (LCDCOMM,Y+y+i-1);
126 3 WriteLcd (LCDCOMM,X+x+j-1);
127 3 }
128 2 WriteLcd (LCDCOMM,0x30);
129 2 WriteLcd (LCDDAT,img[i*Lis+j][0]);
130 2 WriteLcd (LCDDAT,img[i*Lis+j][1]);
131 2 }
132 1 WriteLcd (LCDCOMM,0x36);
133 1 }
134
135 void DotPrintf (unsigned char data1,unsigned char data2) //显示点阵
136 {
137 1 xdata unsigned char i,j,k,x;
138 1 x=X;
139 1 for(k=0;k<2;k++)
140 1 {
141 2 for(j=0;j<16;j++)
142 2 {
143 3 for(i=0;i<8;i++)
144 3 {
145 4 WriteLcd (LCDCOMM,0x34);
146 4 WriteLcd (LCDCOMM,Y+j*2);
147 4 WriteLcd (LCDCOMM,x+i);
148 4 WriteLcd (LCDCOMM,0x30);
149 4 WriteLcd (LCDDAT,data1);
150 4 WriteLcd (LCDDAT,data1);
151 4 }
152 3 for(i=0;i<8;i++)
153 3 {
154 4 WriteLcd (LCDCOMM,0x34);
155 4 WriteLcd (LCDCOMM,Y+j*2+1);
156 4 WriteLcd (LCDCOMM,x+i);
157 4 WriteLcd (LCDCOMM,0x30);
158 4 WriteLcd (LCDDAT,data2);
159 4 WriteLcd (LCDDAT,data2);
160 4 }
161 3 }
162 2 x=XX;
163 2 }
164 1 WriteLcd (LCDCOMM,0x36);
165 1 }
166
167 void DisPrintf (unsigned char data1,unsigned char data2,unsigned char x0,unsigned char y0,unsigned char x1
-,unsigned char yl) //反白显示
168 {
169 1 xdata unsigned char i,j;
170 1 for(j=0;j<yl;j++)
171 1 {
172 2 for(i=0;i<x1;i++)
173 2 {
174 3 WriteLcd (LCDCOMM,0x34); //扩充指令集,绘图关
175 3 WriteLcd (LCDCOMM,y0+j);
C51 COMPILER V7.06 LCD 02/27/2009 02:52:51 PAGE 4
176 3 WriteLcd (LCDCOMM,x0+i);
177 3 WriteLcd (LCDCOMM,0x30); //基本指令集
178 3 WriteLcd (LCDDAT,data1);
179 3 WriteLcd (LCDDAT,data2);
180 3 }
181 2 }
182 1 WriteLcd (LCDCOMM,0x36); //扩充指令集,绘图开
183 1 }
184
185
186 void StdIntPrintf(unsigned char x,unsigned char y,signed int i)//将一个整数直接在屏幕上打印出来,可以显示的
-数据的范围:-32767到+32767
187 {
188 1 unsigned char code StdNumber[11][3]={"0","1","2","3","4","5","6","7","8","9","10"};
189 1 xdata unsigned char m[5];
190 1 xdata unsigned char n=0,fushu=0;
191 1 if (i<0)
192 1 {
193 2 i=-i;
194 2 fushu=1;
195 2 }
196 1 while(i!=0)
197 1 {
198 2 m[n]=i%10;
199 2 i/=10;
200 2 n++;
201 2 }
202 1 if (fushu)
203 1 {
204 2 ChnPrintf(x,y,"-");
205 2 y++;
206 2 }
207 1 for(i=0;i<n;i++)
208 1 ChnPrintf(x,y+i,StdNumber[m[n-i-1]]);
209 1 }
210
211 void PixelPrintf (unsigned char x,unsigned char y,unsigned char real) //显示图形
212 {
213 1 xdata unsigned char LcdData0,LcdData1,LcdData2=0x80,LcdData3=0x80;
214 1 LcdData2=0x80;
215 1 LcdData3=0x80;
216 1 if(x%16==0)
217 1 {
218 2 LcdData3>>=7;
219 2 LcdData2=0x00;
220 2 }
221 1 else if(x%16<8)
222 1 {
223 2 LcdData2>>=x%16-1;
224 2 LcdData3=0x00;
225 2 }
226 1 else if(x%8==0)
227 1 {
228 2 LcdData2>>=7;
229 2 LcdData3=0x00;
230 2 }
231 1 else
232 1 {
233 2 LcdData3>>=(x%16-9);
234 2 LcdData2=0x00;
235 2 }
236 1 if(y>32)
C51 COMPILER V7.06 LCD 02/27/2009 02:52:51 PAGE 5
237 1 {
238 2 y-=32;
239 2 x+=128;
240 2 }
241 1 WriteLcd (LCDCOMM,0x34);
242 1 WriteLcd (LCDCOMM,Y+y-1);
243 1 WriteLcd (LCDCOMM,X+(x-1)/16);
244 1 WriteLcd (LCDCOMM,0x30);
245 1 LcdData0=ReadLcd();
246 1 LcdData0=ReadLcd();
247 1 LcdData1=ReadLcd();
248 1 WriteLcd (LCDCOMM,0x34);
249 1 WriteLcd (LCDCOMM,Y+y-1);
250 1 WriteLcd (LCDCOMM,X+(x-1)/16);
251 1 WriteLcd (LCDCOMM,0x30);
252 1 if(real)
253 1 {
254 2 WriteLcd (LCDDAT,LcdData0|LcdData2);
255 2 WriteLcd (LCDDAT,LcdData1|LcdData3);
256 2 }
257 1 else
258 1 {
259 2 LcdData2^=0xff;
260 2 LcdData3^=0xff;
261 2 WriteLcd (LCDDAT,LcdData0&(LcdData2));
262 2 WriteLcd (LCDDAT,LcdData1&(LcdData3));
263 2 }
264 1 WriteLcd (LCDCOMM,0x36);
265 1
266 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1763 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- 21
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -