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

📄 5045_spi_c.lst

📁 对x5045的c语言读写操作
💻 LST
📖 第 1 页 / 共 2 页
字号:
 241   4                                         {if(flag_k12_first==1)
C51 COMPILER V7.50   5045_SPI_C                                                            05/10/2009 09:56:48 PAGE 5   

 242   5                                             {
 243   6                                                   Addr--;
 244   6                                                       ChangeAdr(Addr);
 245   6                                                   QdorYsh=20;
 246   6                                                 }
 247   5                                           else
 248   5                                             {
 249   6                                                   Addr--;
 250   6                                                   ChangeAdr(Addr);
 251   6                                                       flag_k12_first=1;
 252   6                                                   QdorYsh=200;
 253   6                                                 }
 254   5                                               }
 255   4                                              else
 256   4                                               {if(flag_k12_first==1)
 257   5                                             {
 258   6                                                   Data--;
 259   6                                                       ChangeData(Data);
 260   6                                                   QdorYsh=20;
 261   6                                                 }
 262   5                                            else
 263   5                                             {
 264   6                                                   Data--;
 265   6                                                       ChangeData(Data);
 266   6                                                   flag_k12_first=1;
 267   6                                                   QdorYsh=200;
 268   6                                                 }
 269   5                                                }
 270   4                                                      flag_k=0;
 271   4                                                 break;
 272   4                                 case 0x2c: //K3键处理程序
 273   4                                         P1_5=1;       //再一次有键按下,P1_5LED熄灭
 274   4                                          if(flag_k3_first==1)
 275   4                                                   ;
 276   4                                              else
 277   4                                                flag_k3_first=1;
 278   4                                                DorW=~DorW;      //读或写位取反,显示也取反
 279   4                                                P1_0=~DorW;
 280   4                                                P1_1=DorW;
 281   4                                                flag_k=0;       //键盘处理完
 282   4                                                  break;
 283   4                                         case 0x1c: //K4键处理程序
 284   4                                            if(flag_k4_first==1)
 285   4                                                  { 
 286   5                                                        K4_Count++;
 287   5      //                                                flag_k=0;
 288   5                                                      }
 289   4                                                else
 290   4                                                  { 
 291   5                                                        flag_k4_first=1;
 292   5                                                K4_Delay=25;    //延时判断功能的设置,根据具体的实验板实验而得
 293   5                                                    K4_Count=0x01;}
 294   4      //                                            flag_addr_data=~flag_addr_data;
 295   4                                flag_k=0;
 296   4                                                   break;
 297   4                                         default:
 298   4                                               break;
 299   4                                 }
 300   3                              }
 301   2                        else 
 302   2                         {
 303   3                           flag_k=1;
C51 COMPILER V7.50   5045_SPI_C                                                            05/10/2009 09:56:48 PAGE 6   

 304   3                               flag_k_enter=1;           //设置有键按下标志
 305   3                               QdorYsh=2;            //延时去抖设计时间
 306   3                         }
 307   2                      }
 308   1                      else
 309   1                      {
 310   2                        if(flag_k_enter==1)
 311   2                          {
 312   3                                flag_k=0;
 313   3                                flag_k12_first=0;
 314   3                                flag_k3_first=0;
 315   3      //                        flag_k4_first=0;
 316   3                                flag_k_enter=0;
 317   3                              }
 318   2      //                      else
 319   2      //                        ;
 320   2                      }
 321   1      }
 322          /***************地址字节变换***********/
 323          void ChangeAdr(unsigned char Adr)
 324            {
 325   1            uchar i,j;
 326   1                i=Adr/16;
 327   1                j=Adr%16;
 328   1                DisData[0]=GYshjzh[i];                  //将要显示字符的地址送给指针
 329   1                DisData[1]=GYshjzh[j];
 330   1        }
 331          /***************数据字节变换***********/
 332          void ChangeData(unsigned char Data)
 333            {
 334   1            uchar i,j;
 335   1                i=Data/16;
 336   1                j=Data%16;
 337   1                DisData[4]=GYshjzh[i];                  //将要显示字符的地址送给指针
 338   1                DisData[5]=GYshjzh[j];
 339   1        }
 340          /******************显示子程序********************/
 341          void Display(void)
 342          {  if(ds>6)
 343   1         {
 344   2               P2=DisBit[ds-6];
 345   2         }
 346   1         else{
 347   2         P2=DisBit[ds];}
 348   1         P0=DisData[ds];
 349   1         mDelay(10);
 350   1           ds++;
 351   1         if(ds==0x0c)     //显示位超出LED显示范围
 352   1           ds=0;
 353   1      }
 354          /**************************************************
 355           函数名称: SPISendByte
 356           入口参数: ch
 357           函数功能: 发送一个字节
 358          ****************************************************/
 359          void SPISendByte(unsigned char ch)
 360          { 
 361   1      unsigned char idata n=8;      // 向SDA上发送一位数据字节,共八位      
 362   1               SCK = 1 ;                   //时钟置高
 363   1               CS  = 0 ;                   //选择从机
 364   1      
 365   1      while(n--)
C51 COMPILER V7.50   5045_SPI_C                                                            05/10/2009 09:56:48 PAGE 7   

 366   1      { 
 367   2                   delayNOP();
 368   2                   SCK = 0 ;                   //时钟置低
 369   2                 if((ch&0x80) == 0x80)     // 若要发送的数据最高位为1则发送位1
 370   2         {       
 371   3                         MOSI = 1;     // 传送位1
 372   3         }
 373   2         else
 374   2         {  
 375   3          MOSI = 0;     // 否则传送位0
 376   3         }
 377   2                       delayNOP();
 378   2         ch = ch<<1;         // 数据左移一位
 379   2                    SCK = 1 ;                   //时钟置高 
 380   2      }
 381   1      }
 382          /**************************************************
 383           函数名称: SPIreceiveByte
 384           返回接收的数据
 385           函数功能: 接收一字节子程序
 386          ***************************************************/
 387          unsigned char SPIreceiveByte()
 388          {
 389   1      unsigned char idata n=8;     // 从MISO线上读取一上数据字节,共八位
 390   1      unsigned char tdata;
 391   1               SCK = 1;                    //时钟为高
 392   1               CS  = 0;                    //选择从机
 393   1      while(n--)
 394   1      {       
 395   2                       delayNOP();
 396   2                       SCK = 0;                    //时钟为低
 397   2         delayNOP();
 398   2         tdata = tdata<<1;     // 左移一位,或_crol_(temp,1)
 399   2         if(MISO == 1)
 400   2          tdata = tdata|0x01;     // 若接收到的位为1,则数据的最后一位置1
 401   2         else 
 402   2          tdata = tdata&0xfe;     // 否则数据的最后一位置0
 403   2         SCK=1;
 404   2      }
 405   1      return(tdata);
 406   1      }
 407          /************延时子程序***********/
 408          void mDelay(unsigned char Delay)
 409          {
 410   1          unsigned char  i;
 411   1              for(;Delay>0;Delay--)
 412   1               {
 413   2                 for(i=0;i<124;i++)
 414   2                    {;}
 415   2               }
 416   1      }
 417          /**************读状态寄存器*******************
 418          unsigned char ReadStatus(void)
 419          {       
 420             unsigned char i;
 421            SPISendByte(RDSR);
 422            i=SPIreceiveByte();
 423             CS=1;
 424             delayNOP();
 425             return(i);
 426          }
 427          ***********写状态寄存器*******************/
C51 COMPILER V7.50   5045_SPI_C                                                            05/10/2009 09:56:48 PAGE 8   

 428          void WriteStatus(void)
 429          {
 430   1        SPISendByte(WREN);
 431   1          CS=1;
 432   1              delayNOP();                          //如果CS不变高,下面的写WRSR操作会被忽略
 433   1        SPISendByte(WRSR);
 434   1        SPISendByte(0x33);     //写状态寄存器,不保护写地址,不设置看门狗
 435   1          CS=1;                                //解除对5045的选择
 436   1              delayNOP();
 437   1      }
 438          /**************从EEProm中读取数据************************/
 439          unsigned char ReadEEP(void)
 440          {  unsigned char i;
 441   1         SPISendByte(READ_L);
 442   1         SPISendByte(Addr);
 443   1         i=SPIreceiveByte();
 444   1          CS=1;                          //解除对5045的选择
 445   1              delayNOP();
 446   1         return(i);
 447   1      }
 448          /**************向EEProm写入数据***************************/
 449          void WriteEEP(void)
 450          {
 451   1         SPISendByte(WREN);
 452   1          CS=1;
 453   1              delayNOP();                 //理由同写状态寄存器
 454   1         SPISendByte(WRITE_L);
 455   1         SPISendByte(Addr);
 456   1         SPISendByte(Data);
 457   1          CS=1;                                 //解除对5045的操作
 458   1              delayNOP();
 459   1      }
 460          /************检测写操作**********************************
 461          bit CheakWrite(void)
 462          {
 463             unsigned char j;
 464             j=ReadStatus();
 465              CS=1;                             //解除对5045的选择
 466                  delayNOP();
 467             if((j&0x01)==0)
 468               return(0);                 //表示闲,可以写入数据,写数据前需检查其闲或忙的状态
 469             else
 470               return(1);                                 //表示忙,须等待
 471          } */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    716    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =     12       2
   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 + -