历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2020年01月08日 | ADXL345倾角传感器的51单片机源程序

2020-01-08 来源:51hei

这是自己做的一个小程序,用到了STC12C5160S2这块单片机芯片做控制,实现ADXL345倾角传感器模块测量角度


单片机源程序如下:

/********************************************************************

* 文件名  :GY-29 ADXL345 测角度,角度值显示

* 创建人  :飞翔的猫

* 描述    : 该文件实现了用GY-29 ADXL345角度的采集,并在数码管上显示出来。

                        使用单片机STC89C51 

*晶振          :11.0592M

*显示     :LCD1602

*编译环境 :Keil uVision4

****************************************/

#include          

#include      //Keil library  

#include     //Keil library        

#include 

#define   uchar unsigned char

#define   uint unsigned int        


//这个一定要根据自己接的引脚来改,否则不出数据

sbit          SCL=P2^0;      //IIC时钟引脚定义

sbit           SDA=P2^1;      //IIC数据引脚定义


#define   DataPort P0    //LCD1602数据端口

sbit      LCM_RS=P2^4;   //LCD1602命令端口                

sbit      LCM_RW=P2^5;   //LCD1602命令端口                

sbit      LCM_EN=P2^7;   //LCD1602命令端口 


#define        SlaveAddress   0xA6          //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改

                              //ALT  ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A

typedef unsigned char  BYTE;

typedef unsigned short WORD;


BYTE BUF[8];                         //接收数据缓存区              

uchar ge,shi,bai,qian,wan;           //显示变量

int  dis_data;                       //变量

int  data_xyz[3];




void delay(unsigned int k);

void InitLcd();                      //初始化lcd1602

void Init_ADXL345(void);             //初始化ADXL345


void WriteDataLCM(uchar dataW);

void WriteCommandLCM(uchar CMD,uchar Attribc);

void DisplayOneChar(uchar X,uchar Y,uchar DData);

void conversion(uint temp_data);


void  Single_Write_ADXL345(uchar REG_Address,uchar REG_data);   //单个写入数据

uchar Single_Read_ADXL345(uchar REG_Address);                   //单个读取内部寄存器数据

void Mutiple_Read_ADXL345(void);     

void clear(void);                               //连续的读取内部寄存器数据

//------------------------------------

void Delay5us();

void Delay5ms();

void ADXL345_Start();

void ADXL345_Stop();

void ADXL345_SendACK(bit ack);

bit  ADXL345_RecvACK();

void ADXL345_SendByte(BYTE dat);

BYTE ADXL345_RecvByte();

void ADXL345_ReadPage();

void ADXL345_WritePage();

//-----------------------------------


//*********************************************************

void conversion(uint temp_data)  

{  

    wan=temp_data/10000+0x30 ;

    temp_data=temp_data%10000;   //取余运算

        qian=temp_data/1000+0x30 ;

    temp_data=temp_data%1000;    //取余运算

    bai=temp_data/100+0x30   ;

    temp_data=temp_data%100;     //取余运算

    shi=temp_data/10+0x30    ;

    temp_data=temp_data%10;      //取余运算

    ge=temp_data+0x30;         

}


/*******************************/

void delay(unsigned int k)        

{                                                

unsigned int i,j;                                

for(i=0;i{                        

for(j=0;j<121;j++)                        

{;}}                                                

}

/*******************************/

void WaitForEnable(void)        

{                                        

DataPort=0xff;                

LCM_RS=0;LCM_RW=1;_nop_();

LCM_EN=1;_nop_();_nop_();

while(DataPort&0x80);        

LCM_EN=0;                                

}                                        

/*******************************/

void WriteCommandLCM(uchar CMD,uchar Attribc)

{                                        

if(Attribc)WaitForEnable();        

LCM_RS=0;LCM_RW=0;_nop_();

DataPort=CMD;_nop_();        

LCM_EN=1;_nop_();_nop_();LCM_EN=0;

}                                        

/*******************************/

void WriteDataLCM(uchar dataW)

{                                        

WaitForEnable();                

LCM_RS=1;LCM_RW=0;_nop_();

DataPort=dataW;_nop_();        

LCM_EN=1;_nop_();_nop_();LCM_EN=0;

}                

/***********************************/

void InitLcd()                        //液晶显示器的设置        

{                        

WriteCommandLCM(0x38,1);        

WriteCommandLCM(0x08,1);        

WriteCommandLCM(0x01,1);        

WriteCommandLCM(0x06,1);        

WriteCommandLCM(0x0c,1);

}                        

/***********************************/

void DisplayOneChar(uchar X,uchar Y,uchar DData)

{                                                

Y&=1;                                                

X&=15;                                                

if(Y)X|=0x40;                                        

X|=0x80;                        

WriteCommandLCM(X,0);                

WriteDataLCM(DData);                

}                                                


/**************************************

延时5微秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数,注意时钟过快时需要修改

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5us()

{

    _nop_();_nop_();_nop_();_nop_();

    _nop_();_nop_();_nop_();_nop_();

        _nop_();_nop_();_nop_();_nop_();

}


/**************************************

延时5毫秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5ms()

{

    WORD n = 560;


    while (n--);

}


/**************************************

起始信号

**************************************/

void ADXL345_Start()

{

    SDA = 1;                    //拉高数据线

    SCL = 1;                    //拉高时钟线

    Delay5us();                 //延时

    SDA = 0;                    //产生下降沿

    Delay5us();                 //延时

    SCL = 0;                    //拉低时钟线

}


/**************************************

停止信号

**************************************/

void ADXL345_Stop()

{

    SDA = 0;                    //拉低数据线

    SCL = 1;                    //拉高时钟线

    Delay5us();                 //延时

    SDA = 1;                    //产生上升沿

    Delay5us();                 //延时

}


/**************************************

发送应答信号

入口参数:ack (0:ACK 1:NAK)

推荐阅读

史海拾趣

Efficient Power Conversion公司的发展小趣事

在追求自身发展的同时,EPC公司也积极寻求与行业内其他企业的合作。通过与全球知名的汽车制造商、通信设备制造商以及消费电子企业建立合作关系,EPC公司将其氮化镓技术广泛应用于各个领域,推动了整个电子行业的发展。同时,EPC公司也积极参与行业标准的制定和推广工作,为行业的健康发展做出了积极贡献。

台湾稳态公司的发展小趣事

随着企业实力的增强和产品质量的提升,台湾稳态公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓海外市场,将产品销往全球多个国家和地区。同时,稳态公司还制定了全球化战略,通过与国际知名企业的合作和交流,不断提升自身的国际竞争力。

DFI公司的发展小趣事

近年来,随着智能医疗和金融科技等新兴领域的兴起,DFI看到了新的发展机遇。公司开始将这些领域作为重点发展方向,投入大量资源进行研发和创新。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有创新性的智能医疗和金融科技产品。这些产品不仅为客户提供了更便捷、更高效的服务体验,也为DFI带来了新的增长点。随着这些新兴领域的不断发展壮大,DFI有望在未来实现更大的突破和发展。

请注意,以上故事均为虚构,旨在展示DFI公司可能的发展历程和业务活动。实际情况可能有所不同,具体信息请参考DFI公司的官方资料。

Coleman Cable Inc公司的发展小趣事

在电子行业的早期,Coleman Cable Inc以其创新性的电缆设计和技术突破,在市场中崭露头角。公司研发出一款具有高效传输和稳定性能的电缆产品,迅速赢得了消费者的青睐。随着技术的不断完善和市场需求的扩大,Coleman Cable逐渐扩大了生产规模,并开始向国际市场拓展,其产品在全球范围内得到了广泛应用。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

随着电子技术的飞速发展,AIE公司不断投入研发力量,推出了一系列具有创新性的测试配件产品。其中,AIE金属探头以其高精度、高稳定性的特点,受到了市场的广泛认可。此外,AIE还针对汽车行业推出了ADK汽车诊断试剂盒,为汽车维修和诊断提供了便捷、高效的解决方案。这些技术创新和产品升级不仅提升了AIE的市场地位,也推动了电子测试技术的不断进步。

Harris公司的发展小趣事

在过去的四十年中,Hammond将业务重心扩展到了美国和国际市场。通过在全球各地设立办事处和建立分销网络,Hammond成功地将其产品和服务推广到了世界各地。这一战略转型不仅极大地提升了Hammond的品牌影响力,还为其带来了更加广阔的市场空间和增长潜力。

问答坊 | AI 解惑

干尸鼠标[胆小勿用]

相信大家见过很多种BT的鼠标了,不过像这种恐怖的干尸鼠标确实很少见的。大家不要担心,这个不是真的用尸骨做的,只是一种打造出来的效果而已。…

查看全部问答>

s3c2440为什么要用两片sdram?

最近想学习ARM的设计,发现大多数开发板都采用了两片sdram。我不明白为什么不用1片大容量的sdram替换呢?…

查看全部问答>

怎么在isr 中 打印调试消息, 加DEBUGMSG 怎么link失败

我想在ISR中打印调试信息,加了DEBUGMSG怎么Link失败 error LNK2019: unresolved external symbol _NKDbgPrintfW referenced in function _ISRHandler 这是我的Source文件,高手看看缺啥啊,我和系统带的串口中断 ISR16550 DLL的Source文件对比过 ...…

查看全部问答>

请GPS方面的高手来

说是GPS方面的问题但又不全是,我这里从一个仪表里读到的数据是0183格式发送出来的TTL电平,是测水深和流速等的仪表,经过232转换为232格式数据,在计算机上用软件监测COM端口,但不知道它的波特率等协议格式,读到的数据显示出来的都是乱码,也不知道是不 ...…

查看全部问答>

FPGA中遇到的一个小问题

最近在编一个数字解调器,要用到数字低通滤波器,我找了一个核,但是在使用MegaWizard plug进行设置之后,元件的图形发生了变化,就是16个输入在图形上只显示了4个,中间的12个都用省略号代替了。不知道有没有人遇到过类似的情况没啊?我Google找过 ...…

查看全部问答>

STM32的CAN通信时,RX方没有接收到数据,TX端却显示数据发送

在调试CAN通信,发现出现一个问题,详细描述如下为了调试方便,我把CAN总线上的节点简化到只有2个节点,一个收一个发。(1)当接收端滤波器设置为全接收,则可以接收到发送端数据,发送端显示发送成功。(2)当接收端滤波器设置了过滤条件,则 ...…

查看全部问答>

求助:16进制转换为10进制汇编程序

哪位大虾有16进制转换为10进制430汇编程序,可否提供一下,在下不甚感激。…

查看全部问答>

降低低功耗蓝牙的功耗

Bluetooth SIG的蓝牙核心规格版本 4.0 不仅仅是用来随便看看的的,它是共六册总计2302页的详细的资料文件。这项规格于2010年被采用,它描述了silicon vendor 如何设计才能使蓝牙 v4.0芯片与其他厂家的芯片相连接。这是蓝牙无线技术的关键点:它已成 ...…

查看全部问答>

C2000 LaunchPad的SCI串口简单通信

#include #include Uint16 sendchar; Uint16 recechar; void sci_init() {    EALLOW;    GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;    GpioCtrlRegs.GPAMUX2.bit.GPIO29=1;//设置GPIO28/29为通信端口    EDIS; ...…

查看全部问答>

请问TO-can package是什么封装方式,中文是什么?谢谢!!

TO-can package是什么封装方式,翻译成中文是什么?…

查看全部问答>