基于51单片机,对方波信号的提取作为轮速信号,再与选择车速结合,计算当前滑移率,并且将当前滑移率,车速,轮速显示在数码管上,所有东西都在附件上 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载); W* E5 A# L% ] 单片机源程序如下: #include 《REG51.H》 #define uint unsigned int5 B5 f# F- b5 V% g #define uchar unsigned char sbit g=P2^3;5 j# L- g3 x P; G3 T sbit s=P2^2;* b7 _, e# [0 W6 Z! E) ~ sbit b=P2^1; sbit q=P2^0;3 {0 z! K3 Z) i, W7 @ sbit cs=P1^0; sbit ls=P1^1; sbit hy=P1^2;, U$ m3 s0 ] ^% x( v( R sbit cs1=P1^4; sbit cs2=P1^5;; D4 G& L8 g/ `: j& j sbit cs3=P1^6; sbit LED1=P2^5; sbit LED2=P2^6;8 g: H# \/ e$ F) e* O* `+ K2 O sbit LED3=P2^7; int num=0;int t=0;int count=0;int n1;int n2;int n3;& R( D' l# t. z( a: h( ` unsigned char code dispcode1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码 阴码7 A0 V$ w! r0 Q8 Z5 J unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码 阳码( ~4 d1 g& k# \ p0 o void delay(int z) N3 ]. V/ Q/ E" u8 F { int x,y;0 f. c3 ?! s& x- @( U% E5 @ for(x=z;x》0;x--) for(y=110;y》0;y--); } //*****轮速*****// void init() {8 Q c2 }! ~+ V0 Z5 h( h# \) u TMOD=0x01;//定义T0定时方式10 B' A# O: |3 u7 b% q# |: ? TH0=(65536-50000)/256;4 c9 |2 D6 o7 C; w) C4 r TL0=(65536-50000)%256;//50ms计时3 N- L: w. J. N TR0=1;//启动定时/ d9 P2 t. @* S- c5 d* { IT0=1;//下降沿触发 EX0=1;//允许外部中断9 F% c+ |+ i, K$ r1 e ET0=1;//外部中断启动 EA=1;//启动总中断 }+ ^' D r( v# n void inter0() interrupt 0% n3 u" A* }0 a { count++; } void timer0() interrupt 1, `0 a0 [6 f8 K! q3 @ {# Q! S7 _4 S8 Y# P1 k0 a# p t++;) d' o/ R& O7 {5 q4 G& E' r5 q+ U5 u if(t==2) { ?8 G& {6 r% |7 E t=0;0 W5 m9 z; [0 b" n8 {# e n1=count ;; H7 D. {) c# i- y count=0; }! w! ?2 J) G" A" C% M6 e TH0=(65536-50000)/256; TL0=(65536-50000)%256; } //*****车速*****// void chesu(); u& f' @; i4 s {! [& F% L0 k. x9 b2 ~" i, _ if(cs1==0)6 q% `7 {2 l; `% I) S {n2=60;}' M6 w5 f/ [# n7 z else if(cs2==0) {n2=90;}' Z4 ~8 S. u1 |, d else if(cs3==0)4 X6 c: P$ d0 s/ C {n2=120;} }( o* B6 {) f0 ~3 @, B) {3 H //*****滑移率*****// void huayi()* J ^) f6 p; p; N% Y: t { n3=((n2-n1)*100)/n2; P2=0x00;) H8 x! Q( C/ l if(n3》22) {LED1=1;} else if(n3》18)6 d8 z1 W6 m p4 U' { {LED2=1;} else if(n3《18)' J% F s# e. p! E" k- P6 j' ]/ } {LED3=1;}1 q. E; i7 J, R; d }) q5 y. O0 l% v2 f //******显示*****//9 x3 l/ {' A7 M5 G void display(int n) { int ge,shi,bai,qian; qian=n/1000;//千位& l" R6 A$ N s: | bai=n%1000/100;//百位4 G$ E1 V" i3 K- s0 }3 n; n$ N shi=n%100/10;//十位% }0 w$ G, t4 f, ]2 G! ^ ge=n%10;//个位 q=0; P0=dispcode[qian]; delay(10); q=1;- U6 Q3 W; w/ O/ F2 x( i b=0;$ ~0 r% \' ~# L P0=dispcode[bai]; delay(10); b=1; s=0; P0=dispcode[shi];1 o$ d; u1 g; j# `! w4 t; z delay(10); s=1;5 G: R# U' V7 z- { g=0;% n# M0 R7 f+ \& f- c- Q/ Q0 g P0=dispcode[ge]; …………………… |