找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5460|回复: 5
收起左侧

基于stc15单片机+fdc2214手势识别系统,ti杯源程序

[复制链接]
ID:413838 发表于 2018-10-23 09:30 | 显示全部楼层 |阅读模式
本代码是TI杯省赛手势识别代码,如果需要原理图的话,我回去整理,画出来,再分享,显示用的是串口屏
0.png

单片机源程序如下:
  1. #include "FDCIIC.h"
  2. #include "FDCdelay.h"
  3. //uint8 dis[6];                                        //显示数字(-511至512)的字符数组
  4. //int        dis_data;                                        //变量
  5. //********************************************************************************
  6. //整数转字符串
  7. //********************************************************************************
  8. //void lcd_printf(uint8 *s,int temp_data)
  9. //{
  10. //        if(temp_data<0)
  11. //        {
  12. //                temp_data=-temp_data;
  13. //                *s='-';
  14. //        }
  15. //        else *s=' ';

  16. //        *++s =temp_data/10000+0x30;
  17. //        temp_data=temp_data%10000;     //取余运算

  18. //        *++s =temp_data/1000+0x30;
  19. //        temp_data=temp_data%1000;     //取余运算

  20. //        *++s =temp_data/100+0x30;
  21. //        temp_data=temp_data%100;     //取余运算
  22. //        *++s =temp_data/10+0x30;
  23. //        temp_data=temp_data%10;      //取余运算
  24. //        *++s =temp_data+0x30;        
  25. //}






  26. //*************************************************************************************************
  27. //I2C起始信号
  28. //*************************************************************************************************
  29. void I2C_Start()
  30. {
  31.     SDA = 1;                    //拉高数据线
  32.     SCL = 1;                    //拉高时钟线
  33.     Delay5us();                 //延时
  34.     SDA = 0;                    //产生下降沿
  35.     Delay5us();                 //延时
  36.     SCL = 0;                    //拉低时钟线
  37. }
  38. //*************************************************************************************************
  39. //I2C停止信号
  40. //*************************************************************************************************
  41. void I2C_Stop()
  42. {
  43.     SDA = 0;                    //拉低数据线
  44.                 SCL = 0;
  45.                 Delay5us();
  46.     SCL = 1;                    //拉高时钟线
  47.     Delay5us();                 //延时
  48.     SDA = 1;                    //产生上升沿
  49.     //Delay5us();                 //延时
  50. }
  51. //**************************************************************************************************
  52. //I2C发送应答信号
  53. //入口参数:ack (0:ACK 1:NAK)
  54. //**************************************************************************************************
  55. void I2C_SendACK(bit ack)
  56. {
  57.     SDA = ack;                  //写应答信号
  58.     SCL = 1;                    //拉高时钟线
  59.     Delay5us();                 //延时
  60.     SCL = 0;                    //拉低时钟线
  61.     Delay5us();                 //延时
  62. }
  63. //****************************************************************************************************
  64. //I2C接收应答信号
  65. //****************************************************************************************************
  66. bit I2C_RecvACK()
  67. {
  68.     SCL = 1;                    //拉高时钟线
  69.     Delay5us();                 //延时
  70.     CY = SDA;                   //读应答信号
  71.     SCL = 0;                    //拉低时钟线
  72.     Delay5us();                 //延时
  73.     return CY;
  74. }
  75. //*****************************************************************************************************
  76. //向I2C总线发送一个字节数据
  77. //*****************************************************************************************************
  78. void I2C_SendByte(uint8 dat)
  79. {
  80.     uint8 i;
  81.     for (i=0; i<8; i++)         //8位计数器
  82.     {
  83.         dat <<= 1;              //移出数据的最高位
  84.         SDA = CY;               //送数据口
  85.         SCL = 1;                //拉高时钟线
  86.         Delay5us();             //延时
  87.         SCL = 0;                //拉低时钟线
  88.         Delay5us();             //延时
  89.     }
  90.     I2C_RecvACK();
  91. }
  92. //*****************************************************************************************************
  93. //从I2C总线接收一个字节数据
  94. //******************************************************************************************************
  95. uint8 I2C_RecvByte()
  96. {
  97.     uint8 i;
  98.     uint8 dat = 0;
  99.     SDA = 1;                    //使能内部上拉,准备读取数据,
  100.     for (i=0; i<8; i++)         //8位计数器
  101.     {
  102.         dat <<= 1;
  103.         SCL = 1;                //拉高时钟线
  104.         Delay5us();             //延时
  105.         dat |= SDA;             //读数据               
  106.         SCL = 0;                //拉低时钟线
  107.         Delay5us();             //延时
  108.     }
  109.     return dat;
  110. }


  111. /*******************************************************************************
  112. * 函数名        : WriteRegfdc2214
  113. * 描述            : 写寄存器数据
  114. * 输入参数  : add,value
  115. * 返回参数  : 无
  116. *******************************************************************************/
  117. void WriteRegfdc2214(unsigned char add,unsigned int value)
  118. {
  119.     I2C_Start();
  120.     I2C_SendByte(0X54);         //ADDR=0时,地址0X2A<<1+0=0X54  
  121.     I2C_SendByte(add);      //写地址
  122.     I2C_SendByte(value>>8); //
  123.     I2C_SendByte(value&0xff);//写低8位
  124.     I2C_Stop();               //产生一个停止条件
  125.     delay_ms();         
  126. }
  127. /*******************************************************************************
  128. * 函数名        : ReadRegLDC
  129. * 描述            : 读寄存器数据
  130. * 输入参数  : add地址
  131. * 返回参数  : 无
  132. *******************************************************************************/
  133. unsigned int ReadRegfdc2214(unsigned char add)
  134. {
  135.     unsigned   int status;
  136.     unsigned    int a,b;
  137.     I2C_Start();
  138.     I2C_SendByte(0X54);           //写命令ADDR=0
  139.     I2C_SendByte(add);     //
  140.     I2C_Start();            //重新开始
  141.     I2C_SendByte(0X55);           //发送读命令ADDR=0
  142.    
  143.     a=I2C_RecvByte();     //读高位
  144.         I2C_SendACK(0);
  145.     b=I2C_RecvByte();                 //读低位
  146.         I2C_SendACK(1);
  147.     status=a*256+b;
  148.     I2C_Stop();
  149.     return (status);
  150. }
  151. /*******************************************************************************
  152. * 函数名        : InitSingleLDC1314
  153. * 描述            : 初始化单通道
  154. * 输入参数  : 无
  155. * 返回参数  : 无
  156. *******************************************************************************/
  157. void InitSinglefdc2214(void)
  158. {
  159.     WriteRegfdc2214(0x08,0x0fa0);//设置转换时间  设置达到最高精度

  160.     WriteRegfdc2214(0x10,0x000f);//FDC2214_SETTLECOUNT_CH0 稳定技计数计数
  161.    
  162.     WriteRegfdc2214(0x14,0x08); //参考分频系数
  163.     //    LDC_Write_Reg(0x0C,0x0F00); //调零
  164.     WriteRegfdc2214(0x19,0x0000); //ERROE_CONFIG
  165.        
  166.     WriteRegfdc2214(0x1B,0x020D); //通道配置
  167.     WriteRegfdc2214(0x1E,0xF800); //配置驱动电流
  168.     WriteRegfdc2214(0x1A,0x1C81); //参数配置
  169.           //以下自己//
  170.           WriteRegfdc2214(0x18,0x02); //使用外部时钟
  171. }
  172. /*******************************************************************************
  173. * 函数名        : InitMultiLDC1314
  174. * 描述            : 初始化多通道
  175. * 输入参数  : 无
  176. * 返回参数  : 无
  177. *******************************************************************************/
  178. void InitMultifdc2214(void)//双通道
  179. {
  180.     WriteRegfdc2214(0x08,0x0fa0);//转换时间           \\稳定参考计数值、||原值为0x04D6
  181.           WriteRegfdc2214(0x09,0x0fa0);
  182.           WriteRegfdc2214(0x0A,0x0fa0);//转换时间
  183.           WriteRegfdc2214(0x0B,0x0fa0);
  184.        
  185.                 WriteRegfdc2214(0x0C,0x0F00); //调0值         CH0
  186.                 WriteRegfdc2214(0x0D,0x0F00); //调0值   CH1
  187.                 WriteRegfdc2214(0x0E,0x0F00); //调0值   CH2
  188.                 WriteRegfdc2214(0x0F,0x0F00); //调0值   CH3
  189.                        
  190.                 WriteRegfdc2214(0x10,0x000A);//作用时间 CH1
  191.           WriteRegfdc2214(0x11,0x000A);//CH2
  192.                 WriteRegfdc2214(0x12,0x000A);//CH3
  193.                 WriteRegfdc2214(0x13,0x000A);//CH4
  194.          
  195.                 WriteRegfdc2214(0x14,0x08);//分频                      \\修改分频系数可改变数值大小     原值为0x2002
  196.           WriteRegfdc2214(0x15,0x08);
  197.     WriteRegfdc2214(0x16,0x08);//分频
  198.           WriteRegfdc2214(0x17,0x08);
  199.        
  200.           WriteRegfdc2214(0x19,0x0000);
  201.           WriteRegfdc2214(0x1B,0xC20D);//配置多通道   2通道--0x820D
  202.        
  203.           WriteRegfdc2214(0x1E,0x9000); //驱动电流 CH0
  204.           WriteRegfdc2214(0x1F,0x9000); //CH1
  205.                 WriteRegfdc2214(0x20,0x9000); //CH2
  206.           WriteRegfdc2214(0x21,0x9000); //CH3
  207.                   

  208.         WriteRegfdc2214(0x1A,0x1C81);//配置寄存器
  209.        
  210.        
  211. }
  212. /*********************************END FILE*************************************/
复制代码

所有资料51hei提供下载:
新建文件夹.zip (379.37 KB, 下载次数: 130)

评分

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

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-10-23 15:04 | 显示全部楼层
好东东 希望能分享原理图
回复

使用道具 举报

ID:464433 发表于 2019-1-8 11:05 | 显示全部楼层
楼主可以分享一下电路图吗?谢谢
回复

使用道具 举报

ID:597773 发表于 2019-8-8 15:33 | 显示全部楼层
楼主楼主求主函数
回复

使用道具 举报

ID:611455 发表于 2019-9-14 16:55 | 显示全部楼层
你好,我现在正在学习手势识别中fdc2214的用法,感觉里面单通道和多通道的初始化代码不太明白,能详细的解释一下吗?
回复

使用道具 举报

ID:511461 发表于 2019-10-12 19:04 | 显示全部楼层
楼主,求原理图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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