www.pudn.com > smd380_program.rar > smd380.c
#include#include #include 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 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; } }