OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7583|回复: 3

我的AVR资料[程序篇]角度传感器T103驱动源码(源码27)

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-1-9 11:16:30 | 显示全部楼层 |阅读模式

很贵的一个传感器,源码如下: 
#include <mega16.h>
#include <delay.h>
#include <math.h> 

#define DOT PORTA.7
//T103接口定义
#define SCK PORTB.0
#define MISO PINB.2
#define MOSI PORTB.3
#define CS PORTB.5 
//命令
#define SET   0X00//测量模式设定
#define READT 0X08//读取温度数值
#define STX   0X0E//自测试X
#define STY   0X0F//自测试Y
#define READX 0X10//读取X方向数值 
/*--------------开始SPI数据传输---------------*/
void Start() //SPI开始
{
 SCK=0;
 CS=1;//CS下降沿开始SPI
 MOSI=0;
 CS=0;
}  
/*--------------写一个字节到T103----------------
  参数:要写的命令
返回值:无
------------------------------------------------*/
void Write_T103_Byte(unsigned char num) //SPI写数据
{
 unsigned char count=0;
 Start();
 for(count=0;count<8;count++)
 {
  MOSI=num&0x80;//写入命令
  num<<=1;
  SCK=0;        //上升沿有效
  SCK=1;
 }
}
/*-------------从T103读出一个数据---------------
  参数:无
返回值:T103的数据 0~2047
------------------------------------------------*/
uint Read_T103_Data() //SPI 读数据
{
 uchar count=0;
 uint Num=0;
 for(count=0;count<11;count++)
 {
  Num<<=1;
  SCK=1;    //下降沿有效
  SCK=0;
  Num+=MISO;//读取数值
 }
 return(Num);
}
/*-------------T103初始化程序------------*/
void T103_Init(void)
{
    Write_T103_Byte(0x00);//初始化
    CS=1;
}
/*--------------------读T103--------------------
  参数:0x08:读温度,0x10:读角度
返回值:角度(rad)或者温度(C)
------------------------------------------------*/  
float Read_T103(uchar order)
{
    uint data;
    delay_us(150);         //等待延时
    Write_T103_Byte(order);//写命令
    data=Read_T103_Data(); //读取数据
    CS=1;
    if(order==0x08) //温度
    {
        data>>=3;
        return (197-(float)data)*1000/1083;//返回温度值(C)
    }
    else            //角度
    {
        return asin(((float)data-1024)/1638);//返回角度值(rad)
    }
}
void display(unsigned char number,unsigned char position)//digtial show function
{  
    DDRA=0Xff;//set PORTA output
 ORTA=0XFF;//set PORTA output in high level
    switch(position)//choice the position
 {
  case 1:{PORTA&=0xf8;break;}
  case 2:{PORTA&=0xf9;break;}
  case 3:{PORTA&=0Xfa;break;}
  case 4:{PORTA&=0Xfb;break;}
  case 5:{PORTA&=0Xfc;break;}
  case 6:{PORTA&=0Xfd;break;}
  case 7:{PORTA&=0Xfe;break;}
  case 8:{PORTA&=0Xff;break;}
  } 
    switch(number)//show number
 {
  case 0:{PORTA&=0x87;break;}    //0
  case 1:{PORTA&=0x8f;break;}    //1
  case 2:{PORTA&=0x97;break;}    //2
  case 3:{PORTA&=0x9f;break;}    //3
  case 4:{PORTA&=0xa7;break;}    //4
     case 5:{PORTA&=0xaf;break;}    //5
  case 6:{PORTA&=0xb7;break;}    //6
  case 7:{PORTA&=0xbf;break;}    //7
  case 8:{PORTA&=0xc7;break;}    //8
     case 9:{PORTA&=0xcf;break;}    //9
  default:{PORTA=0xff;break;}    //null
 }       
}     

void main()
{
    uchar t;
    uint Msb=0;
    float temp=0;
    DDRA=0XFF;
    DDRB=0XFB;
    PORTB=0X00;
    T103_Init();//初始化T103
    while(1)
    {
        if(t==20)
        {
            temp=Read_T103(0x10);
            temp=temp*180/3.14159;//把弧度转换为角度
            if(temp<0)temp=-temp;
            Msb=temp*1000;
            t=0;                
        } 
        else delay_ms(1);
        display(Msb%10,8);delay_ms(2);
        display((Msb/10)%10,7);delay_ms(2);
        display((Msb/100)%10,6);delay_ms(2);
        display((Msb/1000)%10,5);DOT=0;delay_ms(2);
        DOT=1;
        display((Msb/10000)%10,4);delay_ms(1);
        t++;
    }   
}

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2011-7-21 15:12:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

38

主题

292

帖子

1

精华

高级会员

Rank: 4

积分
614
金钱
614
注册时间
2012-7-6
在线时间
0 小时
发表于 2012-8-1 13:58:03 | 显示全部楼层
好的东西!就应该顶起来!
STM32F3系列公司现有货供应!STM32F0,STM32F2,STM32F3,STM32F4 银洋电子专业一级代理http://www.y-ec.com 联系电话:021-53086303  淘宝网:http://y-ec.taobao.com
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-6-29
在线时间
9 小时
发表于 2018-3-1 14:00:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 01:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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