搜索
您的当前位置:首页霍尔测速度传感器

霍尔测速度传感器

来源:乌哈旅游
#include

#include

#define uint unsigned int

#define uchar unsigned char

#define DataPort P0

sbit RS = P3^5;

sbit RW = P3^6;

sbit EN = P3^4;

sbit PSB=P3^7;

sbit Busy=DataPort^7;

sbit warning=P2^1; //蜂鸣器端

sbit gg=P2^0;

sbit yy=P2^2;

uint i,z,count,zhuan,msec; //定义参数

uint m,mm,zhuan1;

uchar time[3];//显示缓冲区

uchar code num1[]={\"speed= /*******延时1ms*********/

void delay (uint t)

{

uint j;

for(;t>0;t--)

for(j=25;j>0;j--);

}

/*void delayms(uchar xms)

{

定义显示参数

r/sec \uchar i,j;

for(i=xms;i>0;i--)

for(j=125;j>0;j--);

}*/

/**********判忙函数********/

void lcd_Busy(void)

{

DataPort=0xff;

RS = 0;

RW = 1;

EN = 1;

while(Busy==1);

EN = 0;

}

/**********写命令********/

void w_cmd(uint cmd)

{

lcd_Busy();

RS = 0;

RW = 0;

DataPort = cmd;

EN = 1;

delay(1);

EN = 0;

}

/***写数据****/

void w_dat(uint dat)

{

lcd_Busy();

RS = 1;

RW = 0;

DataPort = dat;

EN = 1;

delay(1);

EN = 0;

}

/*******初始化*******/

void init(void)

{

PSB = 1;

w_cmd(0x30);

w_cmd(0x38);

w_cmd(0x01);

w_cmd(0x06);

w_cmd(0x0c);

}

void disp_chinese(uchar code *s)//显示汉字

{

while(*s>0)

{

w_dat(*s);

s++;

delay(3);

}

}

void rt()

{

TMOD=0x01; //内部中断定时器选择

TH0=(65536-50000)/256; //50ms定时

TL0=(65536-50000)/256;

EA=1; //开中断总开关

ET0=1; //开内部中断0

TR0=1; //计时器开始工作

IT0=1; //外部中断0为下降沿触发

EX0=1; //开外部中断0

}

void disp_count()

{

//zhuan=z;

mm=m;

w_cmd(0x80+3);

//zhuan1=((zhuan*12)*0.00001)/0.00028;

zhuan1=zhuan*14;//

w_dat(0x30+zhuan1/1000); //转换转速的千位

w_dat(0x30+zhuan1/100%10); //转换转速的百位

w_dat(0x30+zhuan1/10%10); //转换转速的十位

w_dat(0x30+zhuan1%10); //转换转速的个位

}

/*-------------------转速过高警告程序--------------------*/

void warning_speed()

{

if(zhuan>5000) {

warning=1;

}

if(zhuan<=5000) {

warning=0;

}

}

void fenli_sfm()

//高于5000转打开警告

//低于5000转关闭警告

{

time[0] = m%10;

time[1] = m%100/10;

time[2] = m/100;

w_cmd(0x90+2);

w_dat(0x30+time[2]);

w_dat(0x30+time[1]);

w_dat(0x30+time[0]);

}

/*-----------主函数------------*/

void main()

{

uchar qq,a=0;

init(); //液晶初始化

rt(); //定时器初始化

w_cmd(0x80);

disp_chinese(\"speed= while(1)

{

if(gg==0)

{

delay(5);

if(gg==0)

{

a++;

}

r/s \");

}

if(a==1)

{TR0=1;yy=1;}

if(a==2)

{TR0=0;yy=0;}

if(msec==20) {

msec=0;

m++;

qq=z;

z=0;

zhuan=qq;

}

//50*20=1S

fenli_sfm();

disp_count(); //数据处理

warning_speed(); //转速警告

}

}

/*-------------------外部中断0计数程序-------------------*/

void counter(void) interrupt 0

{

EX1=0; //关外部中断0

count++;

if(count==2) //4次循环为电机转一圈

{

count=1; //初始化计数

z++; //转圈计数加1

} //计数+1

EX1=1; //开外部中断0

return;

}

/*-----------------内部中断0计时计数程序-----------------*/

void Timer_0(void) interrupt 1

{

TH0=(65536-50000)/256; //50ms定时

TL0=(65536-50000)/256;

msec++;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top