找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1781|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+測(cè)速傳感器—問題求解,不論怎么使電機(jī)轉(zhuǎn)動(dòng),lcd上都顯示0

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:628333 發(fā)表于 2019-10-22 17:23 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
該測(cè)速傳感器與單片機(jī)相連后,不論怎么使電機(jī)轉(zhuǎn)動(dòng),lcd上都顯示0。求大神,求解。單片機(jī)是51單片機(jī)

51hei圖片20191022171857.jpg (164.68 KB, 下載次數(shù): 33)

51hei圖片20191022171857.jpg

51hei圖片20191022171850.jpg (95.6 KB, 下載次數(shù): 33)

51hei圖片20191022171850.jpg

51hei圖片20191022171818.jpg (166.89 KB, 下載次數(shù): 34)

無論怎么遮擋,lcd上都顯示0

無論怎么遮擋,lcd上都顯示0
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2019-10-22 18:35 | 只看該作者
應(yīng)該是傳感器位置裝的不對(duì),從圖上看是紅外對(duì)管進(jìn)行檢測(cè),需在飛輪上鉆一個(gè)孔,光從孔中通過,當(dāng)飛輪轉(zhuǎn)動(dòng)時(shí)測(cè)出對(duì)管產(chǎn)生的脈沖間隔時(shí)間來計(jì)算速度的
回復(fù)

使用道具 舉報(bào)

板凳
ID:149144 發(fā)表于 2019-10-22 19:17 | 只看該作者
程序呢 ?
這樣問貌似沒法回答
回復(fù)

使用道具 舉報(bào)

地板
ID:628333 發(fā)表于 2019-10-23 17:56 來自手機(jī) | 只看該作者
cuihaodianzi 發(fā)表于 2019-10-22 19:17
程序呢 ?
這樣問貌似沒法回答

#include<reg52.h>//51單片機(jī)頭文件

#define uchar unsigned char//宏定義
#define uint unsigned int
uchar code digit[]="0123456789";//定義字符數(shù)組數(shù)字
uchar disp[8];//存儲(chǔ)拆開的數(shù)
uint cnt;//中斷次數(shù)
uchar v;//電機(jī)0速度
uchar s;//電機(jī)1速度
uchar flag;        //計(jì)滿1秒鐘標(biāo)志位
/////////
sbit rs=P2^6;//數(shù)據(jù)命令選擇
sbit rw=P2^5;//讀寫控制信號(hào)
sbit e=P2^7;//使能信號(hào)
///////////////
void delay_50us(uint t)//50us延時(shí)函數(shù)
{
uchar j;
for(;t>0;t--)
    for(j=19;j>0;j--);
}
/////////////
/*
void delay_50ms(uint t)//50ms延時(shí)函數(shù)
{
uint j;
   for(;t>0;t--)
   for(j=6245;j>0;j--);
}
/////////
*/
void write_com(uchar com)//寫地址
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
///////
void write_data(uchar dat)// 寫數(shù)據(jù)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
//////
void init(void)//液晶初始化
{
  delay_50us(300);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  write_com(0x38);
  write_com(0x08);
  write_com(0x01);
  write_com(0x06);
  write_com(0x0c);
}
/////////////
void writeaddress(uchar x)//指定字符的實(shí)際地址
{

  write_com(x|0x80);//顯示位置的確定方法規(guī)定為“80h+地址碼x“
}
//////////
void display_sym(void)//顯示速度提示符
{
writeaddress(0x00);//寫顯示地址第一行第一列
write_data('v');//寫數(shù)據(jù)v
write_data('=');//寫數(shù)據(jù)=
writeaddress(0x00+0x40);//寫顯示地址第一行第一列
write_data('s');//寫數(shù)據(jù)v
write_data('=');//寫數(shù)據(jù)=
}
//////
void dispose()//
{
disp[0]=v/1000;
disp[1]=(v%1000)/100;
disp[2]=(v/100)/10;
disp[3]=v%10;
disp[4]=s/1000;
disp[5]=(s%1000)/100;
disp[6]=(s/100)/10;
disp[7]=s%10;
}
/////////////
void display_val(void)
{
writeaddress(0x02);//寫顯示地址,第一行第三列
  write_data(digit[disp[0]]);//千
  write_data(digit[disp[1]]);//百
  write_data(digit[disp[2]]);//時(shí)
  write_data(digit[disp[3]]);//個(gè)
   writeaddress(0x02+0x40);//寫顯示地址,第2行第三列
  write_data(digit[disp[4]]);//千
  write_data(digit[disp[5]]);//百
  write_data(digit[disp[6]]);//時(shí)
write_data(digit[disp[7]]);//個(gè)

}   
////////
void display_uint(void)//顯示速度單位
{
  writeaddress(0x06);//第1行第7列
  write_data('r');//千
  write_data('/');//百
  write_data('m');//時(shí)
  write_data('i');//個(gè)
  write_data('n');//個(gè)
writeaddress(0x06+0x40);//第2行第7列
  write_data('r');//千
  write_data('/');//百
  write_data('m');//時(shí)
  write_data('i');//個(gè)
  write_data('n');//個(gè)

}
void initial()//初始化
{
TMOD=0x55; //定時(shí)器T1工作與計(jì)數(shù)器模式1,定時(shí)器T0工作于計(jì)數(shù)器模式1
RCAP2H=(65536-50000)/256;
RCAP2L=(65536-50000)%256;
ET2=1;
TR2=1;
EA=1;

}
///////
void main()
{
init();
v=0;
s=0;
initial();
cnt=0;
display_sym();
display_uint();

while(1)
{
TR1=1;
TR0=1;
TH1=0;
TL1=0;
TH0=0;
TL0=0;
flag=0;        // 時(shí)間還未滿1分鐘
while(flag==1);        // 時(shí)間未滿等待
v=(TH1*256+TL1)*60/20;        // 計(jì)算速度,每周產(chǎn)生20個(gè)脈沖
s=(TH0*256+TL0)*60/20;        // 計(jì)算速度,每周產(chǎn)生20個(gè)脈沖
dispose();
display_val();
}
}
//////                                                                                                          
void time2() interrupt 5//定時(shí)器T2中斷服務(wù)程序
{
TF2=0;
cnt++;
if(cnt==20)
{
flag=1;
cnt=0;
}
}
回復(fù)

使用道具 舉報(bào)

5#
ID:628333 發(fā)表于 2019-10-23 17:59 | 只看該作者
csmyldl 發(fā)表于 2019-10-22 18:35
應(yīng)該是傳感器位置裝的不對(duì),從圖上看是紅外對(duì)管進(jìn)行檢測(cè),需在飛輪上鉆一個(gè)孔,光從孔中通過,當(dāng)飛輪轉(zhuǎn)動(dòng)時(shí) ...

大神,不是這樣的吧,我們是用電機(jī)風(fēng)扇葉來測(cè)的,有間隙的啊
回復(fù)

使用道具 舉報(bào)

6#
ID:628333 發(fā)表于 2019-10-23 18:00 | 只看該作者
cuihaodianzi 發(fā)表于 2019-10-22 19:17
程序呢 ?
這樣問貌似沒法回答

程序來了,大神

#include<reg52.h>//51單片機(jī)頭文件


#define uchar unsigned char//宏定義
#define uint unsigned int
uchar code digit[]="0123456789";//定義字符數(shù)組數(shù)字
uchar disp[8];//存儲(chǔ)拆開的數(shù)
uint cnt;//中斷次數(shù)
uchar v;//電機(jī)0速度
uchar s;//電機(jī)1速度
uchar flag;        //計(jì)滿1秒鐘標(biāo)志位
/////////
sbit rs=P2^6;//數(shù)據(jù)命令選擇
sbit rw=P2^5;//讀寫控制信號(hào)
sbit e=P2^7;//使能信號(hào)
///////////////
void delay_50us(uint t)//50us延時(shí)函數(shù)
{
uchar j;
for(;t>0;t--)
    for(j=19;j>0;j--);
}
/////////////
/*
void delay_50ms(uint t)//50ms延時(shí)函數(shù)
{
uint j;
   for(;t>0;t--)
   for(j=6245;j>0;j--);
}
/////////
*/
void write_com(uchar com)//寫地址
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
///////
void write_data(uchar dat)// 寫數(shù)據(jù)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(10);
e=0;
}
//////
void init(void)//液晶初始化
{
  delay_50us(300);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  delay_50us(100);
  write_com(0x38);
  write_com(0x38);
  write_com(0x08);
  write_com(0x01);
  write_com(0x06);
  write_com(0x0c);
}
/////////////
void writeaddress(uchar x)//指定字符的實(shí)際地址
{

  write_com(x|0x80);//顯示位置的確定方法規(guī)定為“80h+地址碼x“
}
//////////
void display_sym(void)//顯示速度提示符
{
writeaddress(0x00);//寫顯示地址第一行第一列
write_data('v');//寫數(shù)據(jù)v
write_data('=');//寫數(shù)據(jù)=
writeaddress(0x00+0x40);//寫顯示地址第一行第一列
write_data('s');//寫數(shù)據(jù)v
write_data('=');//寫數(shù)據(jù)=
}
//////
void dispose()//
{
disp[0]=v/1000;
disp[1]=(v%1000)/100;
disp[2]=(v/100)/10;
disp[3]=v%10;
disp[4]=s/1000;
disp[5]=(s%1000)/100;
disp[6]=(s/100)/10;
disp[7]=s%10;
}
/////////////
void display_val(void)
{
writeaddress(0x02);//寫顯示地址,第一行第三列
  write_data(digit[disp[0]]);//千
  write_data(digit[disp[1]]);//百
  write_data(digit[disp[2]]);//時(shí)
  write_data(digit[disp[3]]);//個(gè)
   writeaddress(0x02+0x40);//寫顯示地址,第2行第三列
  write_data(digit[disp[4]]);//千
  write_data(digit[disp[5]]);//百
  write_data(digit[disp[6]]);//時(shí)
write_data(digit[disp[7]]);//個(gè)

}   
////////
void display_uint(void)//顯示速度單位
{
  writeaddress(0x06);//第1行第7列
  write_data('r');//千
  write_data('/');//百
  write_data('m');//時(shí)
  write_data('i');//個(gè)
  write_data('n');//個(gè)
writeaddress(0x06+0x40);//第2行第7列
  write_data('r');//千
  write_data('/');//百
  write_data('m');//時(shí)
  write_data('i');//個(gè)
  write_data('n');//個(gè)

}
void initial()//初始化
{
TMOD=0x55; //定時(shí)器T1工作與計(jì)數(shù)器模式1,定時(shí)器T0工作于計(jì)數(shù)器模式1
RCAP2H=(65536-50000)/256;
RCAP2L=(65536-50000)%256;
ET2=1;
TR2=1;
EA=1;

}
///////
void main()
{
init();
v=0;
s=0;
initial();
cnt=0;
display_sym();
display_uint();

while(1)
{
TR1=1;
TR0=1;
TH1=0;
TL1=0;
TH0=0;
TL0=0;
flag=0;        // 時(shí)間還未滿1分鐘
while(flag==1);        // 時(shí)間未滿等待
v=(TH1*256+TL1)*60/20;        // 計(jì)算速度,每周產(chǎn)生20個(gè)脈沖
s=(TH0*256+TL0)*60/20;        // 計(jì)算速度,每周產(chǎn)生20個(gè)脈沖
dispose();
display_val();
}
}
//////                                                                                                          
void time2() interrupt 5//定時(shí)器T2中斷服務(wù)程序
{
TF2=0;
cnt++;
if(cnt==20)
{
flag=1;
cnt=0;
}
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表