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

📄 7455.lst

📁 GY-29-MMA7455发送资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   7455                                                                  01/22/2011 09:43:35 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 7455
OBJECT MODULE PLACED IN 7455.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 7455.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************/
   2          /*程序功能:飞思卡尔加速度传感器MMA7455娱乐仪*/
   3          /*程序模块:1、LED阵列显示模块               */
   4          /*          2、1602显示模块                  */
   5          /*          3、I2C通信模块                   */
   6          /*          4、按键控制模块                  */
   7          /*程序最后修改日期:2010年11月8日星期一      */
   8          /*作者:山西太原瑞生嵌入式                   */
   9          /*联系方式:QQ:   253057617                  */
  10          /*          旺旺:qq253057617                */
  11          /*          E-mail:richgood@163.com          */
  12          /*********************************************/
  13          
  14          #include <reg52.h>
  15          #include <intrins.h>    //要用到_nop_();函数
  16          
  17          #define uchar unsigned char
  18          #define uint  unsigned int
  19          /***************************************************************************/
  20          /***********               单片机引脚定义                       ************/
  21          /***************************************************************************/
  22          sbit set_key =P3^2;         //设置按钮
  23          sbit jia_key =P1^7;                     //加按钮
  24          sbit jian_key=P1^6;                     //减按钮
  25          sbit sda=P2^3;              //I2C 数据传送位
  26          sbit scl=P2^4;              //I2C 时钟传送位
  27          sbit rs=P2^5;                           //1602RS控制位
  28          sbit rw=P2^6;                           //1602RW控制位
  29          sbit e =P2^7;                           //1602E 控制位
  30          
  31          /******************************************************************************/
  32          /**********                     数据部分                            ***********/
  33          /******************************************************************************/
  34          #define IIC_READ  0x1D      //定义读指令
  35          #define IIC_WRITE 0x1D      //定义写指令
  36          
  37          uchar set_key_sign;                     //是否在设置状态标志
  38          uchar delaysign;                        //视觉停留标志
  39          
  40          uchar xposivalue;                       //x正方向满格显示g值
  41          uchar xnegavalue;                       //x反方向满格显示g值
  42          uchar yposivalue;                       //y正方向满格显示g值
  43          uchar ynegavalue;                       //y反方向满格显示g值
  44          //11111111 11111110 11111100 --- 10000000 00000000      led_ma[i]:i为亮灯数量
  45          uchar led_ma[9]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; 
  46          uchar xposiupstate;                     //x正方向上8个LED显示状态
  47          uchar xposidownstate;           //x正方向下8个LED显示状态
  48          uchar xnegaupstate;                     //x反方向上8个LED显示状态
  49          uchar xnegadownstate;           //x反方向下8个LED显示状态
  50          uchar yupstate;                         //y方向上8个LED显示状态
  51          uchar ydownstate;                       //y方向下8个LED显示状态
  52          uchar xposilightnum;            //x正方向亮灯数量(1——16)
  53          uchar xnegalightnum;            //x反方向亮灯数量(1——16)
  54          uchar yposilightnum;            //y正方向亮灯数量(1——8)
  55          uchar ynegalightnum;            //x正方向亮灯数量(1——8)
C51 COMPILER V8.08   7455                                                                  01/22/2011 09:43:35 PAGE 2   

  56          
  57          uchar  ack_sign;                        //I2C 应答标志
  58          uchar table1[16]=" hello!  X= 0.00";            //1602显示数据
  59          uchar table2[16]=" Y= 0.00 Z= 0.00";
  60          uchar table3[16]="No acceleration!";
  61          uchar table4[10]="0123456789";
  62          uchar table5[8] ="Warning!";
  63          uchar table7[16]="value:   X=0.50 ";
  64          
  65          /**************************************************************************/
  66          /************                  各延时程序                    **************/
  67          /**************************************************************************/
  68          void iic_delay()        //5us延时
  69          {
  70   1              _nop_();
  71   1              _nop_();
  72   1              _nop_();
  73   1              _nop_();
  74   1      }
  75          
  76          void delay()                    //消除按键抖动
  77          {
  78   1               unsigned int i;
  79   1               for(i=0;i<20000;i++);
  80   1      }
  81          void delay_50us(uint t)
  82          {
  83   1          uchar j;
  84   1              for(;t>0;t--)
  85   1              for(j=19;j>0;j--);
  86   1      }
  87          void delay_50ms(uchar t)
  88          {
  89   1          uint j;
  90   1              for(;t>0;t--)
  91   1              for(j=6245;j>0;j--);
  92   1      }
  93          /************************************************************************/
  94          /**************                  1602显示部分           *****************/
  95          /************************************************************************/ 
  96          void  write_com(uchar com)         //函数功能:写指令
  97          {
  98   1          e=0;
  99   1              rs=0;
 100   1              rw=0;
 101   1              P0=com;
 102   1              delay_50us(10);
 103   1              e=1;
 104   1              delay_50us(20);
 105   1              e=0;
 106   1      }
 107          void write_date(uchar dat)         //函数功能:写数据
 108          {
 109   1          e=0;
 110   1              rs=1;
 111   1              rw=0;
 112   1              P0=dat;
 113   1              delay_50us(10);
 114   1              e=1;
 115   1              delay_50us(20);
 116   1              e=0;
 117   1      }
C51 COMPILER V8.08   7455                                                                  01/22/2011 09:43:35 PAGE 3   

 118          
 119          void init1602(void)                        //函数功能:初始化1602
 120          {
 121   1          delay_50us(300);
 122   1              write_com(0x38);
 123   1              delay_50us(100);
 124   1              write_com(0x38);
 125   1              delay_50us(100);
 126   1              write_com(0x38);
 127   1              write_com(0x38);
 128   1              write_com(0x01);
 129   1              write_com(0x01);
 130   1              write_com(0x06);
 131   1              write_com(0x0c);
 132   1      }
 133          /*********************************************************************/
 134          /**************               I2C通信部分              ***************/
 135          /*********************************************************************/
 136          void iic_start()               //函数功能:I2C通信开始
 137          {
 138   1              sda=1;
 139   1          iic_delay();
 140   1              scl=1;
 141   1          iic_delay();
 142   1              sda=0;
 143   1              iic_delay();
 144   1              
 145   1      }
 146          
 147          void iic_stop()                //函数功能:I2C通信停止
 148          {
 149   1              sda=0;
 150   1              iic_delay();
 151   1              scl=1;
 152   1              iic_delay();
 153   1              sda=1;
 154   1              iic_delay();
 155   1              
 156   1      }
 157          
 158          void iic_ack()                 //函数功能:I2C通信查应答位
 159          {       
 160   1          sda=1;
 161   1              scl=1;
 162   1              iic_delay();
 163   1              ack_sign=sda;
 164   1              scl=0;     
 165   1      }
 166          
 167          void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节
 168          {
 169   1           uchar i,temp,temp1;
 170   1      
 171   1               temp1=wdata;
 172   1           for(i=0;i<8;i++)
 173   1              {
 174   2                          scl = 0;
 175   2                                      iic_delay();
 176   2                                      temp=temp1;
 177   2                                      temp=temp&0x80;
 178   2                                      if(temp==0x80)
 179   2                                              sda=1;                          
C51 COMPILER V8.08   7455                                                                  01/22/2011 09:43:35 PAGE 4   

 180   2                                      else
 181   2                                              sda=0;
 182   2                                              iic_delay();
 183   2                                              scl=1;
 184   2                                              iic_delay();
 185   2                                              scl=0;
 186   2                                              iic_delay();
 187   2                                              temp1=temp1<<1;
 188   2                              
 189   2              }
 190   1      
 191   1      }
 192          char iic_read_byte(void)                         //函数功能:从I2C从机中读出一个字节
 193          {
 194   1           uchar x;
 195   1               char data_data;
 196   1           for(x=0;x<8;x++)
 197   1              {       
 198   2                  data_data=data_data<<1;
 199   2                      sda=1;
 200   2                      iic_delay();
 201   2                      scl=0;
 202   2                      iic_delay();
 203   2                      scl=1;
 204   2                      iic_delay();
 205   2                      if(sda==1)
 206   2                         data_data|=0x01; 
 207   2                      //else  
 208   2                      //   data_data&=0xfe;
 209   2              }
 210   1              return data_data;
 211   1      }
 212          void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据
 213          {
 214   1           uchar t;
 215   1               t=(IIC_WRITE<<1);
 216   1               iic_start();
 217   1               iic_write_byte(t);
 218   1               iic_ack();
 219   1               iic_write_byte(byte_add);
 220   1               iic_ack();
 221   1               iic_write_byte(wdata);
 222   1               iic_ack();
 223   1               iic_stop();
 224   1      }
 225          char iic_read(uchar byte_add)              //函数功能:按地址读出一字节数据
 226          {
 227   1           uchar t;
 228   1               char x;
 229   1               t=(IIC_WRITE<<1);
 230   1               iic_start();
 231   1               iic_write_byte(t);
 232   1               iic_ack();
 233   1               iic_write_byte(byte_add);
 234   1               iic_ack();
 235   1               t=((IIC_READ<<1)|0x01);
 236   1               iic_start();
 237   1               iic_write_byte(t);
 238   1               iic_ack();
 239   1               x=iic_read_byte();
 240   1               iic_ack();
 241   1               iic_stop();
C51 COMPILER V8.08   7455                                                                  01/22/2011 09:43:35 PAGE 5   

 242   1               return x;
 243   1      }
 244          /************************************************************************/
 245          /*************               LED显示阵列部分               **************/
 246          /************************************************************************/
 247          void led_send(unsigned char t)       //函数功能:8051单片机串行通信发送    
 248          {
 249   1          SBUF=t;
 250   1              while(!TI);
 251   1              TI=0;
 252   1      }
 253          
 254          void led_show()                                          //函数功能:LED面板显示输出
 255          {
 256   1              led_send(xnegaupstate);
 257   1              led_send(xnegadownstate);
 258   1              led_send(xposiupstate);
 259   1              led_send(xposidownstate);
 260   1              led_send(yupstate );
 261   1              led_send(ydownstate);
 262   1                              
 263   1      }
 264          void led_init()                                          //函数功能:初始化LED面板
 265          {
 266   1              SCON=0x00;
 267   1              xposiupstate  =led_ma[0];
 268   1              xposidownstate=led_ma[1];
 269   1              xnegaupstate  =led_ma[0];
 270   1              xnegadownstate=led_ma[1];
 271   1              yupstate      =led_ma[1];
 272   1              ydownstate    =led_ma[0];
 273   1              led_show();
 274   1                      

⌨️ 快捷键说明

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