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

QQ登錄

只需一步,快速開(kāi)始

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

基于51單片機(jī)定時(shí)器0計(jì)時(shí)計(jì)數(shù)器1計(jì)數(shù)的霍爾傳感器精確測(cè)速數(shù)碼管顯示測(cè)速的項(xiàng)目工程

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 51黑電子會(huì)員 于 2020-4-8 21:32 編輯

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit qiting=P3^0;//定義啟停按鍵
  5. uchar qitingnum;//定義啟停次數(shù)變量
  6. uint count;//定時(shí)器0定時(shí)中斷次數(shù)變量
  7. unsigned long speed;//轉(zhuǎn)速變量
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共陰數(shù)碼管段碼數(shù)字0~9字碼表,高電平點(diǎn)亮數(shù)碼管段碼數(shù)字0~9。
  9. /**ms級(jí)延時(shí)子程序**/
  10.   void delay(uint x)
  11. {
  12.    uint i,j;                       
  13.    for(i=0;i<x;i++)     
  14.     for(j=0;j<110;j++);
  15.   }
  16. /**轉(zhuǎn)速顯示函數(shù)**/
  17.   void display(unsigned long speed)
  18. {
  19.    if(speed<=99999)
  20. {
  21.     uchar wan,qian,bai,shi,ge;//定義拆字變量
  22.     wan=speed/10000;//轉(zhuǎn)速/10000得到萬(wàn)位
  23.     qian=speed%10000/1000;//轉(zhuǎn)速/10000的余數(shù)/1000得到千位
  24.     bai=speed%1000/100;//取得百位
  25.     shi=speed%100/10;//取得十位數(shù)字
  26.     ge=speed%10;//取得個(gè)位數(shù)字
  27.    
  28.     P2=0xfd;//數(shù)碼管萬(wàn)位顯示位
  29.     P1=table[wan];//數(shù)碼管萬(wàn)位數(shù)值顯示
  30.     delay(2);//延時(shí)

  31.     P2=0xfb;//數(shù)碼管千位顯示位
  32.     P1=table[qian];//數(shù)碼管千位數(shù)值顯示
  33.     delay(2);//延時(shí)

  34.     P2=0xf7;//數(shù)碼管百位顯示位
  35.     P1=table[bai];//數(shù)碼管百位數(shù)值顯示
  36.     delay(2);//延時(shí)

  37.     P2=0xef;//數(shù)碼管十位顯示位
  38.     P1=table[shi];//數(shù)碼管十位數(shù)值顯示
  39.     delay(2);//延時(shí)

  40.     P2=0xdf;//數(shù)碼管個(gè)位顯示位
  41.     P1=table[ge];//數(shù)碼管個(gè)位數(shù)值顯示
  42.     delay(2);//延時(shí)
  43.    }
  44. }
  45. /**按鍵掃描程序**/  
  46.   void keyscan()//按鍵掃描函數(shù)
  47. {
  48.    if(qiting==0)//判斷啟停鍵是否按下
  49. {
  50. //  delay(5);
  51.     display(speed);
  52.     if(qiting==0)//判斷啟停鍵是否再次按下
  53.   {
  54.      qitingnum++;//啟停次數(shù)變量加加
  55. //   while(!qiting);//等待啟停鍵松開(kāi)
  56.      while(!qiting)//等待啟停鍵松開(kāi)
  57.      display(speed);
  58. //   lcd_init();//LCD1602液晶顯示器初始化函數(shù)
  59.    }
  60.   }
  61.    if(qitingnum==1)//判斷啟停次數(shù)變量是否為1
  62. {
  63.    display(speed);//顯示速度函數(shù)
  64.   }
  65.    if(qitingnum==2)//判斷啟停次數(shù)變量是否為2
  66. {
  67. //  write_1602com(0x08);//關(guān)LCD1602液晶顯示器顯示
  68.     P2=0xff;//關(guān)數(shù)碼管顯示位
  69.     P1=0x00;//關(guān)數(shù)碼管數(shù)值顯示
  70.     qitingnum=0;//啟停次數(shù)變量置0
  71.    }
  72. }
  73. /**定時(shí)器0、計(jì)數(shù)器1初始化子程序**/
  74.   void Time0_Time1_init()
  75. {
  76.    TMOD=0X51;//模式選定時(shí)器0、計(jì)數(shù)器1,工作方式選定時(shí)器0定時(shí)模式1、計(jì)數(shù)器1計(jì)數(shù)模式1。
  77.    TH0=(65536-50000)/256;//定時(shí)器0高8位定時(shí)50毫秒
  78.    TL0=(65536-50000)%256;//定時(shí)器0低8位定時(shí)50毫秒
  79.    TH1=0;//計(jì)數(shù)器1高8位計(jì)數(shù)初值為0
  80.    TL1=0;//計(jì)數(shù)器1低8位計(jì)數(shù)初值為0
  81.    EA=1;//打開(kāi)總中斷
  82.    ET0=1;//打開(kāi)定時(shí)器0的中斷
  83.    TR0=1;//打開(kāi)定時(shí)器0
  84.    ET1=1;//打開(kāi)計(jì)數(shù)器1的中斷
  85.    TR1=1;//打開(kāi)計(jì)數(shù)器1
  86. }
  87. /**主函數(shù)**/     
  88.   void main()
  89. {
  90.    Time0_Time1_init();//定時(shí)器0、計(jì)數(shù)器1初始化子程序
  91.    while(1)
  92. {
  93.     keyscan();//按鍵掃描函數(shù)
  94.    }
  95.   }
  96. /**定時(shí)器0中斷服務(wù)子程序**/                                      
  97.   void Timer0() interrupt 1
  98. {
  99.    TH0=(65536-50000)/256;//重裝定時(shí)器0高8位定時(shí)50毫秒
  100.    TL0=(65536-50000)%256;//重裝定時(shí)器0低8位定時(shí)50毫秒
  101.    count++;//定時(shí)器0定時(shí)中斷次數(shù)變量加加
  102.    if(count==20)//判斷定時(shí)器0定時(shí)中斷次數(shù)變量是否等于20,即1秒鐘。
  103. {
  104.     count=0;//定時(shí)器0定時(shí)中斷次數(shù)變量清0
  105.     TR1=0;//關(guān)計(jì)數(shù)器1,開(kāi)始統(tǒng)計(jì)1秒鐘內(nèi),霍爾元件發(fā)送的脈沖個(gè)數(shù)。
  106.     speed=TH1*256+TL1;//表示計(jì)數(shù)器1計(jì)數(shù)霍爾元件發(fā)送的脈沖個(gè)數(shù),即轉(zhuǎn)速:轉(zhuǎn)/秒。
  107.     TH1=0;//計(jì)數(shù)器1高8位計(jì)數(shù)清0,為了下一次計(jì)數(shù)。
  108.     TL1=0;//計(jì)數(shù)器1低8位計(jì)數(shù)0,為了下一次計(jì)數(shù)。
  109.     TR1=1;//開(kāi)計(jì)數(shù)器1,為了下一次統(tǒng)計(jì)1秒鐘內(nèi),霍爾元件發(fā)送的脈沖個(gè)數(shù)。
  110.    }
  111. }
復(fù)制代碼


圖片10.png (79.3 KB, 下載次數(shù): 66)

圖片10.png

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:626079 發(fā)表于 2020-4-8 11:42 | 只看該作者
不知樓主有沒(méi)有用過(guò)這個(gè)霍爾來(lái)測(cè)電機(jī)的轉(zhuǎn)速。
如果有,咨詢一下,霍爾是要檢測(cè)電機(jī)轉(zhuǎn)軸上的磁鐵吧? 磁鐵用什么磁鐵都可以么?磁鐵怎么固定在轉(zhuǎn)軸上的呢? 磁鐵與這個(gè)位置怎么確定呢?如果有實(shí)物就最好啦。我一直想弄這個(gè)實(shí)物進(jìn)行實(shí)驗(yàn)一下。但就是這幾個(gè)問(wèn)題不能確定。
回復(fù)

使用道具 舉報(bào)

板凳
ID:171036 發(fā)表于 2020-4-8 14:28 | 只看該作者
xmfjfhcel 發(fā)表于 2020-4-8 11:42
不知樓主有沒(méi)有用過(guò)這個(gè)霍爾來(lái)測(cè)電機(jī)的轉(zhuǎn)速。
如果有,咨詢一下,霍爾是要檢測(cè)電機(jī)轉(zhuǎn)軸上的磁鐵吧? 磁鐵 ...

有試過(guò)的哦   一般磁鐵可以啦   用一個(gè)磁鐵粘到套在電機(jī)軸上的旋轉(zhuǎn)盤或者其他圓盤  如果有偏心塊那最好  偏心塊套在電機(jī)軸上  再用磁鐵粘在偏心塊上  至于霍爾傳感器  可以上網(wǎng)買霍爾傳感器模塊就可以啦
回復(fù)

使用道具 舉報(bào)

地板
ID:728262 發(fā)表于 2020-4-17 21:24 | 只看該作者
樓主大大可以告訴下接霍爾傳感器的哪些電阻用什么用嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:171036 發(fā)表于 2020-4-18 12:05 | 只看該作者
我是靴子 發(fā)表于 2020-4-17 21:24
樓主大大可以告訴下接霍爾傳感器的哪些電阻用什么用嗎

這些電阻用來(lái)限流啊  霍爾傳感器測(cè)速部分只是模擬  實(shí)際上可以購(gòu)買霍爾傳感器模塊來(lái)代替即可
回復(fù)

使用道具 舉報(bào)

6#
ID:507412 發(fā)表于 2020-5-4 20:24 | 只看該作者
不需要寫外部中斷嗎?
回復(fù)

使用道具 舉報(bào)

7#
ID:171036 發(fā)表于 2020-5-6 20:01 | 只看該作者

用定時(shí)器計(jì)數(shù)器來(lái)做霍爾測(cè)速相對(duì)于外部中斷測(cè)速準(zhǔn)確的哦
回復(fù)

使用道具 舉報(bào)

8#
ID:507412 發(fā)表于 2020-5-7 14:44 | 只看該作者
51黑電子會(huì)員 發(fā)表于 2020-5-6 20:01
用定時(shí)器計(jì)數(shù)器來(lái)做霍爾測(cè)速相對(duì)于外部中斷測(cè)速準(zhǔn)確的哦

我有霍爾傳感器,為什么有時(shí)候霍爾傳感器感應(yīng)磁鐵時(shí),有觸發(fā)兩次中斷呢?是因?yàn)榇盆F的磁性太強(qiáng)了?一直卡在這里
回復(fù)

使用道具 舉報(bào)

9#
ID:507412 發(fā)表于 2020-5-7 23:39 | 只看該作者
太感謝博主了,用定時(shí)器計(jì)數(shù)確實(shí)比外部中斷準(zhǔn)確,點(diǎn)贊
回復(fù)

使用道具 舉報(bào)

10#
ID:507412 發(fā)表于 2020-5-7 23:44 | 只看該作者
光電傳感器也可以用定時(shí)器來(lái)計(jì)數(shù)吧?
回復(fù)

使用道具 舉報(bào)

11#
ID:507412 發(fā)表于 2020-5-8 20:43 | 只看該作者
博主,定時(shí)1分鐘,數(shù)據(jù)也會(huì)不準(zhǔn)確吧?霍爾一圈要給多少個(gè)脈沖精度才準(zhǔn)確?
回復(fù)

使用道具 舉報(bào)

12#
ID:171036 發(fā)表于 2020-5-22 08:29 | 只看該作者
我只是過(guò)客 發(fā)表于 2020-5-8 20:43
博主,定時(shí)1分鐘,數(shù)據(jù)也會(huì)不準(zhǔn)確吧?霍爾一圈要給多少個(gè)脈沖精度才準(zhǔn)確?

速度一定后 也就是每秒多少轉(zhuǎn)恒定后  每分鐘是不是每秒累積出來(lái)的速度  會(huì)說(shuō)不準(zhǔn)確嗎?
回復(fù)

使用道具 舉報(bào)

13#
ID:880793 發(fā)表于 2021-4-28 11:02 | 只看該作者
需要對(duì)兩個(gè)電機(jī)測(cè)速的話,可以T0,T1連接兩個(gè)霍爾元件進(jìn)行測(cè)速嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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