導航:首頁 > 操作系統 > 單片機編碼器程序

單片機編碼器程序

發布時間:2022-06-26 09:52:56

1. 51單片機ec11編碼器中斷法

配置一個1ms定時器,並設置為自動清零模式,配置好後記得打開定時器中斷。首先要開啟定時器TIM3,我們使用這個 HAL_TIM_IC_Start_IT(htim, Channel);啟動定時器。
使用定時器回調函數
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
在裡面編寫上面的程序,因為我們將B相接在PA7引腳,所以我們使用switch case語句進行判斷引腳電平,如果單片機檢測到A相為高電平就會進入這個中斷判斷B相電平,低電平為反轉,高電平極為正轉(程序中的cnt為計數作用)。

2. 51單片機 編碼器 程序問題

把你想實現的功能,或者出現的問題,描述清楚,
你這個不清晰


本來是想中斷0 1角變高電平 中斷1觸發1角變低電平
結果是 通電以後 中斷0觸發後 只有一段時間會變高電平
然後再不管觸發哪個中斷都不會有反應。

3. 你好,怎麼通過單片機讀取編碼器脈沖的c語音程序

怎麼用單片機判斷編碼器的正反轉啊? 區別正反轉需要用到絕對編碼器, 通過兩個輸出的相位差來判斷正反轉

4. 51單片機開發板和絕對式編碼器連接測量角度的程序

#include <reg52.h>
#include "inc/delay.h"
#include "inc/hc595.h"

#define uchar unsigned char
#define uint unsigned int
sbit PIN_ROTARY_A = P2^0; //引腳1介面
sbit PIN_ROTARY_B = P2^1; //引腳2介面
sbit PIN_ROTARY_C = P2^2; //按下的介面

sbit PIN_ROTARY_D = P2^3; //按下的介面

//uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 存儲待發送的數據 */
/* 1->8的段碼表 */
code unsigned char ucDis_Segmentcode[16] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 位碼表 */
code unsigned char ucDis_Bitcode[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
uchar dis_XS[8] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d};
uchar count = 0;
uchar flag;
uchar Last_BMB_status;

uchar Current_BMB_status;

void display()
{
uchar i;

dis_XS[0] = ucDis_Segmentcode[count/100]; //百位

dis_XS[1] = ucDis_Segmentcode[count%100/10]; //十位

dis_XS[2] = ucDis_Segmentcode[count%10]; //個位

if(i < 2)
{
i++;
}
else
{
i = 0;
}

// for (i = 0; i < 3; i++ )
{
Send_Data(dis_XS[i], ucDis_Bitcode[i]);
//PIN_ROTARY_D = 0;
// Delay1ms(1);
}
}

//************************************************
void main()
{

TMOD=0x01; //定時器0,工作方式1
TH0=0xD8;
TL0=0xF0; //給定時器裝上初值,10ms中斷一次
ET0=1; //打開定時器中斷
EA =1; //打開總中斷
TR0=1; //啟動定時器0

while(1)
{
//display();
Last_BMB_status=PIN_ROTARY_B;

while(!PIN_ROTARY_A) //BMA為低電平時
{
Current_BMB_status = PIN_ROTARY_B;
flag = 1; //標志位置為1說明編碼開關被旋轉了
}

if(flag == 1)
{
flag = 0; //時刻要注意這一點!給標志位清零
if((Last_BMB_status == 0)&&(Current_BMB_status == 1)) //BMB上升沿表示正轉
{
count++;
if(count == 255)
{
count = 0;
}
}
if((Last_BMB_status == 1)&&(Current_BMB_status == 0)) //BMB下降沿表示反轉
{
count--;
if(count == 0)
{
count = 255;
}
}
}
}
}

//***********************************************
void timer0() interrupt 1//定時器0的中斷服務程序
{
TH0=0xF8; // TH0=0xD8;
TL0=0xF0; //再次裝入初值
display(); //每隔10ms顯示一次
if(!PIN_ROTARY_C) //按下旋轉編碼開關則計數清零
{
count = 0;
}
PIN_ROTARY_D = !PIN_ROTARY_D;
}

5. 51單片機怎麼寫編碼器的程序

可以用T0或T1的計數器模式來處理編碼器的脈沖信號。

6. 求單片機C程序,判斷旋轉編碼器正轉和反轉,以及轉數

旋轉編碼器一般輸出3路信號ABZ,AB相位差是90°
將A接到中斷。當A下降沿時:B為高就是正轉一步,B為低則是反轉一步。
轉速可以用若干步用的時間進行計算。

7. 用單片機數編碼器的脈沖需要加消抖程序嗎編碼器的方波應該不是理想型吧,求做過的大神解釋謝謝您

編碼器輸入不需要加消抖程序,加了的話,反而會有不良效果的,而且編碼器的脈沖信號是經過硬體處理的,輸出是很乾凈的。

8. 怎麼用51單片機和編碼器判斷正反轉啊求51單片機的C程序,謝謝

編碼器的正轉與反轉的相位是用差別的,首先你要了解你使用的編碼器的正轉及反轉的相位。編程的方法有很多,比如可以用查詢IO口電平變化的方式去判斷

9. 51單片機檢測增量式旋轉光電編碼器匯編程序有點問題,請高手看看,分數不是問題

不明白你寫的,你把題目說的清晰一點 ,看了好幾遍,程序編的挺簡單

閱讀全文

與單片機編碼器程序相關的資料

熱點內容
卡券回收源碼兌現 瀏覽:82
安卓為什麼藍牙耳機只連接到一個 瀏覽:368
加密市場跌宕起伏的開年 瀏覽:314
php自毀程序 瀏覽:71
如何教嬰兒學英語app 瀏覽:462
伺服器IP地址可變 瀏覽:679
s4空白加密狗寫入 瀏覽:30
app賬戶注銷怎麼辦 瀏覽:448
怎麼把域名根伺服器綁定 瀏覽:661
關於python網路通信的文章 瀏覽:746
迷你世界雲伺服器炸了 瀏覽:821
php寫的網站有哪些 瀏覽:558
計算機執行過程程序員可以更改嗎 瀏覽:958
海南鯤鵬系列伺服器怎麼選擇 瀏覽:678
為什麼荒野亂斗連接不上伺服器 瀏覽:134
mc伺服器浮空字插件怎麼使用 瀏覽:147
stc系列的單片機有哪些 瀏覽:454
java常用命令 瀏覽:419
植物大戰僵屍qt源碼 瀏覽:113
linux下部署php項目 瀏覽:854