📄 sdfile.lst
字号:
C51 COMPILER V7.06 SDFILE 01/10/2009 12:41:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SDFILE
OBJECT MODULE PLACED IN SDfile.OBJ
COMPILER INVOKED BY: D:\silabs\IDEFILES\C51\BIN\C51.EXE SDfile.c BROWSE DEBUG OBJECTEXTEND TABS(2)
stmt level source
1
2 unsigned char xdata count=0,count_flag,connect_data[5],ch1[90],hzk[1024];
3
4 #include <c8051f020.h>
5 #include "SDfile.h"
6 #include "LCD12864.h"
7 //--------------------------------------------------
8 void SYSCLK_init();
9 void uart1_init(void);
10 /****************** Main Routine ******************/
11 void main()
12 {
13 1 bit flag1=0,flag2=0;
14 1 unsigned char xdata pf0,pf1,pf2,pf3,pf4=1,i,j,ASCII_Num=0,hz_num,aa=0,bb;
15 1 unsigned char xdata ch[16],ch2[32],ch3[32];
16 1 unsigned int xdata n,temp;
17 1 unsigned long xdata position=0;
18 1
19 1
20 1 /*unsigned char xdata c1[5]={0x30,0x30,0x30,0x39,0x33};
21 1
22 1 while(!EA);
23 1 n=atoi(c1);
24 1 */
25 1
26 1 MCU_init();
27 1 SD_SPI_init();
28 1 SYSCLK_init();
29 1
30 1
31 1 FAT32_Init();
32 1
33 1 pf4=fopen("ABCDEFGH");
34 1
35 1 pf0=fopen("ASCII2 "); //打开ASCII字库
36 1
37 1 pf2=fopen("HZK16 "); //打开汉字字库
38 1
39 1 pf3=fopen("书籍地址"); //打开记录地址
40 1
41 1 pf1=fopen("书籍1 "); //打开记录库
42 1
43 1
44 1 /* fseek(pf1,file[pf1].file_size-12); //移动到最后一条记录
45 1 fread(pf1,connect_data,5);*/
46 1
47 1 //--------开启串口--------------
48 1 uart1_init();
49 1
50 1 loop:
51 1 EA=1;
52 1 while(EA); //等待串口数据
53 1 //-----------处理计算机端事件------------------
54 1 if(count_flag==4) //连接计算机标志
55 1 {
C51 COMPILER V7.06 SDFILE 01/10/2009 12:41:05 PAGE 2
56 2 while(1)
57 2 {
58 3 for(i=0;i<5;i++)
59 3 {
60 4 SBUF1=connect_data[i];
61 4 while((SCON1&02)==0);
62 4 SCON1&=0xFD;//TI1=0;
63 4 } //向计算机反馈信息
64 3 EA=1;
65 3 while(EA); //等待计算机发送信息
66 3 if(count_flag==2) //下载完成后的标志
67 3 break;
68 3 fwrite(pf1,ch1,90); //向‘书籍1’添加一条记录
69 3 for(i=0;i<5;i++)
70 3 connect_data[i]=ch1[78+i];
71 3 }
72 2 EA=1;
73 2 while(EA); //等待计算机发送信息
74 2 fwriteall(pf3,ch1,5); //擦除内容从写
75 2 while(1)
76 2 {
77 3 EA=1;
78 3 while(EA);
79 3 if(count_flag<80)//记录少于20则记录完成
80 3 {
81 4 fwrite(pf3,ch1,count_flag-1);
82 4 break;
83 4 }
84 3 fwrite(pf3,ch1,80); //向‘书籍1’添加一条记录
85 3
86 3 }
87 2 }
88 1
89 1 position=find1(pf1,pf3,5,ch1,13,90);
90 1 if(position==55)//内容不存在;显示‘不存在’
91 1 {
92 2 ch1[0]=0xb2;ch1[1]=0xbb;aa=0xaa;
93 2 ch1[2]=0xb4;ch1[3]=0xe6;
94 2 ch1[4]=0xd4;ch1[5]=0xda;
95 2 ch1[6]=0xa1;ch1[7]=0xa3;
96 2 for(i=8;i<86;i++)
97 2 ch1[i]=0x20;
98 2 }
99 1 else
100 1 {
101 2 fseek(pf1,position);
102 2 fread(pf1,ch1,90);
103 2 }
104 1
105 1 n=0;
106 1 ASCII_Num=0;
107 1 //-------------调出字库-----------------------------------------------------
108 1 for(i=0;i<84;i++)
109 1 {
110 2 if((ch1[i]<0x80)&&(ch1[i]!=0x20)) //文件中出现空格的删除,出现的是ASCII码
111 2 {
112 3 position=(ch1[i]-32)*16;
113 3 fseek(pf0,position);
114 3 fread(pf0,ch,16);
115 3 for(j=0;j<16;j++)
116 3 {
117 4 hzk[n]=ch[j];
C51 COMPILER V7.06 SDFILE 01/10/2009 12:41:05 PAGE 3
118 4 n++;
119 4 }
120 3 ASCII_Num++; //记录连续的ASCII的个数
121 3 }
122 2 else if(ch1[i]>0x80) //文件中出现的是汉字
123 2 {
124 3 if(ASCII_Num%2!=0) //如果文字中间是奇数个ASCII码,则补16个‘0’
125 3 {
126 4 for(j=0;j<16;j++)
127 4 {
128 5 hzk[n]=0;
129 5 n++;
130 5 }
131 4 ASCII_Num=0;
132 4 }
133 3
134 3 if(!flag1)
135 3 {
136 4
137 4 aa=ch1[i]-0xA1;bb=ch1[i+1]-0xA1;
138 4 temp=aa*0x5e;
139 4 position=temp+bb;
140 4 position=position*0x20;
141 4
142 4 //以上计算公式为position=((ch1[i]-0xA1)*0x5E+(ch1[i+1]-0xA1))*0x20;
143 4 fseek(pf2,position);
144 4 fread(pf2,ch2,32);
145 4 HZKLCD(ch2,ch3);
146 4 flag1=1;
147 4 for(j=0;j<32;j++)
148 4 {
149 5 hzk[n]=ch3[j];
150 5 n++;
151 5 }
152 4
153 4 }
154 3 else
155 3 flag1=0;
156 3 }
157 2 else; //文件中出现空格的删除
158 2 }
159 1
160 1 if(ASCII_Num%2!=0) //如果结尾是奇数个ASCII码,则补16个‘0’
161 1 {
162 2 for(j=0;j<16;j++)
163 2 {
164 3 hzk[n]=0;
165 3 n++;
166 3 }
167 2 }
168 1 //-----------------------------------------------------------------------
169 1
170 1 //液晶显示----------------------------------------
171 1 flag2=0;
172 1 hz_num=0;
173 1 OSCICN = 0x84; //液晶的初始化频率是2MHz
174 1 lcd_init();
175 1 //-----------显示一行(8个字)----------------
176 1 for(i=0;i<4;i++)
177 1 {
178 2 for(j=0;j<8;j++)
179 2 {
C51 COMPILER V7.06 SDFILE 01/10/2009 12:41:05 PAGE 4
180 3 displayhz(2*j,2*i,j+i*8);
181 3 hz_num++;
182 3 // se1=hz_num;
183 3 if(hz_num==(n/32))
184 3 {
185 4 flag2=1;
186 4 break;
187 4 }
188 3
189 3 }
190 2 if(flag2)
191 2 break;
192 2 }
193 1 OSCICN = 0x88; //回复外部晶振
194 1 goto loop;
195 1
196 1 }
197 //---------------------------------------------------
198 //Name :SYSCLK_init
199 //Fun :C8051F020 系统时钟初始化
200 //In :none
201 //Out :none
202 //---------------------------------------------------
203 void SYSCLK_init()
204 {
205 1 int x;
206 1 OSCXCN = 0x67; //用24MHz晶振作系统时钟
207 1 for(x=0;x<256;x++); //等待晶振稳定
208 1 while(!(OSCXCN & 0x80));
209 1 OSCICN = 0x88; //关闭内部晶振,当时钟失效时触发复位
210 1 }
211 //----------------------------------------------------------------------
212 //----------------------------------------------------------------------
213 //------------------串口初始化-------------------
214 void uart1_init(void)
215 {
216 1 SCON1=0X50;
217 1 TMOD=0X20;
218 1 TH1=0X70; //TH1=256-晶振(24MHz)/9600/16=0x64;TH1=256-晶振(22.1184MHz)/9600/16=0x70;
219 1 TR1=1;
220 1 CKCON|=0X10; //适用系统时钟
221 1 PCON|=0X90; //SMOD1 是UART1 的波特率加倍控制位
222 1 EIE2=0x40; //开串口1中断
223 1 EA=1;
224 1 ////ES1=1;
225 1 }
226 /****************串口0中断**************************/
227 void serial_int1(void) interrupt 20
228 {
229 1 unsigned char a;
230 1 a=SCON1;
231 1 if(a&1==1) //即RI1=1;这是接收中断
232 1 {
233 2 SCON1=a&0xFE; //RI1=0
234 2 ch1[count]=SBUF1; //-0x40
235 2 if(ch1[count]==0x0A) //结束时的换行标志
236 2 {
237 3 EA=0; //关串口1中断
238 3 count_flag=count;
239 3 count=0;
240 3 }
241 2 else
C51 COMPILER V7.06 SDFILE 01/10/2009 12:41:05 PAGE 5
242 2 count++;
243 2 }
244 1 else
245 1 {
246 2 SCON1=a&0xFD; //TI1=0
247 2
248 2 }
249 1
250 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1825 ----
CONSTANT SIZE = 45 ----
XDATA SIZE = 1121 99
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -