導航:首頁 > 裝置知識 > 單片機轉速檢測裝置設計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未收錄未收錄未收錄相關的資料

熱點內容
純凈無廣告電視劇網 瀏覽:730
韓國講朝鮮的電影 瀏覽:440
德陽恆大五金機電汽配城 瀏覽:17
機械製造與自動化多少分 瀏覽:783
國外可以下載影片的軟體 瀏覽:504
尺度大的拉拉片有哪些 瀏覽:949
鑄造幣怎麼過渡 瀏覽:458
泰國les女同劇 瀏覽:104
女切腹6部合集 瀏覽:936
韓劇網電梯戰神在線觀看 瀏覽:102
池州五金建材市場 瀏覽:364
四驅車壓力軸承怎麼安裝 瀏覽:852
鑄造模具用什麼膠水 瀏覽:680
cvt儀表盤多少錢 瀏覽:391
實驗動物缺氧裝置 瀏覽:864
伺服電機軸端用的什麼型號的軸承 瀏覽:749
揚州金立電動工具官方網站 瀏覽:162
燧石行動俄羅斯女演員 瀏覽:992
智能儀器常見的硬體故障有哪些 瀏覽:809
有沒有午夜美女小電影在線觀看網址 瀏覽:319