电子科技制作设计论文
自行车里程表 Designed by Jason
/****************************************void clkp()******************************** 当前时间(时钟)数据处理及显示子程序
******************************************************************************************/ void clkp() {
wrcom(0xc4); dispone(csww+0x30); dispone(cww+0x30); dispone(':'); dispone(cqw+0x30); dispone(cbw+0x30); dispone(':'); dispone(csw+0x30); dispone(cgw+0x30); }
/****************************************void apfz()******************************** 加速度数据处理及显示子程序 辅助程序
******************************************************************************************/ void apfz() {
wrcom(0xc2); dispone('a'); wrcom(0xc6); dispone(qw+0x30); dispone(bw+0x30); dispone('.'); dispone(sw+0x30); dispone(gw+0x30); dispone(' '); dispone('m'); dispone('/'); dispone('s'); dispone('2'); }
/****************************************void ap()******************************** 加速度数据处理及显示子程序
******************************************************************************************/ void ap() {
if (sjiold==sji) {gw=sw=bw=qw=0; apfz();}
- 16 -
电子科技制作设计论文
自行车里程表 Designed by Jason else if(sjiold {aa=360*tc*(sji-sjiold)/sji/sjiold/(sji+sjiold); qw=aa/1000; bw=aa00/100; sw=aa0/10; gw=aa; wrcom(0xc5); dispone('-'); apfz();} else if(sjiold>sji) {aa=360*tc*(sjiold-sji)/sji/sjiold/(sji+sjiold); } /****************************************void int0()******************************** 外部中断0(干簧管)中断服务程序 *****************************************************************************************/ void int0() interrupt 0 { EX0=0; qs++; TR1=0; sjiold=sji; sji=ssji; if (mxsd!=0) { if (sji } //重置T1定时常数 else mxsd=sji; TH1=0xb1; TL1=0xdf; ssji=0; TR1=1; { case 0:wrcom(0x01);lcp();ttimep();break; case 1:wrcom(0x01);sdp();mxsdp();break; //T1重新开始计时 switch(MODE) //更新最大速度 //停止T1计时 //圈数+1 qw=aa/1000; bw=aa00/100; sw=aa0/10; gw=aa; wrcom(0xc5); dispone(' '); apfz();} - 17 - 电子科技制作设计论文 自行车里程表 Designed by Jason case 2:wrcom(0x01);pjsdp();ap();break; case 3:wrcom(0x01);dispmore(1,5,\ default:break; } for(i=0;i<32000;i++); IE0=0; EX0=1; } /****************************************void int1()******************************** 显示模式选择按钮(Disp)中断服务子程序 ******************************************************************************************/ void int1() interrupt 2 { EX1=0; if(++MODE>3) MODE=0; switch(MODE) { case 0:wrcom(0x01);lcp();ttimep();break; case 1:wrcom(0x01);sdp();mxsdp();break; case 2:wrcom(0x01);pjsdp();ap();break; case 3:wrcom(0x01);dispmore(1,5,\ default:break; } for(i=0;i<32000;i++); IE1=0; EX1=1; } /****************************************vvoid timer0()******************************** T0中断服务子程序,主要用于计算累计行驶时间,50ms一次中断,每20次sj++,更新累计行驶时间(单位秒) *******************************************************************************************/ void timer0() interrupt 1 { TH0=0x3c; TL0=0xb0; if(++ssj>19) { sj++; ssj=0; cgw++; if(cgw>9){cgw=0;csw++; if(csw>5){csw=0;++cbw; - 18 - 电子科技制作设计论文 自行车里程表 Designed by Jason if (MODE==0) {lcp();ttimep();} if (MODE==3) clkp(); } } /****************************************void main()******************************** 主程序,初始化LCD,显示欢迎信息,更改时钟、直径设置,开中断、计时器等 ******************************************************************************************/ void main() { init_LCD(); dispmore(1,1,\ Meter-\for(i=0;i<25000;i++); dispmore(2,1,\ Welcome \for(i=0;i<25000;i++); dispmore(2,1,\ Welcome. \for(i=0;i<25000;i++); dispmore(2,1,\ Welcome.. \for(i=0;i<25000;i++); dispmore(2,1,\ Welcome... \for(i=0;i<25000;i++); dispmore(2,1,\ Welcome.... \for(i=0;i<25000;i++); dispmore(2,1,\ Welcome..... \for(i=0;i<30000;i++); wrcom(0x01); MODE=0; qs=0; P2=0xff; cgw=csw=cbw=cqw=cww=csww=cww2=0; wrcom(0x01); dispmore(1,5,\ if(cbw>9){cbw=0;++cqw; } } } } if(cqw>5){cqw=0; cww2++;if(cww2>23)cww2=0;csww=cww2/10;cww=cww2; - 19 - 电子科技制作设计论文 自行车里程表 Designed by Jason clkp(); while(1){ if(P23==0){for(i=0;i<4000;i++);if(P23==0)break;} if(P20==0){for(i=0;i<4000;i++);if(P20==0){cww2++;if(cww2>23)cww2=0;csww=cww2/10;cww=cww2;clkp();for(i=0;i<32000;i++);}} if(P21==0){for(i=0;i<4000;i++);if(P21==0){if(++cqw>5)cqw=0;clkp();for(i=0;i<32000;i++);}} if(P22==0){for(i=0;i<4000;i++);if(P22==0){if(++cbw>9)cbw=0;clkp();for(i=0;i<32000;i++);}} } for(i=0;i<30000;i++); tr1=5; tr2=5; wrcom(0x01); dispmore(1,1,\wrcom(0xc9); dispone('c'); wrcom(0xca); dispone('m'); P2=0xff; wrcom(0xc6);dispone(tr1+0x30); wrcom(0xc7);dispone(tr2+0x30); while(1){ if(P20==0){for(i=0;i<4000;i++);if(P20==0){if(++tr1>9)tr1=0;wrcom(0xc6);dispone(tr1+0x30);for(i=0;i<32000;i++);}} if(P21==0){for(i=0;i<4000;i++);if(P21==0){if(++tr2>9)tr2=0;wrcom(0xc7);dispone(tr2+0x30);for(i=0;i<32000;i++);}} if(P23==0){for(i=0;i<4000;i++);if(P23==0)break;} } tc=3.14*(10*tr1+tr2); TMOD=0x11; TH0=0x3c; TL0=0xb0; TH1=0xb1; TL1=0xdf; IT0=1; IT1=1; IE=0x9f; IP=0x02; TR0=1; TR1=1; //T0和T1开始计时 //开中断 //外部中断触发方式均是边缘触发 //T0和T1均是定时器方式 //置定时常数 - 20 - 电子科技制作设计论文 自行车里程表 Designed by Jason P32=1; IE0=0; wrcom(0x01); for (;;); } - 21 -

