找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5883|回复: 7
收起左侧

基于SCA100T制作的两轴数字倾角仪 含单片机程序与图纸

[复制链接]
ID:74513 发表于 2017-8-5 17:33 | 显示全部楼层 |阅读模式
公司项目需求,手臂抓取产品时为保证手臂夹抓处于水平位置,所以做了一款数字倾角仪。

该程序目前只完成通过单片机io模拟SPI通讯读取SCA100T的数据,并将数据简单的数字滤波一下显示在1602上面;其中四颗按钮的功能以及串口通讯部分还未完善。

已作出实际PCBA,显示结果一切正常;源码分享出来给有需要的朋友。
单片机型号:STC12C5A60S2
双轴倾角感应芯片(感应范围双轴±30°):SCA100T-D01
附件:源码+SCA100T-D01的datasheet

图纸:

原理图

原理图


0.png

单片机源程序如下:
  1. #include <STC12C5A60S2.h>
  2. #include <math.h>
  3. //#include <string.h>

  4. #define unint unsigned int
  5. #define unchar unsigned char

  6. #define N 30  //求平均的次数
  7. #define PI 3.141593       
  8. #define R 0x7e         //1602 右箭头
  9. #define L 0x7f         //1602        左箭头                               
  10. #define K 0xa0         //1602 空格



  11. //========SCA100T控制指令===
  12. #define MEAS 0x00//测量模式
  13. #define RWTR 0x08//读写温度数据寄存器
  14. #define RDSR 0x0a
  15. #define RLOAD 0x0b
  16. #define STX        0x0e//X通道自检
  17. #define STY 0x0f//Y通道自检
  18. #define RDAX 0x10 //读X通道加速度值
  19. #define RDAY 0x11 //读Y通道加速度值

  20. sbit Twinkle=P3^5;
  21. sbit sw1=P0^7;
  22. sbit sw2=P0^6;
  23. sbit sw3=P0^5;
  24. sbit sw4=P0^4;
  25. //========SCA100T  IO===========
  26. sbit SCK=P1^0;
  27. sbit MISO=P1^1;
  28. sbit MOSI=P1^2;
  29. sbit CSB=P1^5; //片选
  30. //=========子函数申明=========
  31. int count_x();
  32. int count_y();
  33.        
  34. //=========1602  IO=============数据端口在P0
  35. sbit RS=P4^0;// =1数据,=0命令
  36. sbit RW=P3^7;// =1读,=0写
  37. sbit EN=P3^6;//使能
  38. sbit BUSY=P2^7;//忙状态线

  39. void init()
  40. {
  41. /*RI读取完成时请求中断的标志,需软件清零
  42.   TI发送完成时请求中断的标志,需软件清零                  */
  43.         AUXR=0x40;//用定时器1做波特率发生器
  44.         SCON=0x50;//8bit工作模式,串口工作方式1_SM0=0/SM1=1,允许串口接收数据REN=1
  45.         TH1=TL1=-(11059200/12/32/9600);
  46.         TR1=1;
  47.         ES=1;  //串口中断允许
  48.         EA=1;  //总中断允许
  49.         IPH=IPH|0x10; //串口1的中断优先级最高
  50.         PS=1;//串口1的中断优先级最高
  51. }       

  52. /*void UART_T(unchar UART_data)        //发送数据到串口
  53. {          
  54.         SBUF=UART_data;        
  55.         while(!TI);
  56.         TI=0;//发送中断标志位清零
  57. }
  58. void UART_TC(unchar *str)        //发送字符到串口,用到string.h头文件
  59. {
  60.         while(*str!='\0')
  61.         {
  62.                 UART_T(*str);
  63.                 *str=*str++;
  64.         }
  65.         *str=0;
  66. }                                                          */
  67.        
  68. void delay(unint z)        //延时函数
  69. {
  70.         unint i,j;
  71.         for(i=z;i>0;i--)
  72.                 for(j=110;j>0;j--);
  73. }                                                                                       
  74. void delay_spi(unint z)
  75. {
  76.         z*=12;
  77.         while(z--);
  78. }
  79. //==================SPI  SCA100T驱动========
  80. void spi_stop()
  81. {
  82.         SCK=0;
  83.         CSB=1;//关闭片选
  84.         delay_spi(10);
  85. }
  86. void spi_reset()
  87. {
  88.         spi_stop();
  89. }
  90. void spi_start()
  91. {
  92.         SCK=0;
  93.         CSB=0;//开片选,L有效
  94.         delay_spi(10);
  95. }
  96. void write_spi(unchar wdata)//写入一个字节 8 bit ,写指令用
  97. {
  98.         unchar i;

  99.         for(i=0;i<8;i++)
  100.         {
  101.                 SCK=0;
  102.                 delay_spi(10);
  103.                 if(wdata & 0x80)//按位于,取最高位
  104.                 {
  105.                         MOSI=1;
  106.                 }
  107.                 else
  108.                 {
  109.                         MOSI=0;
  110.                 }
  111.                 SCK=1;//上升沿SCA100T开始读自己的MOSI引脚
  112.                 wdata=wdata<<1;
  113.                 delay_spi(10);
  114.         }
  115.         SCK=0; //归还时钟总线
  116. }

  117. unint read_spi(unchar n)//读入n个数据
  118. {
  119.         unint temp=0;
  120.         unchar i;
  121.         MISO=1;//置高,准备接收数据
  122.         for(i=0;i<n;i++)
  123.         {
  124.                 temp=temp<<1;
  125.                 SCK=1;
  126.                 delay_spi(10);
  127.                 if(MISO==1)
  128.                 {
  129.                         temp=temp|0x01;
  130.                 }
  131.                 else
  132.                 {
  133.                         temp=temp&0x0ffe;
  134.                 }                                                               
  135.                 SCK=0; //下降沿时,倾角仪输出
  136.                 delay_spi(10);
  137.         }
  138.         return temp;
  139. }
  140. void init_spi()
  141. {
  142.         spi_reset();
  143.         delay_spi(1000);

  144.         spi_start();
  145.         write_spi(MEAS);
  146.         spi_stop();
  147.         delay_spi(1000);
  148. }

  149. unint read_x() //读X轴加速度
  150. {
  151.         unint x_data;
  152.         spi_start();
  153.         write_spi(RDAX);
  154.         x_data=read_spi(11);
  155.         spi_stop();

  156.         return x_data;
  157. }
  158. unint read_y() //读Y轴加速度
  159. {
  160.         unint y_data;
  161.         spi_start();
  162.         write_spi(RDAY);
  163.         y_data=read_spi(11);
  164.         spi_stop();

  165.         return y_data;
  166. }
  167. //==============显示1602驱动================
  168. void wait_1602()//检测忙状态

  169. ……………………

  170. …………限于本文篇幅 余下代码请从51黑下载附件…………

  171. ……………………

  172. void main()
  173. {
  174.     init_spi();
  175.     init_1602();
  176.     while(1)
  177.     {        
  178.         show(count_x(),count_y());
  179. //        delay(2000);
  180. //        Twinkle=~Twinkle;
  181.     }
  182. }
复制代码

所有资料51hei提供下载:
程序源码 ICdatasheet.zip (2.49 MB, 下载次数: 114)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:187532 发表于 2018-3-28 11:42 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:128321 发表于 2018-3-29 09:32 | 显示全部楼层
谢谢分享,正需要,可惜下载不了
回复

使用道具 举报

ID:187532 发表于 2018-4-2 19:33 | 显示全部楼层
老兄 sbit BUSY=P2^7是1602哪根线啊
回复

使用道具 举报

ID:170098 发表于 2019-9-16 09:43 | 显示全部楼层
不知道这个数字倾角仪器的精度是多少?
回复

使用道具 举报

ID:372588 发表于 2019-11-7 15:17 | 显示全部楼层
感谢,下载来看看,论坛能有这种分享真是太好了
回复

使用道具 举报

ID:709057 发表于 2020-3-15 20:48 | 显示全部楼层
想要这个分享
回复

使用道具 举报

ID:86069 发表于 2020-3-20 13:38 | 显示全部楼层
精度如何
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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