基于51单片机,对方波信号的提取作为轮速信号,再与选择车速结合,计算当前滑移率,并且将当前滑移率,车速,轮速显示在数码管上,所有东西都在附件上 r$ X7 ^+ g* V- j- u/ M 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)" B% U0 h+ _5 {' w% K 单片机源程序如下:0 Z* X' B* x5 N" e3 l #include 《REG51.H》4 h0 v. C7 Q7 S- y+ j #define uint unsigned int #define uchar unsigned char sbit g=P2^3; sbit s=P2^2;8 D- r+ ^# z* `2 f( @9 n- w* j sbit b=P2^1; sbit q=P2^0;& D9 K8 j% P+ M- `8 j sbit cs=P1^0;2 `+ N# Q( T+ c1 y* u9 T# i% f+ _ sbit ls=P1^1; sbit hy=P1^2; sbit cs1=P1^4;: P: I" J5 H1 K9 P6 a* I sbit cs2=P1^5;2 V5 w7 @! F6 q" k1 d sbit cs3=P1^6;8 }% y: ?0 L0 { I8 ^3 s1 b sbit LED1=P2^5;, x4 k# w# O. ~ sbit LED2=P2^6;/ X$ N/ `" R2 P' X5 { sbit LED3=P2^7; int num=0;int t=0;int count=0;int n1;int n2;int n3;, ]7 D2 X$ g/ N( ?5 R3 R unsigned char code dispcode1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码 阴码& U2 r0 [: N; a5 A2 |5 F/ g8 W7 j$ W unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码 阳码 void delay(int z)- r! J( o& U% T, e! R7 M {* Q0 s( V* a. F) y& E int x,y; for(x=z;x》0;x--)9 j' ^6 R. C' ?: i/ T k for(y=110;y》0;y--);' y" f% j0 ]' R( s0 j } //*****轮速*****//% h4 b: t0 ^9 ^( p4 Q$ R void init() {: h( o3 ^* I4 C TMOD=0x01;//定义T0定时方式1 TH0=(65536-50000)/256;( P+ o% `; @2 q& j TL0=(65536-50000)%256;//50ms计时& s \( z! d3 ^/ u6 r- h TR0=1;//启动定时 IT0=1;//下降沿触发) Q) P1 C7 v6 J9 n9 M EX0=1;//允许外部中断: L4 H7 O' n+ A( R- k3 I ET0=1;//外部中断启动 EA=1;//启动总中断 }) f/ L2 a4 T \& {+ G, Y& ?0 h void inter0() interrupt 0& U- b) o' s4 \ { count++;. @4 z4 V% b7 ]; q$ z, a5 u }: S) f% |+ C0 l7 ? n# g# D# J" D7 i void timer0() interrupt 1 T# ~! `/ f7 _. M, P5 S7 m {# ~& Y6 G2 T. _4 l! ^8 B t++; if(t==2) { t=0; n1=count ;7 k' F7 d" F/ U0 V( f* e& M0 ?% r count=0; } TH0=(65536-50000)/256;, d$ s- H/ q- Z! } TL0=(65536-50000)%256; }1 p. c5 k4 Y% b$ W' g% v$ E0 g //*****车速*****// void chesu() { if(cs1==0)& t- {/ M: \. l8 f/ G {n2=60;}2 |3 | j/ n5 c# n else if(cs2==0) {n2=90;}2 d @0 T Y/ t% H( o else if(cs3==0) {n2=120;}9 B7 ]. J4 \! P' ` }, B6 o; s8 V9 ~" Z% e //*****滑移率*****//' h" ]4 t! e% X( g, l& g4 t/ f void huayi() { n3=((n2-n1)*100)/n2; P2=0x00; if(n3》22) {LED1=1;} else if(n3》18)# d9 T l% B. | {LED2=1;} else if(n3《18) {LED3=1;}" O8 s9 D3 H3 b- z2 w } //******显示*****//% `# a5 x2 `6 [ void display(int n) {2 P' K# k9 C+ J4 g6 z4 M r int ge,shi,bai,qian;) O; b; C* B$ l4 Q qian=n/1000;//千位 bai=n%1000/100;//百位 shi=n%100/10;//十位+ y) [6 ~" D7 T( f ge=n%10;//个位 q=0;; Z9 w2 ^% S: r$ [4 ^ P0=dispcode[qian];8 `, t# W( W4 S3 M; g% J delay(10); q=1; b=0;+ Z. l. V# V$ d P0=dispcode[bai];5 f, `4 X( T" M$ R% n1 n1 B! H delay(10); b=1;% Y) d" e4 A8 r) T/ x* u7 [8 f, d3 t" r s=0; P0=dispcode[shi]; delay(10);+ m" |; X3 U% {) M1 W% v4 `4 q s=1;# Z! H/ Y9 c* u1 s: N" o g=0; P0=dispcode[ge];' U3 Z% z6 j2 a F S. ?, E1 ~ ……………………5 K8 B" g" o5 ~7 y% S 3 u" y8 R$ Y* b/ Z; S$ {2 Y- X D/ U |