基于加速度传感器ADXL345的计步器设计 - 图文(5)

2019-09-02 19:06

附录1 电路原理图

第21页

附录2 程序清单

#include #include

#define uchar unsigned char #define uint unsigned int

#define DataPort P0 //LCD1602数据端口

sbit SCL=P1^5; //IIC时钟引脚定义; sbit SDA=P1^4; //IIC数据引脚定义 uchar code table_num[]=\

/* *********** LCD1602设置 *************/

sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit e =P1^2; //片选信号 下降沿触发 /* ***********清零按键设置 ********/ sbit key1 = P1^6; sbit key2 = P1^7; sbit key3 = P1^3;

#define SlaveAddress 0xA6 /*定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A*/ long bushu,zong; //步数

uchar BUF[8]; //接收数据缓存区 uchar ge,shi,bai,qian,wan; //显示变量 int dis_data; //变量 int c; int s;

int h=30.5;

void Multiple_Read_ADXL345(); //连续的读取内部寄存器数据 #define RdCommand 0x01 //定义ISP的操作命令 #define PrgCommand 0x02 #define EraseCommand 0x03 #define Error 1 #define Ok 0

#define WaitTime 0x01 //定义CPU的等待时间 sfr ISP_DATA=0xe2; //寄存器申明 sfr ISP_ADDRH=0xe3; sfr ISP_ADDRL=0xe4; sfr ISP_CMD=0xe5; sfr ISP_TRIG=0xe6; sfr ISP_CONTR=0xe7; uchar a_a;

/**************打开 ISP,IAP 功能 ********* */ void ISP_IAP_enable(void) {

第22页

EA = 0; //关中断 ISP_CONTR = ISP_CONTR & 0x18; // 0001,1000 ISP_CONTR = ISP_CONTR | WaitTime; // 写入硬件延时 ISP_CONTR = ISP_CONTR | 0x80; // ISPEN=1 }

/************** 关闭 ISP,IAP 功能 *************** */ void ISP_IAP_disable(void) { ISP_CONTR = ISP_CONTR & 0x7f; // ISPEN = 0 ISP_TRIG = 0x00; EA = 1; // 开中断 }

/*****************公用的触发代码********* */ void ISPgoon(void) { ISP_IAP_enable(); //打开 ISP,IAP 功能 ISP_TRIG = 0x46; //触发ISP_IAP命令字节1 ISP_TRIG = 0xb9; //触发ISP_IAP命令字节2 _nop_(); }

/**********字节读 *********** */

unsigned char byte_read(unsigned int byte_addr) { EA = 0; ISP_ADDRH = (unsigned char)(byte_addr >> 8); // 地址赋值 ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; //清除低3位 ISP_CMD = ISP_CMD | RdCommand; // 写入读命令 ISPgoon(); //触发执行 ISP_IAP_disable // 关闭ISP,IAP功能 EA = 1; return (ISP_DATA); // 返回读到的数据 }

/************ 扇区擦除*********** */ void SectorErase(unsigned int sector_addr) { unsigned int iSectorAddr; iSectorAddr = (sector_addr & 0xfe00); // 取扇区地址 ISP_ADDRH = (unsigned char)(iSectorAddr >> 8); ISP_ADDRL = 0x00; ISP_CMD = ISP_CMD & 0xf8; //清空低3位 ISP_CMD = ISP_CMD | EraseCommand; //擦除命令3 ISPgoon(); //触发执行 ISP_IAP_disable(); //关闭ISP,IAP功能 }

第23页

/********** 字节写 ******* */

void byte_write(unsigned int byte_addr, unsigned char original_data) { EA = 0;

// SectorErase(byte_addr); ISP_ADDRH = (unsigned char)(byte_addr >> 8); // 取地址 ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; // 清低3位 ISP_CMD = ISP_CMD | PrgCommand; //写命令2 ISP_DATA = original_data; //写入数据准备 ISPgoon(); //触发执行 ISP_IAP_disable(); //关闭IAP功能 EA =1; }

/**********把数据保存到单片机内部eeprom中**************/ void write_eeprom() //保存数据 { SectorErase(0x2000); byte_write(0x2000, bushu); byte_write(0x2001, bushu >> 8); byte_write(0x2002, bushu >> 16); byte_write(0x2003, zong); byte_write(0x2004, zong >> 8); byte_write(0x2005, zong >> 16); byte_write(0x2055, a_a); }

/******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom() //读出保存数据 { bushu = byte_read(0x2002); bushu <<= 8; bushu |= byte_read(0x2001); bushu <<= 8; bushu |= byte_read(0x2000); zong = byte_read(0x2005); zong <<= 8; zong |= byte_read(0x2004); zong <<= 8; zong |= byte_read(0x2003); a_a = byte_read(0x2055); }

/**************开机自检eeprom初始化*****************/ void init_eeprom() //开始初始化保存的数据

第24页

{ read_eeprom(); //读出保存数据 if(a_a != 14) //新的单片机初始单片机内问eeprom { zong = 0; bushu = 0; a_a = 14; write_eeprom(); //保存数据 } }

void conversion(uint temp_data) {

wan=temp_data/10000+0x30 ;

temp_data=temp_data000; //取余运算 qian=temp_data/1000+0x30 ;

temp_data=temp_data00; //取余运算 bai=temp_data/100+0x30 ;

temp_data=temp_data0; //取余运算 shi=temp_data/10+0x30 ;

temp_data=temp_data; //取余运算 ge=temp_data+0x30; }

void delay_1ms(uint q) { uint i,j; for(i=0;i

void delay_uint(uint q) { while(q--); }

void write_com(uchar com) { e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0; }

void write_data(uchar dat) {

第25页


基于加速度传感器ADXL345的计步器设计 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:384 - 信文121-当代集团关于修订发布《当代集团宿舍管理制度》并

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: