基于51单片机,对方波信号的提取作为轮速信号,再与选择车速结合,计算当前滑移率,并且将当前滑移率,车速,轮速显示在数码管上,所有东西都在附件上
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <REG51.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit g=P2^3;
- sbit s=P2^2;
- sbit b=P2^1;
- sbit q=P2^0;
- sbit cs=P1^0;
- sbit ls=P1^1;
- sbit hy=P1^2;
- sbit cs1=P1^4;
- sbit cs2=P1^5;
- sbit cs3=P1^6;
- sbit LED1=P2^5;
- sbit LED2=P2^6;
- sbit LED3=P2^7;
- int num=0;int t=0;int count=0;int n1;int n2;int n3;
- unsigned char code dispcode1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码 阴码
- unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码 阳码
- void delay(int z)
- {
- int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- //*****轮速*****//
- void init()
- {
- TMOD=0x01;//定义T0定时方式1
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;//50ms计时
- TR0=1;//启动定时
- IT0=1;//下降沿触发
- EX0=1;//允许外部中断
-
- ET0=1;//外部中断启动
- EA=1;//启动总中断
- }
-
- void inter0() interrupt 0
- {
-
- count++;
- }
- void timer0() interrupt 1
- {
- t++;
- if(t==2)
- {
- t=0;
- n1=count ;
- count=0;
- }
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- }
- //*****车速*****//
- void chesu()
- {
- if(cs1==0)
- {n2=60;}
- else if(cs2==0)
- {n2=90;}
- else if(cs3==0)
- {n2=120;}
- }
- //*****滑移率*****//
- void huayi()
- {
- n3=((n2-n1)*100)/n2;
- P2=0x00;
- if(n3>22)
- {LED1=1;}
- else if(n3>18)
- {LED2=1;}
- else if(n3<18)
- {LED3=1;}
- }
- //******显示*****//
- void display(int n)
- {
- int ge,shi,bai,qian;
- qian=n/1000;//千位
- bai=n%1000/100;//百位
- shi=n%100/10;//十位
- ge=n%10;//个位
- q=0;
- P0=dispcode[qian];
- delay(10);
- q=1;
- b=0;
- P0=dispcode[bai];
- delay(10);
- b=1;
- s=0;
- P0=dispcode[shi];
- delay(10);
- s=1;
- g=0;
- P0=dispcode[ge];
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
2.zip
(94.12 KB, 下载次数: 9)
|