⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdfile.lst

📁 在单片机keil编辑其中如何创建自己的函数库。方便以后自己调用
💻 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 + -