📄 best.lst
字号:
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE BEST
OBJECT MODULE PLACED IN BEST.OBJ
COMPILER INVOKED BY: C:\MANLEY\C51\BIN\C51.EXE BEST.C DB OE SMALL ROM(LARGE)
stmt level source
1 #include <reg51.h>
2 #include <absacc.h>
3 #define uchar unsigned char
4 #define DISPLAY 0XF000
5 #define DISPLAY_B 0XE000
6 #define uint unsigned int
7 #define beginflash 0x8000
8 #define save_begin 0x0100
9 #define out_begin 0x1800
10 #define ad_begin 0x5200
11 #define take_out 0x7000
12 #define timeout 256
13 #define ulong unsigned long
14 #define read_addr 0xD000
15 signed char ptr,tongn;
16 //uint save_out_ram1,take_out_intr1;
17 uint addr_ram0;
18 uchar xdata first_addr[100]={44,76,38,88,52,04,17,8,0x2B,0x4f,0x25,0x54,0x17,0x29,16,18,43,28,51,17,55,03,
-44,76,40,80};
19 //54,14,52,
20 //20,03,12,39,75,53,68,47,07,35,31,50,27,21,46,43,14,03,01},last_addr[100];
21 //uchar code ad_data[]={03,00,03,00,43,14,42,39,41,90,35,92,54,14,52,20,03,12,39,75,53,68,47,07,35,31,50,2
-7,21,46,43,14,03,01};
22 uchar timer0,temp0,temp1,temp2,temp3,temp4,temp_sbuf,timeok,timeintl,timeinth;
23 uchar ramdata,line,addr,outdata,indata,addr1,row,tong;
24 uint outaddr1,times,addr_ram_out,addr_ram_save,rstemp;
25 uchar times1,numb,t,flashdata,a,g,choose,num,beiw;
26 uint addr_ram,addr_ram1,jump,i,j,b,d,z,y,m,n,gg,d1,d2;
27 ulong e;
28 uint faddr;
29 uchar x;
30 bit bdata guo;
31 sbit cl1=P1^6;
32 sbit cl2=P1^7;
33 sbit flashok=P1^4;
34 sbit led=P1^5;
35 uint fhra,ff,flra,cp;
36 uint a3,b3,a4,b4;//void delay(uint i1)
37 //{ uint i2;
38 // uint i3;
39 // for(i2=0;i2<i1;i2++){i3=0;};
40 // }
41
42 uint cnvt_laddr(uint pointer) /*汉字码存放地址的低位*/
43 { long lreg;
44 1 uint laddr;
45 1 a3=XBYTE[pointer];
46 1 b3=XBYTE[pointer+1];
47 1 lreg=(a3-1)*94+(b3-1);
48 1 lreg=lreg*32;
49 1 laddr=lreg|0x8000;
50 1 return (laddr);}
51
52 uchar cnvt_haddr(uint pointer)/*汉字码存放地址的高位*/
53 { ulong hreg;
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 2
54 1 uchar haddr;
55 1 /*if(choose==12)
{a3=ad_data[pointer];
b3=ad_data[pointer+1];}
else*/
59 1 a3=XBYTE[pointer];
60 1 b3=XBYTE[pointer+1];
61 1 hreg=(a3-1)*94+(b3-1);
62 1 hreg=hreg*32;
63 1 hreg=hreg>>13;
64 1 haddr=hreg;
65 1 return (haddr);}
66
67 void read_flash_to_ram() /*从flash里查找一条短信每个汉字的
32位原码并存入以save_begin(#define save_begin 0x0100)
开始的内存里作动态显示用*/
70 { //uint faddr;
71 1 flashok=1; /*关 flash选通端*/
72 1 addr_ram_save=save_begin;/*相当于给了addr_ram_save 地址 */
73 1
74 1 //g=13;
75 1 //faddr=first_addr;
76 1 faddr=first_addr+10;
77 1 //faddr=ad_data;
78 1 for(i=0;i<256;i++)
79 1 { ramdata=0xff;
80 2 XBYTE[addr_ram_save]=ramdata;
81 2 addr_ram_save=addr_ram_save+1;
82 2 }
83 1 for (i=0;i<g;i++)
84 1 { fhra=cnvt_haddr(faddr); /*取地址高位*/
85 2 flra=cnvt_laddr(faddr); /*取地址低位*/
86 2 faddr=faddr+2;
87 2 for(times1=0;times1<32;times1++) /*取32位原码,即一个汉字*/
88 2 {flashok=0;
89 3 XBYTE[beginflash]=fhra;/*高位选通*/
90 3
91 3 flra=flra&0x9fff; /*?*/
92 3 flashdata=XBYTE[flra]; /*取出原码*/
93 3 flashdata=flashdata^0xff;
94 3 /*取反 ,因为大屏是共阳极的设置 */
95 3 flashok=1; /*关 flash选通端*/
96 3 XBYTE[addr_ram_save]=flashdata;
97 3 addr_ram_save=addr_ram_save+1; /*存放内存加一 */
98 3 flra=flra+1;}
99 2 }
100 1
101 1
102 1 }
103
104 void save_out_ram()/*把查到的一条要显示的短信的原代码在以out_begin(见宏定义)为起始地址的内存中重排序以便
-后面的显示*/
105 {
106 1 jump=31;
107 1 addr_ram_out=out_begin; /*addr_ram_out置于
//于out_begin空出一屏之后的地址*/
109 1 addr_ram_save=save_begin; /*找到存取该短信原代码的首地址 */
110 1
111 1
112 1 for(times=0;times<16;times++)
113 1 {
114 2 addr_ram_save=save_begin+2*times;
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 3
115 2 //addr_ram_save=save_begin+2*times+640*a;
116 2 for(times1=0;times1<(g+8);times1++)
117 2 {
118 3 ramdata=XBYTE[addr_ram_save];
119 3 XBYTE[addr_ram_out]=ramdata;
120 3 //x=XBYTE[addr_ram_out];
121 3 addr_ram_out=addr_ram_out+1;
122 3 addr_ram_save=addr_ram_save+1;
123 3 ramdata=XBYTE[addr_ram_save];
124 3 XBYTE[addr_ram_out]=ramdata;
125 3 addr_ram_save=addr_ram_save+jump;
126 3 addr_ram_out=addr_ram_out+1;
127 3 }
128 2 }
129 1 }
130
131 void take_out_intr()/*滚动。。。左移一列,
定义本数组用来放每次中断服务程序取的东西,通过本程序的不断改位置和循环实现从右向左滚动*/
133 { addr_ram_out=out_begin;
134 1 for(j=0;j<16;j++)
135 1 { b4=XBYTE[addr_ram_out];
136 2 b4=b4>>7;
137 2 for(i=0;i<2*(g+8)-1;i++)
138 2 {
139 3 a4=XBYTE[addr_ram_out+1];
140 3 a4=a4>>7;
141 3 XBYTE[addr_ram_out]=(XBYTE[addr_ram_out]<<1)|a4;
142 3 addr_ram_out=addr_ram_out+1;
143 3 }
144 2 XBYTE[addr_ram_out]=(XBYTE[addr_ram_out]<<1)|b4;
145 2 /*XBYTE[addr_ram_out+2*(g+8)-1]=XBYTE[addr_ram_out+2*(g+8)-1]+a4;*/
146 2 addr_ram_out=addr_ram_out+1;
147 2 }
148 1 }
149
150 void initial() /*初始化程序*/
151 {
152 1 //addr=0x30;/*显示屏的地址00010000B*/
153 1 //addr_ram=0x0000;
154 1 PCON=0x80;//0x00;//0x80;
155 1 TMOD=0X22; /*工作方式2*/
156 1 TL1=0xf3;//0Xf3; /*波特率为4800*/
157 1 TH1=0xf3;//0Xf3;
158 1 SCON=0x50;//0X50; /*工作方式2*/
159 1 TR1=1;
160 1 EA=1;
161 1 ES=1;
162 1 IP=0X10; //0x10;
163 1 //ET1=0;
164 1 addr_ram=out_begin;
165 1 //line=0;
166 1 cl1=0;
167 1 cl2=0;
168 1 row=line=0;
169 1 addr_ram0=0x5200;
170 1 numb=timer0=0;
171 1 ptr=0;
172 1 tong=0;
173 1 tongn=0;
174 1 guo=0;
175 1
176 1 d1=0;
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 4
177 1 d2=0;
178 1 b=0;
179 1 addr_ram_save=save_begin;
180 1 addr_ram_out=out_begin;
181 1 g=j=b=d=e=z=y=m=n=0;
182 1 cl1=cl2=times1=0;
183 1 T1=T0=0;
184 1 IP=0x10;/*把串口设为最高优先级*/
185 1
186 1 }
187 void delay(uint i1)
188 {
189 1 uint i2;
190 1 for(i2=0;i2<i1;i2++)
191 1 ;
192 1 }
193
194
195 void scan() interrupt 1 using 3
196 {
197 1 TR0=0; /*关中断计数器*/
198 1
199 1
200 1 addr=0x30;
201 1 outdata=line|addr;/*选通谋一行的地址*/
202 1 //P1_7=0;
203 1 XBYTE[DISPLAY_B]=outdata;
204 1 //P1_7=1;
205 1 T1=0;/*T1,T0都要放到line的循环里*/
206 1 T0=0;
207 1 for(row=0;row<8;row++)
208 1 {//P1_6=0;
209 2 outdata=XBYTE[addr_ram];
210 2 addr_ram=addr_ram+1;
211 2 //if(addr_ram==128)
212 2 //{addr_ram=addr_ram_out;
213 2
214 2 //}
215 2 outaddr1=row;
216 2 //P2=outdata1;
217 2 outaddr1=outaddr1<<8;/*把row的数移到高八位上去,在输出十六位地址时就相当于在p2口输出了*/
218 2 outaddr1=outaddr1+DISPLAY;/*用的好巧,int就是十六位的,正好当地址用*/
219 2 XBYTE[outaddr1]=outdata;
220 2
221 2
222 2 //P1_6=1;
223 2 }
224 1 // delay(8);
225 1 addr=0x10;
226 1 outdata=line|addr;/*选通谋一行的地址*/
227 1 //P1_7=0;
228 1 XBYTE[DISPLAY_B]=outdata;
229 1 //P1_7=1;
230 1 T1=0;/*T1,T0都要放到line的循环里*/
231 1 T0=0;
232 1 for(row=0;row<8;row++)
233 1 {//P1_6=0;
234 2 outdata=XBYTE[addr_ram];
235 2 addr_ram=addr_ram+1;
236 2
237 2 outaddr1=row;
238 2 //P2=outdata1;
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 5
239 2 outaddr1=outaddr1<<8;/*把row的数移到高八位上去,在输出十六位地址时就相当于在p2口输出了*/
240 2 outaddr1=outaddr1+DISPLAY;/*用的好巧,int就是十六位的,正好当地址用*/
241 2 XBYTE[outaddr1]=outdata;
242 2
243 2
244 2 //P1_6=1;
245 2 }
246 1 T1=1;
247 1 line=line+1;
248 1 addr_ram=addr_ram+g*2; //(g+8-8)*2;
249 1 if(addr_ram>=out_begin+256+g*32) //(g+8-8)*32)
250 1 {
251 2 line=0;
252 2 addr_ram=out_begin;
253 2 }
254 1 TL0=0x00;
255 1 TH0=0x00;
256 1 TR0=1;
257 1 //delay(100);
258 1 //}
259 1 //}
260 1 }
261
262 receive() interrupt 4 using 0
263 {
264 1 //TR0=0;
265 1
266 1 while(!RI);/*串口中断标志位为RI,为1时中断,
即接着往下执行,平时等于0,即在这一句处死循环*/
268 1
269 1 RI=0;
270 1 //d++;
271 1 b++;
272 1 rstemp=SBUF;
273 1
274 1 first_addr[b-1]=rstemp;
275 1
276 1
277 1 }
278
279
280 void main(void)
281 { initial();
282 1 //timeok=0;
283 1
284 1 while(b<11);
285 1
286 1
287 1 while(1)
288 1 {
289 2 delay(0xffff);
290 2 g=(b-10)/2;
291 2 b=0;
292 2 //TMOD=0x22;
293 2 IT0=1;
294 2 EX0=1;
295 2 ET0=1;
296 2 //EA=1;
297 2 TL0=0x00;
298 2 TH0=0x00;
299 2
300 2 read_flash_to_ram(); /*转化为32位汉字原代码*/
C51 COMPILER V3.20, SN-50203013 BEST 05/24/00 15:48:46 PAGE 6
301 2 save_out_ram();
302 2
303 2 TR0=1;
304 2
305 2 while(b<11)
306 2 {
307 3
308 3 //TR0=0;
309 3 take_out_intr();/*滚动*/
310 3 //TR0=1;
311 3 delay(0000);/*等待,过后换下一屏*/
312 3
313 3 }
314 2 TR0=0;
315 2
316 2
317 2 }
318 1
319 1
320 1 }
321
322
323
324
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1263 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 100 ----
PDATA SIZE = ---- ----
DATA SIZE = 93 8
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 + -