还剩7页未读,继续阅读
文本内容:
/勺/、7^勺》
4、7^7^7^7^/■—««w*i**7**j*^p^p11^pII*y*^p***j****j*相关功能利用重力加速度,进行步数的统计需要通过『预先设定要走的步数SE ADDSUB为设置键,第一次按下进行设置,同时进行计时步K1数最多为至少为9010,10o每按下一次步数加每按下一次步数减K2500,K
3500.当预定步数大于时绿灯亮起1000当达到时红灯亮起3000当达到时蓝灯亮起再次按下6000完成规定步数后,蜂鸣器响起,同时计时住手所用扩展模块液晶显示,加速度传感器1602MA7455晶振
11.0592MHz***************************“**********““*******4**********“***“*****,#includeieg
52.1iinclude intiins.h#define uchaiunsigned cliaidefineunit unsignedmi/,,66vlxv|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^xXXIXSAX vixxlxVlXVxXVLXVL^XxXXtXSAXSAX vLxvLx%LxVlXVLXxlx^XxsXxSAXSAXSAX,T^PVAXXZXxJxvlx^LXXxX S^X/f1•,,-j*XJXXjXxjxXJX xjxZJS^|S^JSXJSXJXXJXZjX✓JXXjXZJXa^,ZjSxjxXJXXjXxjxX|XXjXZjX^|S^|SXJSxjxx|xXJXXJXZJXZJXZJS XJXXJXXJXZjXXjXXjX^|X^|S xjxW✓JXXJXZJSZJXZjXZjSZjSZjSXJXXJXX|XXjXZjXsbit sda=PlA4;数据传送位//I2Csbit scl=PlA3;时钟传送位〃12c控制位sbit lcdrs=P2A5;//1602RSsbit lcdnv=P2g控制位//1602RWsbit lcden=P2x7;捽制侍//1A02R二〃设置握〃按键加「〃按键减sbitkl PYO;sbitk2=Pfl;sbit k3=P2;sbit ledl=P2A0;sbit Ied2=P2Al;sbit led3=P2A2;//led I//led2〃定义读指令define TTCREAD#define〃定义写指令sbit bell=P2A3;〃蜂鸣器I1C WRITEOx IDuchai table3
[16]-No acceleiation!1;uchar tabled
[10]-01234567891;.£3X0piuoF!m8R+01%ss口Ep一小,吹停业曾〃!8什+0LQMc]叩一羽以%xo piuo—9Pun8b+0T%UTniBjep-a TJMt|4巧迭皆〃8»OL,EEia叩一STIA1-£8X0pni3na nA{8V+01%moq河一叫m8fr+Ol/JnoqBjEp-3inA\祠W;g皆〃v8X0piuo—叫La—0=moq怵二】网旃_叶同〃-++moq・■O=unu09—imu也-4-4-nnn一岫〃uchai sccjmnJioiiLcount;〃步数初值为〃目标步uint nuin=0;0unit step=10;10uchai flag=3;void delayuiiitzuint x,y;延时void iic_delayQ〃5us_i1op_0;_nop_0;_il op_0;_nop_0;void delay_50usuint t{uchai j;for;t0;t voiddelay_50nisucliai tunitj;for;t0;t〜forj=6245j0D;严*率*********等**拿*****”***]示操作殳置*拿+或/602HI*j H*f***d***d*写指令函数void write_cmd chaicmd〃拉低lcdrs=0;URSP0=cmd写入指令//PO IIdelay5lcden=ldelay5lcden=0forx=27;x0;x..fbry=z;y0;y-;〃写数据函数void x\Tite_datauchai dat拉同lcdrs=l;//RS J二写入数据PO dat;//PO IIdelay5;lcden=l;delay5;lcden=0:〃写字符串函数void UTite_strucliai*str〃字符串写完之前,向来进行写入操作while*str^-wnte_data*su++;delay5;***************************]洒晶女台仆******************************,〃先将拉低lcdrw=0;RW二〃再把拉低〃显示模式设置〃开启显示屏,关光标,光标不Icden0;EN wnte_cmd0x38wnte_cnd0x0c;闪烁〃显示地址递增,即写一个数据后,显示位置右移一,位〃清除屏wiiteq d0x06wnte_cmd0x01;1幕/数据指针把光标移到第一行第一个位置〃设置定时器模式wnle_cmd0xS07TM0D=0x01;THO=65536-50000/256;TLO=65536-50000%256;〃开息中断EA=1;〃开定时器中断ETO=1;T0TROO;,**********************$*******************本**************♦*********—・通信部分12c,,****************************************■*************“***♦*********•・・•・XI〃函数功能通信开始void iic^staitQ I2Csda=l;iic_delay;scl=l;iic_delay;sda=0;iic_delay;void〃函数功能通信住手iic_stopJ I2Csda=0;nc_delay;scl=l;iic_delay;sda=l;i icdelay;〃函数功能通信查应答位void iic.ackO I2Csda=l;scl=l;nc_delay;scl=0;〃函数功能向从机与入■个字节iic_write_byteuchar wdata12cvoiduchar i.remp.rempi;tenipl=wdaui,fori=0;i8;i++scl=0;iic_delayJ;temp=tempi;temp=temp0x80;if temp==0x80sda=l;elsesda=
0.he.delayO;scl=l;iic delayO,scl=0;iic_delayO;temp1=remp1«1;〃函数功能;从从机中读出一■个字节chai uc_read_bytevoid12c uchai x;chai data_daras fbrx=0;x8;x++data_data=data_data«l;sda=l;iic_delayO;scl=O;iic_delayJ;scl=l;iic_delayJ;if*sda==l data_data|=0x01;void iic_wnteucliai byre.add.ucliar wdata液〃晶函显数示功部能份按地址写入一字节数,.、据,
7.,•*•*.••1•♦*.1•*♦*.
1、*♦.、♦4•♦*.
1、*♦*「1*,,*■1•7•,*,!,•奉******,,***尊xjxxjsxK j|s*ZJ|^S*J^ZjSzTs*zJ T^sxj^*J x|sxf x*|J xxjxzlx^Ts^rx**JS*J Z7*SJ^Z*jJ^SZ|SZ|SZ|SXTSXTK SL*✓K TXL*X*JX**J xjxXjXZT*XTSZTSX|SXJSXp*XTSZjSXj*SJ X^jS*J✓^rsX|XX|XX1XXjXXTXZTS*✓J^Js*J^Z*gJ S^x xJy^sxJ x^j*^J xxjL****X*xK TLs*xrsx|xxjx事卡/lehun datadata;uchai t;t=HC_WRITE«l;iic_stait;uc_wfite_bytet;uc_ack;iic_write_bytebyte_add;uc_ack;iic_write_bytewdata J;uc_ack;〃函数功能按地址读出,字节数据uc.stopO;char uc_readuchar byte_adduchar t;chaix;t=nC WRITE«1;uc stan;uc wfitebyte t;uc ack;uc wnte_bytebyte_add,uc_ack;t=IIC_READ«110x01;uc_stait,uc_wnte_bytet;i ic_ackQ,x=uc_read_byte;uc_ack;uc stop;return x;Avflxlzxlz*A*si*^1*slz*lzsi*1*sL**lzslzslzsixx!x*A*^L*si**lz*lzlzsixIZ*r〃函数功能检测有没有插好7455void selfltest7455Q//如果没有插好,将会显示//uchai j;1602cliai t;〃lcNo acceleration!delay_50us10;nc_wnreOx
16.0x05;delay_50us20;t=uc_read0x!6;ift!=0x05wnte_cmd0x80;write_strNo acceleration1;whilel;}elsewrite cmd0x80;wntjstrf500:00:00”wnte cmdOxcO;加心此STEP:0000,0010;n函数功能读取并处理轴测量数据void sendyOyuchar ysign;chai y;y=iic_iead0x07;ify0x80!=0x00ysign=0x2d;y=y-0x01;〃当轴加速度为负数时Yify85y=y;//-进行减一取反的操作delay200;〃得到的绝对侑Y〃按握扫描函数void keyscan〃设置按键ifkl=O二按下步数加if k20〃K2500delay5;ifkl=Odelay5;〃第一次按下为设置模式ifflag==3ifk2=0flag=l;TR0=0;ifstep9000step=srep*500;〃第二次按卜为计步模式}wlule!k2;flag=0;ifk3=0TRO=1;dehy5;按卜]步数减0,/K3500ifstep500stepstep-500,}wlule!k3;〃显预定步wi itjcn]dOxcc;7JK vmedatastep/1000+48;〃显不光标wriB_cmd OxOe;〃顿〃此姓打开光标.提醒用户这是设置模式d100;〃关闭光标的显/]\wrnjcmd0x0c;unte_datastep%1000/100-4S;uTi tedatastep%100*10+48;nnre datastep%10+48;ff根据步数设定点亮模式iflsrepI000step3000LEDled1-0,led2-l;led3=l;}ifstep3000stcp6000ledl-1;led2=0;led3-l,if step6000step9999ledl=l;led2-l;led3-0;〃主函数void maiiiQselfltest74550;〃校正值nc_wnte0x
12.0x39;Y delay_50ms20;while1keyscai iQ;ifflag==OsendyO;delay50ms4;〃显示已走过的步数wiite_cmdOxc7;wnte dataniun11000-48;wnte datanum%1000/100+48;write_datanum%100/10+48;wnte_datanum%10+48;ifnuin=step到预定值后{//iiflag=3;〃定时器关闭TRO=O;〃蜂鸣器响起bell=O;}ff定时器中断函数void timerOOmternipr1THO=65536-50000/256;TLO=65536-50000%256;count++;ifcouiit=18〃秒加一*counr=0;sec++;if sec=60sec=0;。