计步器程序源码_第1页
计步器程序源码_第2页
计步器程序源码_第3页
计步器程序源码_第4页
计步器程序源码_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/ 勺/、7^ 勺》4、7^7^7^7^/■—<«« &>w*i**7**j*^p^p 11 ^pII *y*^p*(**j**(**j*相关功能:利用重力加速度,进行步数的统计。需要通过SE『ADDSUB预先设定要走的步数。K1为设置键,第一次按下进行设置,同时进行计时。步数最多为9010,至少为10oK2每按下一次步数加500,K3每按下一次步数减500.当预定步数大于1000时绿灯亮起:当达到3000时红灯亮起:当达到6000时蓝灯亮起。再次按下完成规定步数后,蜂鸣器响起,同时计时住手。所用扩展模块:1602液晶显示,MA7455加速度传感器晶振:11.0592MHz***************************“**********““*******4:**********“***“****"*,#include<ieg52.1i>include<intiins.h>#defineuchaiunsignedcliaidefineunitunsignedmi/ ,, 66 vlx ''v|x/ XTX^TX^T%.卜*TX^T% ^TX^TsXTV,[、*TxXTV^T%^T%^TXXjSX|X^TsxTxxTx«、«、*7^^TXXT^XT%XTX^Tx^TX^Tx^7x#TXXT^ «、“T、「/*********** 单片机弓[脚定义 ************/■才xlxVlXvlxXlXVLXVLX^xXSAXViXVAXvLxXiX%LX%LxxlxVIXVLXsix^xXXIXvixxlxVlXVxXVLXVL^XxXXtXSAXvLxvLx%LxVlXVLXxlx^XxsXxSAXSAXSAX,T^PVAXXZXxJxvlx^LXXxX S^X /f1 •, , -j*XJXXjXxjxXJX xjx ZJS^|S^JSXJSXJXXJXZjX✓JXXjXZJXa^,ZjSxjxXJXXjXxjxX|XXjXZjX^|S^|SXJSxjxx|xXJXXJXZJXZJXZJS XJXXJXXJXZjXXjXXjX^|X^|S xjxW✓JXXJXZJSZJXZjXZjSZjSZjSXJXXJXX|XXjXZjXsbitsda=PlA4;sbitscl=PlA3;//I2C数据传送位〃12c时钟传送位sbitlcdrs=P2A5;//1602RS控制位sbitlcdnv=P2g//1602RW控制位sbitlcden=P2x7;//1A02R捽制侍sbitkl二PYO;〃设置握sbitk2=Pfl;〃按键加sbitk3=P「2;〃按键减sbitledl=P2A0;sbitIed2=P2Al;sbitled3=P2A2; //ledI//led2defineTTCREAD#define〃定义读指令〃定义写指令sbitbell=P2A3;〃蜂鸣器I1CWRITEOxIDuchaitable3[16]-'Noacceleiation!'1;uchartabled[10]-'0123456789'1;.(£3X0)piuoF!m:(8R+(01%ss))口Ep一小,吹停业曾〃!(8什+(0LQM))c]叩一羽以:(%xo)piuo—9Pun(: (8b+(0T%UTni))Bjep-a)TJMt|4巧迭皆〃:(8»(OL,EE))ia叩一STIA1-(£8X0)pni3na)nA{:(8V+(01%moq))河一叫m:(8fr+(Ol/Jnoq))BjEp-3inA\祠W;g皆〃:(v8X0)piuo—叫La—(:0=moq)(怵二】网旃_叶同〃-++moq・■O=unu)(09—imu也一岫〃-4-4-nnnuchaisccjmnJioiiLcount;uintnuin=0;〃步数初值为0unitstep=10;〃目标10步uchaiflag=3;voiddelay(uiiitz)(uintx,y;for(x=27;x>0;x..)fbr(y=z;y>0;y-);voidiic_delayQ〃5us延时_i1op_0;_nop_0;_ilop_0;_nop_0;voiddelay_50us(uintt){uchaij;for(;t>0;t")voiddelay_50nis(ucliait)(unitj;for(;t>0;t〜)for(j=6245j>0D;严*率*********等**拿*****”***]602voidiic_delayQ〃5us延时_i1op_0;_nop_0;_ilop_0;_nop_0;voiddelay_50us(uintt){uchaij;for(;t>0;t")voiddelay_50nis(ucliait)(unitj;for(;t>0;t〜)for(j=6245j>0D;严*率*********等**拿*****”***]602HI*示操作j殳置*H*f***d***d*拿+或/voidwrite_cmd(chaicmd)〃写指令函数lcdrs=0;URS拉低P0=cmd//POII写入指令delay( 5)lcden=ldelay(5)lcden=0voidx\Tite_data(uchaidat)〃写数据函数lcdrs=l; //RS拉同JPO二dat; //POII写入数据delay(5);lcden=l;delay(5);lcden=0:voidUTite_str(ucliai*str)〃写字符串函数while(*str^-) 〃字符串写完之前,向来进行写入操作wnte_data(*su++);delay(5);***************************]洒晶女台仆******************************,lcdrw=0;〃先将RW拉低Icden二0;〃再把EN拉低wnte_cmd(0x38)〃显示模式设置wnte_cn)d(0x0c);〃开启显示屏,关光标,光标不闪烁wiiteq1d(0x06)〃显示地址递增,即写一个数据后,显示位置右移一,位wnte_cmd(0x01);〃清除屏幕wnle_cmd(0xS0)7/数据指针把光标移到第一行第一个位置TM0D=0x01;〃设置定时器模式THO=(65536-50000)/256;TLO=(65536-50000)%256;EA=1;〃开息中断ETO=1; 〃开定时器T0中断TROO;,**********************$*******************本**************♦*********—・12c通信部分,****************************************■*************“***♦*********,I•・・ • ・Xvoidiic^staitQ 〃函数功能:I2C通信开始sda=l;iic_delay();scl=l;voidvoidvoidiic_delay();voidvoidvoidsda=0;iic_delay();iic_stop(J 〃函数功能:I2C通信住手sda=0;nc_delay();scl=l;iic_delay();sda=l;iicdelay();iic.ackO 〃函数功能:I2C通信查应答位sda=l;scl=l;nc_delay();scl=0;iic_write_byte(ucharwdata)〃函数功能:向12c从机与入■个字节uchari.remp.rempi;tenipl=wdaui,for(i=0;i<8;i++)scl=0;iic_delay(J;temp=tempi;temp=temp&0x80;iftemp==0x80)sda=l;elsesda=0.he.delayO;scl=l;iicdelayO,scl=0;iic_delayO;temp1=remp1«1;chaiuc_read_byte(void)〃函数功能;从12c从机中读出一■个字节uchaix;chaidata_darasfbr(x=0;x<8;x++)data_data=data_data«l;sda=l;iic_delayO;scl=O;iic_delay(J;scl=l;iic_delay(J;if*sda==l)data_data|=0x01;lehundatadata;voidiic_wnte(ucliaibyre.add.ucliarwdata)〃函数功能:按地址写入一字节数据voidiic_wnte(ucliaibyre.add.ucliarwdata)〃函数功能:按地址写入一字节数据uchait;t=(HC_WRITE«l);iic_stait();uc_wfite_byte(t);uc_ack();iic_write_byte(byte_add);uc_ack();iic_write_byte(wdataJ;uc_ack();uc.stopO;charuc_read(ucharbyte_add)〃函数功能:按地址读出,字节数据uchart;chaix;t=(nCWRITE«1);ucstan();ucwfitebyte(t);ucack();ucwnte_byte(byte_add),uc_ack();t=((IIC_READ«1)10x01);uc_stait(),uc_wnte_byte(t);iic_ackQ,x=uc_read_byte();uc_ack();ucstop();returnx;Avfl xlzxlz*A* si* ^1*slz*lzsi* >1*sL**lzslzslzsixx!x *A*^L*si**lz*lz>lzsix液晶显示部份7,**><1>*1**1* *1**1**1>7,*!>,.、,.••.••'•♦.•液晶显示部份7,**><1>*1**1* *1**1**1>7,*!>,.、,.••.••'•♦.•♦.、♦.、♦4•♦.、♦「,,■•'•,,•,,***尊事卡/k|>*J^*J^ *J^ *J>xf>*J>xjxxjsxjsZ|SZjSzTszTsxj^x|sx|xxjxzlx^Ts^rx*J>*J^*J^ kL*kL**X**J>**JSZ7SZjSZ|SZ|SZ|SXTSXTS✓TXXJ>xjxXjXZT*XTSZTSX|SXJSXp*XTS奉*******J^*J^*J^*J^*J^xJ^xJ^*J>xL**X*kL*✓JsZgSxysxj^xj**xTsxrsx|xxjxvoidselfltest7455Q(voidselfltest7455Q(//uchaij;cliait;〃函数功能:检测7455有没有插好//如果没有插好,1602将会显示〃lcNoacceleration!"delay_50us(10);nc_wnre(Ox16.0x05);delay_50us(20);t=uc_read(0x!6);if(t!=0x05)(wnte_cmd(0x80);write_str("Noacceleration?'1);while(l);}else(writecmd(0x80);wntjstrf500:00:00 ”)wntecmd(OxcO);加心此STEP:0000,0010");voidsendyOn函数功能读取并处理y轴测量数据ucharysign;chaiy;y=iic_iead(0x07);if((y&0x80)!=0x00)(ysign=0x2d;y=y-0x01;〃当Y轴加速度为负数时if(y>85)y=y;delay(200);//-"进行减一取反的操作〃得到Y的绝对侑voidkeyscan()〃按握扫描函数if(kl=O)〃设置按键delay(5);if(kl=O)if(flag==3)flag=l;TR0=0;flag=0;TRO=1;〃第一次按下为设置模式〃第二次按卜为计步模式if(k2二0)〃K2按下步数加500delay(5);if(k2=0)if(step<9000)step=srep*500;}wlule(!k2);)if(k3=0)dehy(5);0),/K3按卜]步数减500if(step>500)stepstep-500,}wlule(!k3);)wiitjcn]d(Oxcc);〃显7JK预定步vm(edata((step/1000)+48);wriB_cmd(OxOe);〃显不光标d〃顿100); 〃此姓打开光标.提醒用户这是设置模式wrnjcmd(0x0c); 〃关闭光标的显/]\unte_data((step%1000)/100-4S);uTitedata(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论