?? smd380.c
字號:
#include <REG51F.H>
#include <intrins.h>
#include <math.h>
typedef unsigned char Byte;
typedef bit bool;
typedef signed int sint;
typedef unsigned int Word;
typedef unsigned int uint;
typedef signed long slong;
#define uchar unsigned char
#define uint unsigned int
#define Nop_() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//SMD380
sbit CSB_380 = P2^5;
sbit SCK_380 = P0^4;
sbit SDO_380 = P3^0;
sbit SDI_380 = P3^1;
typedef union
{ unsigned int i;
float f;
} value;
//----------------------------------------------------------------------------------
// modul-var
//----------------------------------------------------------------------------------
enum {TEMP,HUMI};
value humi_val,temp_val;
value humi_val_buf,temp_val_buf;
const float code pi=3.1415926;
float dew_point;
#define noACK 0
#define ACK 1
//adr command r/w
#define STATUS_REG_W 0x06 //000 0011 0
#define STATUS_REG_R 0x07 //000 0011 1
#define MEASURE_TEMP 0x03 //000 0001 1
#define MEASURE_HUMI 0x05 //000 0010 1
#define RESET 0x1e //000 1111 0
idata float angle;
idata unsigned int heading,heading_buff;
idata unsigned int OffsetAngle;
idata unsigned int OffsetAngleBuf;
idata unsigned char ModuleStatus=0;
idata unsigned char cnt1=0,cnt2;
idata unsigned char CharTmp1;
idata unsigned char smd380_add,smd380_data,smd380_buff[18];
void Delay10us(Word n);
/*-----------------------延時-----------------------*/
void Delay10us(Word n) //delay n 10us
{
Word t,cnt;
for(t=0;t<n;t++)
for(cnt=0;cnt<5;cnt++);
}
void read_smd380(void)
{
idata unsigned char i,j,z;
z=smd380_data;
//smd380_add+=1;
//smd380_add=0x9a;
j=smd380_add|0x80;
CSB_380=1;
SCK_380=1;
SDI_380=1;
SDO_380=1;
Delay10us(2);
CSB_380=0;
Delay10us(2);
SCK_380=0;
for(i=0;i<8;i++)
{
SCK_380=0;
z=0;
if(j&0x80) SDI_380 = 1;
else SDI_380 = 0;
z=0;
z=0;
SCK_380=1;
j <<=1;
z=0;
}
j=0;
for(i=0;i<8;i++)
{
SCK_380=0;
if(SDO_380==1) j |= 0x01;
else j |= 0x00;
SCK_380=1;
j <<=1;
}
SCK_380=1;
CSB_380=1;
smd380_data=j;
}
main()
{
uchar i;
uchar disp_buff[6]; /* 定義顯示緩沖區 */
uint z;
bit acce_bit;
float angle_x,x_value;
P2M1=0X00;
P2M2=0X00;
P1M1=0X2C;
P1M2=0X2C;
P0M1=0X00;
P0M2=0X00;
P3M1=0X00;
P3M2=0X00;
disp_buff[0]=0x70;
disp_buff[1]=0xD8;
disp_buff[2]=0x80;
disp_buff[3]=0xE0;
disp_buff[4]=0xF8;
disp_buff[5]=0xF0;
disp_buff[5]=0xF0;
PT0AD=0X00;
TRIM=0;
while(1)
{
//X:smd380_buff[3];Y:smd380_buff[5];Z:smd380_buff[7];
for(i=0;i<16;i++)
{
smd380_add=i;
read_smd380();
smd380_buff[i]=smd380_data;
}
acce_bit=1; // acce_bit=1角度為正,acce_bit=0角度為負
if(smd380_buff[3]>0x7f)
{
smd380_buff[3]=0x100-smd380_buff[3];
acce_bit=0;
}
x_value=smd380_buff[3]*8;
x_value=x_value/1024.000;
angle_x=asin(x_value)*180.0/pi; //angle_x為角度值,acce_bit=1角度為正,acce_bit=0角度為負
for(z=0;z<2;z++)
{
Delay10us(2);
}
smd380_data=0;
i=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -