找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3753|回复: 2
打印 上一主题 下一主题
收起左侧

ADXL345倾角测量仪源程序 单片机+LCD1602显示

[复制链接]
跳转到指定楼层
楼主
ID:151544 发表于 2016-12-4 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. /****************************************************************
  2. 声明:本程序仅供大家参考学习,未经本人同意禁止用于商业用途。
  3. 工程名称:ADXL345倾角测量仪
  4. 功能: 以LCD1602显示的倾角度
  5. QQ:162050981
  6. ***************************************************************/

  7. #include  <STC12C5A.H>        
  8. #include  <math.h>    //Keil library  
  9. #include  <stdio.h>   //Keil library        
  10. #include  <INTRINS.H>


  11. #define   uchar unsigned char
  12. #define   uint unsigned int        
  13. #include "eeprom52.h"

  14. #define   DataPort P0    //LCD1602数据端口

  15. sbit          SCL=P1^3;      //IIC时钟引脚定义
  16. sbit           SDA=P1^4;      //IIC数据引脚定义

  17. sbit      LCM_RS=P2^5;   //LCD1602命令端口               
  18. sbit      LCM_RW=P2^6;   //LCD1602命令端口               
  19. sbit      LCM_EN=P2^7;   //LCD1602命令端口

  20. sbit  MOTOR_Z = P1^1;
  21. sbit  MOTOR_F = P1^2;

  22. uint  xiaozheng=0 ,bianliang=0 ,fazhi=1;
  23. uchar kaiji=1;

  24. sbit K1 = P3^3; //加
  25. sbit K2 = P3^4;  //减

  26. sbit K3 = P3^2;  //校准
  27. sbit K4 = P3^1; //手动自动切换

  28. bit flat=1;
  29. bit REfsh=1;
  30. bit REfsh2=1;

  31. bit genxin=1;
  32. bit flag_300ms ;

  33. uchar aa=0;

  34. #define        SlaveAddress   0xA6          //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改
  35.                               //ALT  ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
  36. typedef unsigned char  BYTE;
  37. typedef unsigned short WORD;

  38. BYTE BUF[8];                         //接收数据缓存区              
  39. uchar ge,shi,bai,qian,wan;           //显示变量

  40. uchar san,er,yi;           //显示变量

  41. int  dis_data;                       //变量
  42. int fuzhi;

  43. void delay(unsigned int k);
  44. void InitLcd();                      //初始化lcd1602
  45. void Init_ADXL345(void);             //初始化ADXL345

  46. void WriteDataLCM(uchar dataW);
  47. void WriteCommandLCM(uchar CMD,uchar Attribc);
  48. void DisplayOneChar(uchar X,uchar Y,uchar DData);
  49. void conversion(uint temp_data);

  50. void  Single_Write_ADXL345(uchar REG_Address,uchar REG_data);   //单个写入数据
  51. uchar Single_Read_ADXL345(uchar REG_Address);                   //单个读取内部寄存器数据
  52. void  Multiple_Read_ADXL345();                                  //连续的读取内部寄存器数据
  53. //------------------------------------
  54. void Delay5us();
  55. void Delay5ms();
  56. void ADXL345_Start();
  57. void ADXL345_Stop();
  58. void ADXL345_SendACK(bit ack);
  59. bit  ADXL345_RecvACK();
  60. void ADXL345_SendByte(BYTE dat);
  61. BYTE ADXL345_RecvByte();
  62. void ADXL345_ReadPage();
  63. void ADXL345_WritePage();
  64. //-----------------------------------



  65. /******************把数据保存到单片机内部eeprom中******************/
  66. void write_eeprom()
  67. {
  68.         SectorErase(0x2000);

  69.         byte_write(0x2001, xiaozheng);
  70.         byte_write(0x2002, bianliang);
  71.         byte_write(0x2003, fazhi);
  72.         byte_write(0x2004, kaiji);
  73.         byte_write(0x2060, a_a);        
  74. }

  75. /******************把数据从单片机内部eeprom中读出来*****************/
  76. void read_eeprom()
  77. {

  78.         xiaozheng = byte_read(0x2001);
  79.         bianliang = byte_read(0x2002);
  80.         fazhi = byte_read(0x2003);
  81.         kaiji = byte_read(0x2004);
  82.         a_a      = byte_read(0x2060);
  83. }

  84. /**************开机自检eeprom初始化*****************/
  85. void init_eeprom()
  86. {
  87.         read_eeprom();                //先读
  88.         if(a_a != 2)                //新的单片机初始单片机内问eeprom
  89.         {
  90.                
  91.                 bianliang = 0;
  92.                 fazhi=1;
  93.                 a_a = 2;
  94.                 write_eeprom();
  95.         }        
  96. }



  97. //*********************************************************
  98. void conversion(uint temp_data)  
  99. {  
  100.     wan=temp_data/10000+0x30 ;
  101.     temp_data=temp_data%10000;   //取余运算
  102.           qian=temp_data/1000+0x30 ;
  103.          
  104.         san=temp_data/1000;
  105.     temp_data=temp_data%1000;    //取余运算
  106.     bai=temp_data/100+0x30   ;
  107.          
  108.         er=temp_data/100;
  109.     temp_data=temp_data%100;     //取余运算
  110.     shi=temp_data/10+0x30    ;
  111.         
  112.         yi=temp_data/10;
  113.     temp_data=temp_data%10;      //取余运算
  114.     ge=temp_data+0x30;         
  115. }

  116. /*******************************/
  117. void delay(unsigned int k)        
  118. {                                                
  119. unsigned int i,j;                                
  120.         for(i=0;i<k;i++)
  121.         {                        
  122.         for(j=0;j<121;j++)                        
  123.         {;}}                                                
  124. }
  125. /*******************************/
  126. void WaitForEnable(void)        
  127. {                                       
  128.         DataPort=0xff;               
  129.         LCM_RS=0;LCM_RW=1;_nop_();
  130.         LCM_EN=1;_nop_();_nop_();
  131.         while(DataPort&0x80);        
  132.         LCM_EN=0;                                
  133. }                                       
  134. /*******************************/
  135. void WriteCommandLCM(uchar CMD,uchar Attribc)
  136. {                                       
  137.         if(Attribc)WaitForEnable();        
  138.         LCM_RS=0;LCM_RW=0;_nop_();
  139.         DataPort=CMD;_nop_();        
  140.         LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  141. }                                       
  142. /*******************************/
  143. void WriteDataLCM(uchar dataW)
  144. {                                       
  145.         WaitForEnable();               
  146.         LCM_RS=1;LCM_RW=0;_nop_();
  147.         DataPort=dataW;_nop_();        
  148.         LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  149. }               
  150. /***********************************/
  151. void InitLcd()                                
  152. {                        
  153.         WriteCommandLCM(0x38,1);        
  154.         WriteCommandLCM(0x08,1);        
  155.         WriteCommandLCM(0x01,1);        
  156.         WriteCommandLCM(0x06,1);        
  157.         WriteCommandLCM(0x0c,1);
  158. }                        
  159. /***********************************/
  160. void DisplayOneChar(uchar X,uchar Y,uchar DData)
  161. {                                                
  162.         Y&=1;                                                
  163.         X&=15;                                                
  164.         if(Y)X|=0x40;                                       
  165.         X|=0x80;                        
  166.         WriteCommandLCM(X,0);               
  167.         WriteDataLCM(DData);               
  168. }                                                

  169. /**************************************
  170. 延时5微秒(STC90C52RC---12MHz---12T)
  171. 不同的工作环境,需要调整此函数,注意时钟过快时需要修改
  172. 当改用1T的MCU时,请调整此延时函数
  173. **************************************/
  174. void Delay5us()
  175. {
  176.     _nop_();_nop_();_nop_();_nop_();
  177.     _nop_();_nop_();_nop_();_nop_();
  178.         _nop_();_nop_();_nop_();_nop_();
  179. }

  180. /**************************************
  181. 延时5毫秒(STC90C52RC@12M)
  182. 不同的工作环境,需要调整此函数
  183. 当改用1T的MCU时,请调整此延时函数
  184. **************************************/
  185. void Delay5ms()
  186. {
  187.     WORD n = 560;

  188.     while (n--);
  189. }

  190. /**************************************
  191. 起始信号
  192. **************************************/
  193. void ADXL345_Start()
  194. {
  195.     SDA = 1;                    //拉高数据线
  196.     SCL = 1;                    //拉高时钟线
  197.     Delay5us();                 //延时
  198.     SDA = 0;                    //产生下降沿
  199.     Delay5us();                 //延时
  200.     SCL = 0;                    //拉低时钟线
  201. }

  202. /**************************************
  203. 停止信号
  204. **************************************/
  205. void ADXL345_Stop()
  206. {
  207.     SDA = 0;                    //拉低数据线
  208.     SCL = 1;                    //拉高时钟线
  209.     Delay5us();                 //延时
  210.     SDA = 1;                    //产生上升沿
  211.     Delay5us();                 //延时
  212. }

  213. /**************************************
  214. 发送应答信号
  215. 入口参数:ack (0:ACK 1:NAK)
  216. **************************************/
  217. void ADXL345_SendACK(bit ack)
  218. {
  219.     SDA = ack;                  //写应答信号
  220.     SCL = 1;                    //拉高时钟线
  221.     Delay5us();                 //延时
  222.     SCL = 0;                    //拉低时钟线
  223.     Delay5us();                 //延时
  224. }

  225. /**************************************
  226. 接收应答信号
  227. **************************************/
  228. bit ADXL345_RecvACK()
  229. {
  230.     SCL = 1;                    //拉高时钟线
  231.     Delay5us();                 //延时
  232.     CY = SDA;                   //读应答信号
  233.     SCL = 0;                    //拉低时钟线
  234.     Delay5us();                 //延时

  235.     return CY;
  236. }

  237. /**************************************
  238. 向IIC总线发送一个字节数据
  239. **************************************/
  240. void ADXL345_SendByte(BYTE dat)
  241. {
  242.     BYTE i;

  243.     for (i=0; i<8; i++)         //8位计数器
  244.     {
  245.         dat <<= 1;              //移出数据的最高位
  246.         SDA = CY;               //送数据口
  247.         SCL = 1;                //拉高时钟线
  248.         Delay5us();             //延时
  249.         SCL = 0;                //拉低时钟线
  250.         Delay5us();             //延时
  251.     }
  252.     ADXL345_RecvACK();
  253. }

  254. /**************************************
  255. 从IIC总线接收一个字节数据
  256. **************************************/
  257. BYTE ADXL345_RecvByte()
  258. {
  259.     BYTE i;
  260.     BYTE dat = 0;

  261.     SDA = 1;                    //使能内部上拉,准备读取数据,
  262.     for (i=0; i<8; i++)         //8位计数器
  263.     {
  264.         dat <<= 1;
  265.         SCL = 1;                //拉高时钟线
  266.         Delay5us();             //延时
  267.         dat |= SDA;             //读数据               
  268.         SCL = 0;                //拉低时钟线
  269.         Delay5us();             //延时
  270.     }
  271.     return dat;
  272. }

  273. //******单字节写入*******************************************

  274. void Single_Write_ADXL345(uchar REG_Address,uchar REG_data)
  275. {
  276.     ADXL345_Start();                  //起始信号
  277.     ADXL345_SendByte(SlaveAddress);   //发送设备地址+写信号
  278.     ADXL345_SendByte(REG_Address);    //内部寄存器地址,请参考中文pdf22页
  279.     ADXL345_SendByte(REG_data);       //内部寄存器数据,请参考中文pdf22页
  280.     ADXL345_Stop();                   //发送停止信号
  281. }

  282. //********单字节读取*****************************************
  283. uchar Single_Read_ADXL345(uchar REG_Address)
  284. {  uchar REG_data;
  285.     ADXL345_Start();                          //起始信号
  286.     ADXL345_SendByte(SlaveAddress);           //发送设备地址+写信号
  287.     ADXL345_SendByte(REG_Address);            //发送存储单元地址,从0开始        
  288.     ADXL345_Start();                          //起始信号
  289.     ADXL345_SendByte(SlaveAddress+1);         //发送设备地址+读信号
  290.     REG_data=ADXL345_RecvByte();              //读出寄存器数据
  291.         ADXL345_SendACK(1);   
  292.         ADXL345_Stop();                           //停止信号
  293.     return REG_data;
  294. }
  295. //*********************************************************
  296. //
  297. //连续读出ADXL345内部加速度数据,地址范围0x32~0x37
  298. //
  299. //*********************************************************
  300. void Multiple_read_ADXL345(void)
  301. {   uchar i;
  302.     ADXL345_Start();                          //起始信号
  303.     ADXL345_SendByte(SlaveAddress);           //发送设备地址+写信号
  304.     ADXL345_SendByte(0x32);                   //发送存储单元地址,从0x32开始        
  305.     ADXL345_Start();                          //起始信号
  306.     ADXL345_SendByte(SlaveAddress+1);         //发送设备地址+读信号
  307.          for (i=0; i<6; i++)                      //连续读取6个地址数据,存储中BUF
  308.     {
  309.         BUF[i] = ADXL345_RecvByte();          //BUF[0]存储0x32地址中的数据
  310.         if (i == 5)
  311.         {
  312.            ADXL345_SendACK(1);                //最后一个数据需要回NOACK
  313.         }
  314.         else
  315.         {
  316.           ADXL345_SendACK(0);                //回应ACK
  317.        }
  318.    }
  319.     ADXL345_Stop();                          //停止信号
  320.     Delay5ms();
  321. }


  322. //*****************************************************************

  323. //初始化ADXL345,根据需要请参考pdf进行修改************************
  324. void Init_ADXL345()
  325. {
  326.    Single_Write_ADXL345(0x31,0x0B);   //测量范围,正负16g,13位模式
  327.    Single_Write_ADXL345(0x2C,0x08);   //速率设定为12.5 参考pdf13页
  328.    Single_Write_ADXL345(0x2D,0x08);   //选择电源模式   参考pdf24页
  329.    Single_Write_ADXL345(0x2E,0x80);   //使能 DATA_READY 中断
  330.   // Single_Write_ADXL345(0x1E,0x00);   //X 偏移量 根据测试传感器的状态写入pdf29页
  331.   // Single_Write_ADXL345(0x1F,0x00);   //Y 偏移量 根据测试传感器的状态写入pdf29页
  332.    Single_Write_ADXL345(0x20,0x05);   //Z 偏移量 根据测试传感器的状态写入pdf29页
  333. }
  334. //***********************************************************************
  335. //显示x轴
  336. void display_x()
  337. {   float temp;
  338.     dis_data=(BUF[1]<<8)+BUF[0];  //合成数据   
  339.         if(dis_data<0){
  340.         dis_data=-dis_data;
  341.     DisplayOneChar(10,0,'-');      //显示正负符号位
  342.         }
  343.         else DisplayOneChar(10,0,' '); //显示空格

  344.     temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  345.     conversion(temp);          //转换出显示需要的数据
  346.                 DisplayOneChar(8,0,'X');
  347.     DisplayOneChar(9,0,':');
  348.     DisplayOneChar(11,0,qian);
  349.                 DisplayOneChar(12,0,'.');
  350.     DisplayOneChar(13,0,bai);
  351.     DisplayOneChar(14,0,shi);
  352.                 DisplayOneChar(15,0,' ');
  353. }

  354. //***********************************************************************
  355. //显示y轴
  356. void display_y()
  357. {     float temp;
  358.     dis_data=(BUF[3]<<8)+BUF[2];  //合成数据   
  359.         
  360.         
  361.         if(dis_data<0)
  362.                 {
  363.           dis_data=-dis_data;
  364.     DisplayOneChar(2,1,'-');      //显示正负符号位
  365.                 MOTOR_Z = 0;
  366.     MOTOR_F = 0;       //为负值,电机反转
  367.           }
  368.         
  369.         
  370.         else if(dis_data>0)
  371.         {
  372.                 DisplayOneChar(2,1,' '); //显示空格

  373.     temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  374.     conversion(temp);          //转换出显示需要的数据
  375.                 DisplayOneChar(0,1,'Y');   //第1行,第0列 显示y
  376.     DisplayOneChar(1,1,':');
  377.     DisplayOneChar(3,1,qian);
  378.                 DisplayOneChar(4,1,'.');
  379.     DisplayOneChar(5,1,bai);
  380.     DisplayOneChar(6,1,shi);  
  381.                 DisplayOneChar(7,1,' ');  
  382.                
  383.         }
  384. }





  385. //***********************************************************************
  386. //显示z轴
  387. void display_z()
  388. {
  389.     float temp;
  390.     dis_data=(BUF[5]<<8)+BUF[4];    //合成数据   
  391.         


  392. if(genxin==0)  
  393.                 {
  394.                          genxin=1;
  395.                if(dis_data<0)  //当为负数的时候进行校准
  396.                         {
  397.                      bianliang=~dis_data;
  398.                                                                                  xiaozheng=0;
  399.                   }
  400.         
  401.                  
  402.                      if(dis_data>0)  //当为正数的时候进行校准
  403.                         {
  404.                      bianliang=dis_data;
  405.                                                                                  xiaozheng=1;
  406.                   }
  407.                                                                 write_eeprom();       //保存数据               
  408.      }        
  409.                  

  410. if(genxin==1)
  411.         {               
  412.          
  413. //====================================================================================         
  414. if(xiaozheng==0)  //负数校准后函数
  415.   {        
  416.         
  417.                 dis_data=dis_data+bianliang;
  418.                 if(dis_data<0)
  419.                 {
  420.                 flat=0;
  421.           dis_data=-dis_data;
  422.     DisplayOneChar(3,1,'-');       //显示负符号位
  423.     }
  424.         
  425.          
  426.           else DisplayOneChar(3,1,' ');  //显示空格

  427.                  
  428.     temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  429.     conversion(temp);          //转换出显示需要的数据
  430.                
  431.                 jiance();
  432.                  
  433.                 DisplayOneChar(1,1,'Z');  //第0行,第10列 显示Z
  434.     DisplayOneChar(2,1,':');
  435.     DisplayOneChar(4,1,qian);
  436.                 DisplayOneChar(5,1,'.');
  437.     DisplayOneChar(6,1,bai);
  438.     DisplayOneChar(7,1,shi);
  439.                 DisplayOneChar(8,1,' ');  
  440.                
  441.                 DisplayOneChar(11,1,'0');
  442.                 DisplayOneChar(12,1,'.');
  443.                 DisplayOneChar(13,1,'0');
  444.                 DisplayOneChar(14,1,fazhi+'0');  
  445.                
  446.                 flat=1;
  447.         }        
  448.         
  449. //============================================================================================        
  450. if(xiaozheng==1)  //正数校准后函数
  451.   {        
  452.          
  453.                 dis_data=dis_data-bianliang;
  454.                
  455.                 if(dis_data<0)
  456.                 {
  457.                 flat=0;
  458.           dis_data=-dis_data;
  459.     DisplayOneChar(3,1,'-');       //显示负符号位
  460.     }
  461.         
  462.          
  463.           else DisplayOneChar(3,1,' ');  //显示空格

  464.                  
  465.     temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  466.     conversion(temp);          //转换出显示需要的数据
  467.                
  468.                 jiance();
  469.                  
  470.                 DisplayOneChar(1,1,'Z');  //第0行,第10列 显示Z
  471.     DisplayOneChar(2,1,':');
  472.     DisplayOneChar(4,1,qian);
  473.                 DisplayOneChar(5,1,'.');
  474.     DisplayOneChar(6,1,bai);
  475.     DisplayOneChar(7,1,shi);
  476.                 DisplayOneChar(8,1,' ');  
  477.                
  478.                
  479.                 DisplayOneChar(11,1,'0');
  480.                 DisplayOneChar(12,1,'.');
  481.                 DisplayOneChar(13,1,'0');
  482.                 DisplayOneChar(14,1,fazhi+'0');  
  483.                
  484.                 flat=1;
  485.         }        
  486. }        
  487. }


  488. jiance()
  489. {

  490.                
  491.         if(flat==1)
  492.                  {
  493.             
  494.                         
  495.                          if(san==0 && er==0 &&  yi>=0  && yi<=fazhi )
  496.                            {
  497.          MOTOR_Z = 1;
  498.          MOTOR_F = 1;
  499.          }
  500.                                  
  501.                                 else
  502.                          {
  503.                                  MOTOR_Z = 0;
  504.          MOTOR_F = 1;       //为正值,点击正转
  505.              }
  506.                         
  507.                  }
  508.                  
  509. if(flat==0)
  510.                  {
  511.             
  512.                         
  513.                          if(san==0 && er==0 && yi>=0  && yi<=fazhi)
  514.                            {
  515.          MOTOR_Z = 1;
  516.          MOTOR_F = 1;
  517.          }
  518.                                  
  519.                                  else
  520.                          {
  521.                                  MOTOR_Z = 1;
  522.          MOTOR_F = 0;       //为正值,点击正转
  523.              }
  524.                         
  525.                  }
  526.                
  527.                  
  528.                  
  529.         
  530.          
  531. }







  532. qingping()
  533. {
  534.         DisplayOneChar(3,0,' ');
  535.                     DisplayOneChar(4,0,' ');
  536.                     DisplayOneChar(5,0,' ');
  537.         DisplayOneChar(6,0,' ');
  538.                     DisplayOneChar(7,0,' ');
  539.                     DisplayOneChar(8,0,' ');
  540.                     DisplayOneChar(9,0,' ');
  541.                     DisplayOneChar(10,0,' ');
  542.                     DisplayOneChar(11,0,' ');  
  543.                   
  544.         DisplayOneChar(3,1,' ');
  545.                     DisplayOneChar(4,1,' ');
  546.                     DisplayOneChar(5,1,' ');
  547.         DisplayOneChar(6,1,' ');
  548.                     DisplayOneChar(7,1,' ');
  549.                     DisplayOneChar(8,1,' ');
  550.                     DisplayOneChar(9,1,' ');
  551.                     DisplayOneChar(10,1,' ');
  552.                     DisplayOneChar(11,1,' ');  
  553. }

  554. zidong()
  555. {

  556.         DisplayOneChar(1,0,'B');
  557.                     DisplayOneChar(2,0,'a');
  558.                     DisplayOneChar(3,0,'l');
  559.                     DisplayOneChar(4,0,'a');
  560.                     DisplayOneChar(5,0,'n');
  561.                     DisplayOneChar(6,0,'c');
  562.         DisplayOneChar(7,0,'e');

  563.         DisplayOneChar(12,0,'D');
  564.         DisplayOneChar(13,0,'u');            
  565.                   
  566.   //balance
  567. }


  568. shoudong()
  569. {
  570.         DisplayOneChar(3,0,'S');
  571.                     DisplayOneChar(4,0,'h');
  572.                     DisplayOneChar(5,0,'o');
  573.                     DisplayOneChar(6,0,'u');
  574.         
  575.               DisplayOneChar(8,0,'D');
  576.                     DisplayOneChar(9,0,'o');
  577.                     DisplayOneChar(10,0,'n');
  578.                     DisplayOneChar(11,0,'g');  

  579. }















  580. void Outside_Init()
  581. {
  582.         EX0 = 1;  
  583.         IT0 = 1;  
  584.         EA = 1;         
  585. }


  586. void Outside_Int1(void) interrupt 0        using 1
  587. {
  588.           genxin=0;
  589.         //        P2=0x00;
  590.         
  591. }

  592. /*************???0?????***************/
  593. void time_init()         
  594. {
  595.         EA   = 1;                   //????
  596.         TMOD = 0X01;          //???0????1????1
  597.         ET0  = 1;                  //????0??
  598.         TR0  = 1;                  //?????0??
  599. }

  600. //*********************************************************
  601. //******主程序********
  602. //*********************************************************
  603. void main()
  604. {  
  605.         
  606.         uchar devid;
  607.         delay(500);                                   //上电延时        
  608.         
  609.   Init_ADXL345();                         //初始化ADXL345        
  610.         time_init();                                //??????

  611.   init_eeprom();                              //读eeprom数据
  612.         InitLcd();                      //液晶初始化ADXL345

  613.         
  614.         while(1)                                 //循环
  615.         {
  616.                
  617.                  if(!K4)
  618.                    {  
  619.                           delay(20);
  620.                             if(!K4)
  621.                          {   
  622.                                                          while(!K4)
  623.                                            ;
  624.                                                           kaiji++;
  625.                                                                 if(kaiji>=2) { kaiji=0; }
  626.                                                                 write_eeprom();       //保存数据        
  627.                 REfsh=1;
  628.                 REfsh2=1;                                                               
  629.              }
  630.                    }
  631.                
  632.                
  633.         //======================手动=====================================================
  634.                 if(kaiji==0)
  635.                 {   
  636.                           if(REfsh2==1)
  637.                       {  
  638.                              InitLcd();
  639.            shoudong();
  640.                              REfsh2=0;
  641.           }

  642.          if(K1==0)  {   MOTOR_Z = 0;  }
  643.          if(K1==1)  {   MOTOR_Z = 1;  }         

  644.          if(K2==0)  {   MOTOR_F = 0;  }
  645.          if(K2==1)  {   MOTOR_F = 1;  }                                          

  646.     }
  647.                
  648.         //===============自动=============================================================        
  649.                 if(kaiji==1)
  650.                 {
  651.            if(REfsh==1)
  652.                    {  
  653.                           InitLcd();
  654.         zidong();
  655.                           REfsh=0;
  656.       }
  657.         //===============================
  658.                         
  659.                         if(!K3)
  660.                    {  
  661.                           delay(20);
  662.                             if(!K3)
  663.                          {   
  664.                                                          while(!K3)
  665.                                            ;
  666.                                                           genxin=0;        
  667.              }
  668.                     }
  669.                         
  670.                         
  671.                    if(!K1)
  672.                    {  
  673.                           delay(20);
  674.                             if(!K1)
  675.                          {   
  676.                                                          while(!K1)
  677.                                            ;
  678.                                                           fazhi++;
  679.                                                                 if(fazhi>=9) { fazhi=9; }
  680.                                                                 write_eeprom();       //保存数据               
  681.              }
  682.                    }
  683.                         
  684.                           if(!K2)
  685.                    {  
  686.                             delay(20);
  687.                              if(!K2)
  688.                          {   
  689.                                                          while(!K2)
  690.                                            ;
  691.                                                           fazhi--;
  692.                                                                 if(fazhi<=1) { fazhi=1; }
  693.                                                                 write_eeprom();       //保存数据               
  694.              }
  695.                    }
  696.                         
  697. //==========================================
  698.                         
  699.                         if( flag_300ms == 1)
  700.                           {
  701.                                  flag_300ms=0;
  702.                            Multiple_Read_ADXL345();               //连续读出数据,存储在BUF中
  703.          display_z();                           //---------显示Z轴        

  704.         }
  705.                         }
  706.         }
  707. }


  708. /*************???0??????***************/
  709. void time0_int() interrupt 1
  710. {        
  711.         static uchar value;
  712.         TH0 = 0x3c;
  713.         TL0 = 0xb0;     // 50ms
  714.         value ++;         
  715.         if(value % 9 == 0)
  716.         {
  717.                 flag_300ms = 1;           //450ms
  718.                 value = 0;
  719.         }
  720. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
ssfc + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:154881 发表于 2016-12-15 00:20 | 只看该作者
有仿真图吗   想做这个   遇到了难题
回复

使用道具 举报

板凳
ID:188031 发表于 2017-7-24 15:26 | 只看该作者
qingjiao.c(16): warning C318: can't open file 'eeprom52.h'
qingjiao.c(91): warning C206: 'SectorErase': missing function-prototype
qingjiao.c(91): error C267: 'SectorErase': requires ANSI-style prototype
错误啊,少eeprom的头文件啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表