📄 disp.lst
字号:
C51 COMPILER V7.07 DISP 11/03/2004 16:48:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DISP
OBJECT MODULE PLACED IN Disp.obj
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE src\Disp.c LARGE DEBUG OBJECTEXTEND PRINT(.\Disp.lst) OBJECT(Disp.obj)
stmt level source
1 #include "Disph.h"
2 #include "..\.\typedef.h"
3 #include "..\..\i2ch.h"
4 const unsigned char LineTable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
5 const unsigned char ClrTable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
6
7 void Cls(void)
8 {
9 1 for(uc0=0;uc0<MAXROW;uc0++){
10 2 for(uc1=0;uc1<SCREEN_WITH;uc1++){
11 3 DispBuf[uc0][uc1]=0;
12 3 }
13 2 }
14 1 DispChange();
15 1 }
16
17 void DispHz(unsigned char x,unsigned char y)
18 {//在(x,y)处开始显示一个汉字.汉字的内码放在hz[].
19 1 unsigned char font;
20 1 unsigned char uc0,uc1,uc2;
21 1 font=HZSTART;
22 1 uc0=0;
23 1 while(1){
24 2 uc1= I2CRead(font);//*(unsigned char *)font;
25 2 font++;
26 2 uc2= I2CRead(font);//*(unsigned char *)font;
27 2 font++;
28 2 if(uc1==hz[0]&&uc2==hz[1]) break;
29 2 uc0++;
30 2 }
31 1 font=(HZZMSTART +uc0*24);
32 1 for(uc2=0;uc2<2;uc2++){
33 2 LCDWrite(0,x);
34 2 LCDWrite(0,DispPage[y/8+uc2]);
35 2 for(uc0=0;uc0<HZWITH;uc0++){
36 3 uc1=I2CRead(font++);
37 3 LCDWrite(1,uc1);
38 3 }
39 2 }
40 1 }
41 void DispCh(unsigned char x,unsigned char y,unsigned char ch)
42 {//在(x,y)处开始显示一个字符ch.
43 1 unsigned char uc0,uc1;
44 1 unsigned char font;
45 1 LCDWrite(0,x);
46 1 LCDWrite(0,DispPage[y/8]);
47 1 font=CHSTART;// (unsigned char *)&CharTable[0];
48 1 uc0=0;
49 1 while(1){
50 2 uc1= I2CRead(font);//*(unsigned char *)font;
51 2 font++;
52 2 if(uc1==ch) break;
53 2 uc0++;
54 2 }
55 1 font=(CHZMSTART+uc0*6);
C51 COMPILER V7.07 DISP 11/03/2004 16:48:46 PAGE 2
56 1 for(uc0=0;uc0<CHARWITH;uc0++){
57 2 uc1=I2CRead(font++);
58 2 LCDWrite(1,uc1);
59 2 }
60 1 }
61 void DispString(unsigned char x,unsigned char y)//,unsigned char *string)
62 {//在(x,y)处开始显示一个字符串*string.
63 1 unsigned char i=0;
64 1 if(x<0||x>SCREEN_WITH)//2002.7.3
65 1 return;
66 1 if(y<0||y>SCREEN_HIGH)
67 1 return;
68 1 hz[2]=0;
69 1 while(string[i]){
70 2 if(((char)string[i]&0x80)==0x80){
71 3 //display hz
72 3 hz[0]=(char)string[i++];
73 3 hz[1]=(char)string[i++];
74 3 hz[2]=0;
75 3 if(x+HZWITH>SCREEN_WITH){
76 4 x=2;
77 4 y+=HZ_HIGH;
78 4 if(y>SCREEN_HIGH)y=0;
79 4 }
80 3 DispHz(x,y);
81 3 x+=HZWITH;
82 3
83 3 }else{
84 3 //display char
85 3 hz[0]=string[i++];
86 3 if(x+CHARWITH>SCREEN_WITH){
87 4 x=2;
88 4 y+=HZ_HIGH;
89 4 if(y+HZ_HIGH>SCREEN_HIGH)y=0;
90 4 }
91 3 if(hz[0]!=0x0a){
92 4 DispCh(x,y,hz[0]);
93 4 x+=CHARWITH;
94 4 }
95 3 }
96 2 if(x>=SCREEN_WITH){
97 3 x=2;
98 3 y+=HZ_HIGH;
99 3 if(y+HZ_HIGH>=SCREEN_HIGH) y=0;
100 3 }
101 2 }
102 1 }
103
104 void NorArea(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1)
105 {//把左上角(x0,y0)和右下角(x1,y1)反相显示.
106 1 unsigned char x,y,m,m0,m1,temp,temp0;
107 1 char *ptr;
108 1 temp=0;
109 1 for(y=y0;y<=y1;y++){
110 2 m=y%8;
111 2 temp |=LineTable[m];
112 2 if(m==7){
113 3 temp0=~temp;
114 3 ptr=(char *)&DispBuf[y/8][x0-2];
115 3 for(x=x0;x<=x1;x++,ptr++){
116 4 m=*ptr;
117 4 m0 =m&temp0;
C51 COMPILER V7.07 DISP 11/03/2004 16:48:46 PAGE 3
118 4 m1 =~m;
119 4 m1 &=temp;
120 4 *ptr=m0|m1;
121 4 }
122 3 temp=0;
123 3 }
124 2 }
125 1 if(temp){
126 2 temp0=~temp;
127 2 ptr=(char *)&DispBuf[(y-1)/8][x0-2];
128 2 for(x=x0;x<=x1;x++,ptr++){
129 3 m=*ptr;
130 3 m0 =m&temp0;
131 3 m1 =~m;
132 3 m1 &=temp;
133 3 *ptr=m0|m1;
134 3 }
135 2 }
136 1 DispChange();
137 1 }
138 void ClrArea(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1)
139 {
140 1 unsigned char k,m,from,x,y;
141 1 char *ptr;
142 1 k=y0/8,m=0xff;
143 1 for(y=y0;y<=y1;y++){
144 2 if(y/8!=k){//不共一页.
145 3 ptr=(char *)&DispBuf[k++][x0-2];
146 3 for(x=x0;x<=x1;x++,ptr++){
147 4 from= *ptr;
148 4 from &=m;
149 4 *ptr=from;
150 4 }
151 3 m=0xff,y--;
152 3 }else{
153 3 m &=ClrTable[y%8];
154 3 }
155 2 }
156 1 if(m==0xff)return;
157 1 ptr=(char *)&DispBuf[k][x0-2];
158 1 for(x=x0;x<=x1;x++,ptr++){
159 2 from= *ptr;
160 2 from &=m;
161 2 *ptr=from;
162 2 }
163 1 }
164
165 void DisplayBmp(const unsigned char bmpAddr,unsigned char x,unsigned char y,unsigned char Xsize,unsigned c
-har Ysize)
166 { //(x,y) 显示的起始座标.
167 1 //Xsize,Ysize分别是bmp的x,y方向的(点阵)大小.
168 1 unsigned char i,j;
169 1 unsigned char *pto1,*pto2;
170 1 unsigned char m1,m2,m3,m4,m5,m6,m7;
171 1 unsigned char addr;
172 1 m7=y%8;
173 1 addr=bmpAddr;
174 1 if(m7==0){
175 2 m1=Ysize/8;
176 2 m2=y/8;
177 2 for(i=0;i<m1;i++){//
178 3 pto1=(unsigned char *)&DispBuf[m2+i][x-2];
C51 COMPILER V7.07 DISP 11/03/2004 16:48:46 PAGE 4
179 3 for(j=0;j<Xsize;j++,pto1++){
180 4 m4=*pto1;
181 4 m4 |= I2CRead(addr++);//*pfrom;
182 4 *pto1=m4;
183 4 }
184 3 }
185 2 }else{
186 2 m1=0;
187 2 for(i=m7;i<8;i++) m1 |=LineTable[i];
188 2 m2=~m1;
189 2 for(i=0;i<Ysize/8;i++){
190 3 pto1=(unsigned char *)&DispBuf[y/8+i][x-2];
191 3 pto2=(unsigned char *)&DispBuf[y/8+i+1][x-2];
192 3 for(j=0;j<Xsize;j++){
193 4 m3=*(volatile unsigned char *)pto1;
194 4 m4=*(volatile unsigned char *)pto2;
195 4 m5=I2CRead(addr++);//*(volatile unsigned char *)pfrom++;
196 4 m6=m5&m2;
197 4 m6 =m6<<m7;
198 4 m6 |=m3;
199 4 *pto1++=m6;
200 4 m6=m5&m1;
201 4 m6=m6>>(8-m7);
202 4 m6 |=m4;
203 4 *pto2++=m6;
204 4 }
205 3 if(i>6) break;//overflow page range.
206 3 }
207 2 }
208 1
209 1 }
210 void DispChange(void)
211 {
212 1 unsigned char uc0,uc1,uc2;
213 1 unsigned char *ptr;
214 1 for(uc0=0;uc0<4;uc0++){
215 2 LCDWrite(0,0);
216 2 LCDWrite(0,DispPage[uc0]);
217 2 ptr=(unsigned char *)&DispBuf[uc0][0];
218 2 for(uc1=0;uc1<SCREEN_WITH;uc1++){
219 3 uc2=*ptr++;
220 3 LCDWrite(1,uc2);
221 3 }
222 2 }
223 1 }
224 void LCDInit(void)
225 {
226 1 LCDWrite(0,0xe2); //Reset.
227 1 LCDWrite(0,0xaf); //Display ON.
228 1 LCDWrite(0,0xc0); //start line.
229 1 LCDWrite(0,0xb8); //page.
230 1 LCDWrite(0,0); //column.
231 1 LCDWrite(0,0xa0); //ADC.
232 1 LCDWrite(0,0xa9); //duty.
233 1 LCDWrite(0,0xa4);
234 1
235 1 }
236 void LCDBusyTest(void)
237 {
238 1 while(1){
239 2 SetBit(EPort0,E1);
240 2 ClrBit(EPort0,E2);
C51 COMPILER V7.07 DISP 11/03/2004 16:48:46 PAGE 5
241 2 SetBit(EPort1,RW);
242 2 ClrBit(EPort1,A0);
243 2 if((P1&0x80)==0) break;
244 2 }
245 1 }
246 void LCDWrite(unsigned char Cmd,unsigned char ch)
247 {
248 1 // LCDBusyTest();
249 1 SetBit(EPort0,E1);
250 1 ClrBit(EPort0,E2);
251 1 ClrBit(EPort1,RW);
252 1 if(Cmd) SetBit(EPort1,A0);
253 1 else ClrBit(EPort1,A0);
254 1 P1 =ch;
255 1 ClrBit(EPort0,E1);
256 1 SetBit(EPort1,RW);
257 1 }
258 /*
259 void LCDClr(void)
260 {
261 unsigned char uc0,uc1;
262 for(uc1=0;uc1<4;uc1++){
263 LCDWrite(0,0);
264 LCDWrite(0,DispPage[uc1]);
265 for(uc0=0;uc0<70;uc0++){
266 LCDWrite(1,0);
267 }
268 }
269 }
270 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2190 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 303 65
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 6 ----
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 + -