导航:首页 > 装置知识 > 单片机转速检测装置设计00未收录未收录未收录

单片机转速检测装置设计00未收录未收录未收录

发布时间:2022-01-28 23:22:54

⑴ 单片机设计题目 转速计的设计(LED显示)

可以做,但有偿!这不是举手之劳,是要坐下来好好细心写并调试的。要尊重知识!

⑵ 网站迟迟未被收录没有备案,请问怎么办啊

坚持有规律的优化更新,网站完善得差不多后,向网络等搜索引擎提交网站的地址就行了。

⑶ 求基于51单片机的转速测量的设计(代码),最好C语言实现的,给些指导也行!

测速得需要外部电路啊,单个单片机不行啊,如上图测电机转的速度就加了编码盘,和光电传感器测速啊。

⑷ 设计一个由单片机控制的电机转速检测系统,实时监测电机的转速,达到设定值,声音报警提示谢谢好心人啊!

LCD1602显示,如果转速达到5000R/MIN,蜂鸣器就会报警
#include <reg52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/*-----------------------端口命名------------------------*/
sbit lcdrs=P2^7; //LCD的数据/命令选择端
sbit lcdrw=P2^6; //LCD的读写选择端
sbit lcden=P2^5; //LCD的使能信号端
sbit warning=P3^1; //蜂鸣器端
/*-------------------------------------------------------*/
/*-----------------------定义参数------------------------*/
uint i,j,z,count,zhuan,msec; //定义参数
uchar num,ge,shi,,qian; //变量声明
uchar code table0[]={"Velometer"}; //定义显示参数
uchar code table1[]={"Speed: r/min"};
/*-------------------------------------------------------*/
/*-----------------------毫秒延时------------------------*/
void delay0(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602写命令--------------------*/
void write_com(uchar com)//写命令子函数--写指令
{
lcdrs=0;lcden=0;lcdrw=0; //此时命令
P0=com;//命令写入P0口
delay0(5);
lcden=1;
delay0(5);//出现下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602写数据--------------------*/
void write_data(uchar date)//写命令子函数--写数据
{
lcdrs=1;lcden=0;lcdrw=0;
P0=date;//数据写入P0
delay0(5);
lcden=1;
delay0(5);//出现下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*-------------------外部中断0计数程序-------------------*/
void counter(void) interrupt 0
{
EX0=0; //关外部中断0
count++;
if(count==4) //4次循环为电机转一圈
{
count=0; //初始化计数
z++; //转圈计数加1
} //计数+1
EX0=1; //开外部中断0
return;
}

/*-------------------------------------------------------*/
/*-----------------内部中断0计时计数程序-----------------*/
void Timer_0(void) interrupt 1
{
TH0=0x3C; //50ms定时
TL0=0xB0;
msec++;
if(msec==20) //50*20=1S
{
msec=0;
zhuan=z*60;
z=0;
}
}
/*-------------------------------------------------------*/
/*----------------------端口初始化-----------------------*/
void int_all()
{
warning=0; //关蜂鸣器
z=0; //初始化z的值
count=0; //初始化count的值
zhuan=0; //初始化转的值
TMOD=0x01; //内部中断定时器选择
TH0=0x3C; //50ms定时
TL0=0xB0;
lcdrw=0; //选择LCD写数据指令
lcden=0; //使能信号开始为低
write_com(0x38); //16*2显示,5*7点阵,八位数据
delay0(15);
write_com(0x38);
delay0(15);
write_com(0x38);
write_com(0x08);//显示关、关光标,不闪烁
write_com(0x01);//清屏
delay0(15);
write_com(0x04);
delay0(15);
write_com(0x0c);
EA=1; //开中断总开关
ET0=1; //开内部中断0
TR0=1; //计时器开始工作
IT0=1; //外部中断0为下降沿触发
EX0=1; //开外部中断0
}

/*-------------------------------------------------------*/
/*------------------------LCD显示------------------------*/
void display ()
{
write_com(0x01); //清屏
write_com(0x06); //调用写命令函数,向右移动光标(增量)
write_com(0x80|0x03); //初始位置
for(num=0;table0[num] != '\0';num++) //第一行的字符
{
write_data(table0[num]);
delay0(1);
}
write_com(0x80|0x40); //换行
for(num=0;table1[num]!='\0';num++)
{
write_data(table1[num]);
delay0(1);
}
qian=(zhuan/1000+'0'); //转换转速的千位
=(zhuan/100%10+'0'); //转换转速的百位
shi=(zhuan/10%10+'0'); //转换转速的十位
ge=(zhuan%10+'0'); //转换转速的个位
write_com(0x80|0x46);
write_data(qian);
delay0(50);
write_com(0x80|0x47);
write_data();
delay0(50);
write_com(0x80|0x48);
write_data(shi);
delay0(50);
write_com(0x80|0x49);
write_data(ge);
delay0(5000);
}

/*-------------------------------------------------------*/
/*-------------------转速过高警告程序--------------------*/
void warning_speed()
{
if(zhuan>2400||zhuan<800) //高于5000转打开警告
{
warning=1;
}
if(zhuan<=2400&&zhuan>800) //低于5000转关闭警告
{
warning=0;
}
}
/*-------------------------------------------------------*/
/*------------------------主函数-------------------------*/
void main()
{
int_all(); //全局初始化
while(1)
{
warning_speed(); //转速警告
display (); //LCD显示
}
}

⑸ 单片机课程设计转速测量仪设计

这个你使用单片机P3.5脚的T1计数器功能就可以实现了,
不过注意一点,你所采集的信号要通过施密特反相器,否则有可能误判;

⑹ 用单片机中断功能实现转速的测量

我的博客上有一个用中断计数的程序,你可以去参考,实际上转速大多是产生的脉冲.

⑺ 基于51单片机的转速测量设计,程序编写!电路仿真图

测量转速,使用光电传感器,被测电机带动纸片旋转,我们在纸片上开了10小孔,电机每旋转一周就会产生10个脉冲,产生12个脉冲,要求将转速值(转/分)显示在数码管上。

实验程序如下:

#include<REG52.H>

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineLED_DATP1

sbitLED_SEG0=P0^3;

sbitLED_SEG1=P0^2;

sbitLED_SEG2=P0^1;

sbitLED_SEG3=P0^0;

//sbitpin_SpeedSenser=P3^5;//光电传感器信号接在T1上

#defineTIME_CYLC100//12M晶振,定时器10ms中断一次我们1秒计算一次转速//1000ms/10ms=100

#definePLUS_PER10//码盘的齿数,这里假定码盘上有10个齿,即传感器检测到10个脉冲,认为1圈

#defineK100.0//校准系数

unsignedcharcodetable[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchardataDisbuf[4];//显示缓冲区

uintTcounter=0;//时间计数器

bitFlag_Fresh=0;//刷新标志

bitFlag_clac=0;//计算转速标志

bitFlag_Err=0;//超量程标志

//在数码管上显示一个四位数

voidDisplayFresh();

//计算转速,并把结果放入数码管缓冲区

voidClacSpeed();

//初始化定时器T0

voidinit_timer0();

//初始化定时器T1

voidinit_timer1();

//延时函数

voidDelay(uintms);

voidit_timer0()interrupt1/*interruptaddressis0x000b*/

{

TF0=0;//d定时器T0用于数码管的动态刷新

//

TH0=0xC0;/*initvalues*/

TL0=0x00;

Flag_Fresh=1;

Tcounter++;

if(Tcounter>TIME_CYLC)

{Flag_clac=1;//周期到,该重新计算转速了

}

}

voidit_timer1()interrupt3/*interruptaddressis0x001b*/

{

TF1=0;//定时器T1用于单位时间内收到的脉冲数

//要速度不是很快,T1永远不会益处

Flag_Err=1;//如果速度很高,我们应考虑另外一种测速方法,:脉冲宽度算转速

}

voidmain(void)

{

Disbuf[0]=0;//开机时,初始化为0000

Disbuf[1]=0;

Disbuf[2]=0;

Disbuf[3]=0;

init_timer0();

init_timer1();

while(1)

{

if(Flag_Fresh)

{Flag_Fresh=0;

DisplayFresh();//定时刷新数码管显示

}

if(Flag_clac)

{Flag_clac=0;

ClacSpeed();//计算转速,并把结果放入数码管缓冲区

Tcounter=0;//周期定时清零

TH1=TL1=0x00;//脉冲计数清零

}

if(Flag_Err)//超量程处理

{

//数码管显示字母'EEEE'

Disbuf[0]=0x9e;//开机时,初始化为0000

Disbuf[1]=0x9e;

Disbuf[2]=0x9e;

Disbuf[3]=0x9e;

while(1)

{DisplayFresh();//不再测速等待复位i

}

}

}

}

//在数码管上显示一个四位数

voidDisplayFresh()

{

P2|=0xF0;

LED_SEG0=0;

LED_DAT=table[Disbuf[0]];

Delay(1);

P2|=0xF0;

LED_SEG1=0;

LED_DAT=table[Disbuf[1]];

Delay(1);

P2|=0xF0;

LED_SEG2=0;

LED_DAT=table[Disbuf[2]];

Delay(1);

P2|=0xF0;

LED_SEG3=0;

LED_DAT=table[Disbuf[3]];

Delay(1);

P2|=0xF0;

}

//计算转速,并把结果放入数码管缓冲区

voidClacSpeed()

{

uintspeed;

uintPlusCounter;

PlusCounter=TH1*256+TL1;

speed=K*(PlusCounter/PLUS_PER)/60;//K是校准系数,如速度不准,调节K的大小

Disbuf[0]=(speed/1000)%10;

Disbuf[1]=(speed/100)%10;

Disbuf[2]=(speed/10)%10;

Disbuf[3]=speed%10;

}

//初始化定时器T0

voidinit_timer0()

{

TMOD&=0xf0;//定时10毫秒/*Timer0mode1withsoftwaregate*/

TMOD|=0x01;/*GATE0=0;C/T0#=0;M10=0;M00=1;*/

TH0=0xC0;/*initvalues*/

TL0=0x00;

ET0=1;/*enabletimer0interrupt*/

EA=1;/*enableinterrupts*/

TR0=1;/*timer0run*/

}

//延时函数

voidDelay(uintms)

{

uchari;

while(ms--)

for(i=0;i<100;i++);

}

//初始化定时器T1

voidinit_timer1()

{

TMOD&=0x0F;/*Counter1mode1withsoftwaregate*/

TMOD|=0x50;/*GATE0=0;C/T0#=1;M10=0;M00=1;*/

TH1=0x00;/*initvalues*/

TL1=0x00;

ET1=1;/*enabletimer1interrupt*/

EA=1;/*enableinterrupts*/

TR1=1;/*timer1run*/

}

⑻ 基于at89c51单片机的电子式转速里程表设计应该怎样答辩

可以做这个~~

⑼ 基于51单片机转速测量的程序,望高手帮我解释一下。

#include <reg51.h>
#include <INTRINS.H>

#define FOSC 11.0592

unsigned int speed;
unsigned char key;
unsigned char led_table[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};
long speed_count,speed_count1;
unsigned char speed_check;
unsigned int second_flag;
unsigned char speed_table[4];
unsigned char speed_table1[10];

//定时器频率1000Hz
void timer1_init(void)
{
EA=0;
TMOD=0x10;
//TH1=1000*FOSC/12/256;
//TL1=(unsigned int)(1000*FOSC/12)%256;
TH1=254;
TL1=51;
TR1=1;
TCON|=0X04; //外部中断下降触发
EX1=1; //允许外部中断
ET1=1;
EA=1;

}
void int1_routine(void) interrupt 2
{
speed_count++;
P1^=0X02;
}

void timer1_routine(void) interrupt 3
//void timer1_routine(void)
{
TH1=254;
//TH1=0xf0;
TL1=51;
//speed_count++;
second_flag++;

}

void main(void)
{
unsigned int i,j,k;
// unsigned char sum;
unsigned speed_table[3];
long time_id;
timer1_init();
speed=0;
P2=0x0f;
P0=0xf0;
P3=0x08;
key=0;
P1=0x00;
speed_check=0;
while(1)
{

//P1^=0XFE;
j=1;
//speed=1234;
speed_table[0]=speed/1000;
speed_table[1]=speed%1000/100;
speed_table[2]=speed%100/10;
speed_table[3]=speed%10;
for(i=0;i<4;i++)
{
P2=j^0xff;
j<<=1;
P0=(led_table[speed_table[i]])&0xfe;
for(k=0;k<250;k++) ;
}
//speed=speed_count;

if(second_flag>=1000) /*中断1000次进入 */
{

second_flag=0;
time_id++;
speed_table1[time_id%10]=speed_count;/*外部中断量转存(是很聪明的方法学习了)*/
speed_count=0;
speed=(speed_table1[0]+speed_table1[1]+speed_table1[2]+speed_table1[3]+speed_table1[4]+speed_table1[5]+speed_table1[6]+speed_table1[7]+speed_table1[8]+speed_table1[9])*6; /*(10X6)10秒的外部中断量乘以6就是转速了*/
//speed=speed/2+(speed_table[0]+speed_table[1]+speed_table[2])*6;
}

}

}

⑽ 基于单片机的转速测量系统设计,求硬件原理图,仿真图。知道的热心人士能不能发给我,[email protected]

这个可以帮你,不过最好你能写写具体的设计要求,那就更好了

阅读全文

与单片机转速检测装置设计00未收录未收录未收录相关的资料

热点内容
台式小清新爱情片 浏览:752
学生喜欢老师的台湾电影 浏览:647
二匹制冷机多少钱 浏览:524
健身器材怎么做好 浏览:598
荒岛求生电影一男二女 浏览:283
用嘴开红酒瓶第电影叫啥 浏览:891
大傻当警察但是色狼得电影叫什么 浏览:381
在哪看票房 浏览:423
如何把玩机械键盘 浏览:958
设备科科长怎么当 浏览:538
在哪里看啄木鸟系列 浏览:80
小电影网站免费网址 浏览:292
温州耐腐蚀阀门厂 浏览:566
甄楚倩惊艳电影 浏览:225
中学生师生情电影 美国 浏览:363
韩国电影男友喝醉在楼下女的在楼上被干不敢出声 浏览:337
午夜好电影 浏览:519
下载小电影手机会中病毒吗 浏览:82
违规安装水塔自动抽水装置 浏览:459
国产外星人电影 浏览:309