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

📄 stc_lsm303dlh.lst

📁 GY-51 LSM303DLH 三轴磁场加速度模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   STC_LSM303DLH                                                         06/19/2011 23:40:18 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE STC_LSM303DLH
OBJECT MODULE PLACED IN STC_LSM303DLH.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE STC_LSM303DLH.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //***************************************
   2          // LSM303DLH IIC测试程序
   3          // 使用单片机STC89C51 
   4          // 晶振:11.0592M
   5          // 显示:LCD1602
   6          // 编译环境 Keil uVision2
   7          // 参考宏晶网站24c04通信程序
   8          // 时间:2011年3月1日
   9          // QQ:531389319
  10          //****************************************
  11          #include  <REG51.H>     
  12          #include  <math.h>    //Keil library  
  13          #include  <stdio.h>   //Keil library    
  14          #include  <INTRINS.H>
  15          #define   uchar unsigned char
  16          #define   uint unsigned int     
  17          #define   DataPort P0    //LCD1602数据端口
  18          sbit      SCL=P1^0;      //IIC时钟引脚定义
  19          sbit      SDA=P1^1;      //IIC数据引脚定义
  20          sbit      LCM_RS=P2^0;   //LCD1602命令端口              
  21          sbit      LCM_RW=P2^1;   //LCD1602命令端口              
  22          sbit      LCM_EN=P2^2;   //LCD1602命令端口 
  23          
  24          #define LSM303A_SlaveAddress   0x30       //定义器件在IIC总线中的从地址,(加速度)根据ALT  ADDRESS地址引脚不同修
             -改 0x30(ADDRESS=0)                                 
  25          #define LSM303M_SlaveAddress   0x3C   //定义器件在IIC总线中的从地址,(磁场)根据ALT    ADDRESS地址引脚不同修
             -改
  26          
  27                                                                     
  28          typedef unsigned char  BYTE;
  29          typedef unsigned short WORD;
  30          
  31          BYTE BUF[8];                         //接收数据缓存区           
  32          uchar ge,shi,bai,qian,wan;           //显示变量
  33          int  dis_data;                       //变量
  34          
  35          void delay(unsigned int k);
  36          void InitLcd();                      //初始化lcd1602
  37          
  38          void WriteDataLCM(uchar dataW);
  39          void WriteCommandLCM(uchar CMD,uchar Attribc);
  40          void DisplayOneChar(uchar X,uchar Y,uchar DData);
  41          void conversion(uint temp_data);
  42          
  43          void  Single_Write(uchar SlaveAddress,uchar REG_Address,uchar REG_data);   //单个写入数据
  44          uchar Single_Read(uchar SlaveAddress,uchar REG_Address);                   //单个读取内部寄存器数据
  45          void  Multiple_Read(uchar,uchar);                                          //连续的读取内部寄存器数据
  46          //------------------------------------
  47          void Delay5us();
  48          void Delay5ms();
  49          void LSM303_Start();
  50          void LSM303_Stop();
  51          void LSM303_SendACK(bit ack);
  52          bit  LSM303_RecvACK();
  53          void LSM303_SendByte(BYTE dat);
C51 COMPILER V7.08   STC_LSM303DLH                                                         06/19/2011 23:40:18 PAGE 2   

  54          BYTE LSM303_RecvByte();
  55          void LSM303_ReadPage();
  56          void LSM303_WritePage();
  57          //-----------------------------------
  58          
  59          //*********************************************************
  60          void conversion(uint temp_data)  
  61          {  
  62   1          wan=temp_data/10000+0x30 ;
  63   1          temp_data=temp_data%10000;   //取余运算
  64   1              qian=temp_data/1000+0x30 ;
  65   1          temp_data=temp_data%1000;    //取余运算
  66   1          bai=temp_data/100+0x30   ;
  67   1          temp_data=temp_data%100;     //取余运算
  68   1          shi=temp_data/10+0x30    ;
  69   1          temp_data=temp_data%10;      //取余运算
  70   1          ge=temp_data+0x30;  
  71   1      }
  72          
  73          /*******************************/
  74          void delay(unsigned int k)      
  75          {                                               
  76   1      unsigned int i,j;                               
  77   1      for(i=0;i<k;i++)
  78   1      {                       
  79   2      for(j=0;j<121;j++)                      
  80   2      {;}}                                            
  81   1      }
  82          /*******************************/
  83          void WaitForEnable(void)        
  84          {                                       
  85   1      DataPort=0xff;          
  86   1      LCM_RS=0;LCM_RW=1;_nop_();
  87   1      LCM_EN=1;_nop_();_nop_();
  88   1      while(DataPort&0x80);   
  89   1      LCM_EN=0;                               
  90   1      }                                       
  91          /*******************************/
  92          void WriteCommandLCM(uchar CMD,uchar Attribc)
  93          {                                       
  94   1      if(Attribc)WaitForEnable();     
  95   1      LCM_RS=0;LCM_RW=0;_nop_();
  96   1      DataPort=CMD;_nop_();   
  97   1      LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  98   1      }                                       
  99          /*******************************/
 100          void WriteDataLCM(uchar dataW)
 101          {                                       
 102   1      WaitForEnable();                
 103   1      LCM_RS=1;LCM_RW=0;_nop_();
 104   1      DataPort=dataW;_nop_(); 
 105   1      LCM_EN=1;_nop_();_nop_();LCM_EN=0;
 106   1      }               
 107          /***********************************/
 108          void InitLcd()                          
 109          {                       
 110   1      WriteCommandLCM(0x38,1);        
 111   1      WriteCommandLCM(0x08,1);        
 112   1      WriteCommandLCM(0x01,1);        
 113   1      WriteCommandLCM(0x06,1);        
 114   1      WriteCommandLCM(0x0c,1);
 115   1      }                       
C51 COMPILER V7.08   STC_LSM303DLH                                                         06/19/2011 23:40:18 PAGE 3   

 116          /***********************************/
 117          void DisplayOneChar(uchar X,uchar Y,uchar DData)
 118          {                                               
 119   1      Y&=1;                                           
 120   1      X&=15;                                          
 121   1      if(Y)X|=0x40;                                   
 122   1      X|=0x80;                        
 123   1      WriteCommandLCM(X,0);           
 124   1      WriteDataLCM(DData);            
 125   1      }                                               
 126          
 127          /**************************************
 128          延时5微秒(STC90C52RC@12M)
 129          不同的工作环境,需要调整此函数,注意时钟过快时需要修改
 130          当改用1T的MCU时,请调整此延时函数
 131          **************************************/
 132          void Delay5us()
 133          {
 134   1          _nop_();_nop_();_nop_();_nop_();
 135   1          _nop_();_nop_();_nop_();_nop_();
 136   1              _nop_();_nop_();_nop_();_nop_();
 137   1              _nop_();_nop_();_nop_();_nop_();
 138   1      }
 139          
 140          /**************************************
 141          延时5毫秒(STC90C52RC@12M)
 142          不同的工作环境,需要调整此函数
 143          当改用1T的MCU时,请调整此延时函数
 144          **************************************/
 145          void Delay5ms()
 146          {
 147   1          WORD n = 560;
 148   1      
 149   1          while (n--);
 150   1      }
 151          
 152          /**************************************
 153          起始信号
 154          **************************************/
 155          void LSM303_Start()
 156          {
 157   1          SDA = 1;                    //拉高数据线
 158   1          SCL = 1;                    //拉高时钟线
 159   1          Delay5us();                 //延时
 160   1          SDA = 0;                    //产生下降沿
 161   1          Delay5us();                 //延时
 162   1          SCL = 0;                    //拉低时钟线
 163   1      }
 164          
 165          /**************************************
 166          停止信号
 167          **************************************/
 168          void LSM303_Stop()
 169          {
 170   1          SDA = 0;                    //拉低数据线
 171   1          SCL = 1;                    //拉高时钟线
 172   1          Delay5us();                 //延时
 173   1          SDA = 1;                    //产生上升沿
 174   1          Delay5us();                 //延时
 175   1      }
 176          
 177          /**************************************
C51 COMPILER V7.08   STC_LSM303DLH                                                         06/19/2011 23:40:18 PAGE 4   

 178          发送应答信号
 179          入口参数:ack (0:ACK 1:NAK)
 180          **************************************/
 181          void LSM303_SendACK(bit ack)
 182          {
 183   1          SDA = ack;                  //写应答信号
 184   1          SCL = 1;                    //拉高时钟线
 185   1          Delay5us();                 //延时
 186   1          SCL = 0;                    //拉低时钟线
 187   1          Delay5us();                 //延时
 188   1      }
 189          
 190          /**************************************
 191          接收应答信号
 192          **************************************/
 193          bit LSM303_RecvACK()
 194          {
 195   1          SCL = 1;                    //拉高时钟线
 196   1          Delay5us();                 //延时
 197   1          CY = SDA;                   //读应答信号
 198   1          SCL = 0;                    //拉低时钟线
 199   1          Delay5us();                 //延时
 200   1      
 201   1          return CY;
 202   1      }
 203          
 204          /**************************************
 205          向IIC总线发送一个字节数据
 206          **************************************/
 207          void LSM303_SendByte(BYTE dat)
 208          {
 209   1          BYTE i;
 210   1      
 211   1          for (i=0; i<8; i++)         //8位计数器
 212   1          {
 213   2              dat <<= 1;              //移出数据的最高位
 214   2              SDA = CY;               //送数据口
 215   2              SCL = 1;                //拉高时钟线
 216   2              Delay5us();             //延时

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -