久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

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

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

一個(gè)自己寫(xiě)的程序 編碼器轉(zhuǎn)動(dòng)沒(méi)反應(yīng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:116352 發(fā)表于 2016-5-1 17:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
大神請(qǐng)指教   本程序測(cè)得是增量式編碼器位置  說(shuō)白了就是計(jì)數(shù)A B脈沖  但是燒進(jìn)去之后示數(shù)一直是0  轉(zhuǎn)動(dòng)編碼器不會(huì)有反應(yīng)  前后改了幾次實(shí)在是改不出來(lái)了  求大神支招


#include <REG51.H>         //  寄存器頭文件包含
#include <INTRINS.H>  //  空操作函數(shù),移位函數(shù)頭文件包含

#define uchar unsigned char
#define  uint unsigned int

unsigned char  counter;
unsigned char b;

sbit PINA = P1^0;//csn信號(hào)white
sbit PINB = P1^1;//這個(gè)是時(shí)鐘blue
sbit PIND = P1^2;//這個(gè)是數(shù)據(jù)green


sbit LED1 = P2^7;//LED顯示位選控制 千位
sbit LED2 = P2^6;//LED顯示位選控制 百位
sbit LED3 = P2^5;//LED顯示位選控制 十位
sbit LED4 = P2^4;//LED顯示位選控制 個(gè)位

uchar led_buf[4];      /*定義LED顯示緩沖區(qū),將帶顯示數(shù)值放入該區(qū)域*/


/*------------------------------------------------
                     數(shù)碼管段碼表  
------------------------------------------------*/
uchar code disp_buff[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};                                         

/*------------------------------------------------
                    延時(shí)子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*void delay(uint t)
{
uint i;
while(t--)
{
  for(i=0;i<125;i++){}
}
}*/

  /*------------------------------------------------
                   取編碼器位置值子程序
------------------------------------------------*/  

long GetSSI(void)
{
         static  bit  Curr_encoder_b;  //定義一個(gè)變量來(lái)儲(chǔ)存當(dāng)前B信號(hào)
   static  bit  Last_encoder_b;  //定義一個(gè)變量來(lái)儲(chǔ)存上次B腳信號(hào)
   static  bit  updata= 0;
   if( PINA && PINB)           //編碼器無(wú)轉(zhuǎn)動(dòng)退出
   {
     updata = 0;
     return;
   }
   Last_encoder_b = PINB;       //記錄B信號(hào)
   while(!PINA)                //等待A由低變高
   {
     Curr_encoder_b = PINB;     //記錄等待期間的B信號(hào)(指當(dāng)前B信號(hào))
     updata = 1; }
   if(updata)
   {
   updata = 0 ;
     if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B從0到1為正轉(zhuǎn)
     {
   if(counter == 255)
       return;
       counter++;          //正轉(zhuǎn)計(jì)數(shù)加
     }
     else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B從1到0為反轉(zhuǎn)
     {
       if(counter == 0)
       return;
       counter--;         //反轉(zhuǎn)計(jì)數(shù)減
}
  }          
  }
          
//LED 共陽(yáng)

void main()
{
           //設(shè)置定時(shí)器模式
        TMOD = 0x01;        //設(shè)置定時(shí)器模式
        TL0 = (65636-50000)/256;                //設(shè)置定時(shí)初值
        TH0 = (65636-50000)%256;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志

        TR0 = 1;                        //定時(shí)器0開(kāi)始計(jì)時(shí);                       

                        //啟動(dòng)定時(shí)器2
   counter = 0;   


  while(1)
  {
       b=GetSSI();//取絕對(duì)值編碼器位置數(shù)據(jù)

            led_buf[3]=b/1000;//千位
                        led_buf[2]=(b%1000)/100;//百位
                        led_buf[1]=(b%100)/10;//十位
                        led_buf[0]=b%10;        //個(gè)位
   //將數(shù)據(jù)的各位數(shù)字放入指定緩沖區(qū)

   P0 = disp_buff[led_buf[3]];   //取顯示數(shù)據(jù),千位段碼
           LED1 = 0;         //點(diǎn)亮LED1(千位)
           delay(200);       //延時(shí)一小段時(shí)間
           LED1 = 1;         //熄滅LED1

           P0 = disp_buff[led_buf[2]];   //取顯示數(shù)據(jù),段碼
           LED2 = 0;         //點(diǎn)亮LED2(第二位百位)
           delay(200);       //延時(shí)一小段時(shí)間
           LED2 = 1;         //熄滅LED2

           P0 = disp_buff[led_buf[1]];   //取顯示數(shù)據(jù),段碼
           LED3 = 0;         //點(diǎn)亮LED3(第三位十位)
           delay(200);       //延時(shí)一小段時(shí)間
           LED3 = 1;         //熄滅LED3

           P0 = disp_buff[led_buf[0]];   //取顯示數(shù)據(jù),段碼
           LED4 = 0;         //點(diǎn)亮LED4(第四位)
           delay(200);       //延時(shí)一小段時(shí)間
           LED4 = 1;         //熄滅LED4
//  delay(300);
  }

}



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

使用道具 舉報(bào)

沙發(fā)
ID:61390 發(fā)表于 2016-8-11 18:38 來(lái)自手機(jī) | 只看該作者
樓主問(wèn)題解決了嗎,我也正要
回復(fù)

使用道具 舉報(bào)

板凳
ID:105206 發(fā)表于 2016-8-11 19:02 | 只看該作者
這是我的代碼:
如下:改改
#include<reg52.h>
#include "intrins.h"
#include "delay.h"
#include"Drive_parallel.h"


#define uint8 unsigned char         //宏定義
#define uint unsigned int         //宏定義
#define uchar unsigned char         //宏定義
#define DataPort P0         //數(shù)據(jù)口
sbit bianmaqiZ=P1^3;          //編碼器Z線
sbit fuwei=P3^5;  //復(fù)位口
sbit BMQshuruB=P3^2; //輸入口接編碼器B線
sbit DIR=P3^3;    //比較口接編碼器A線

int i,count;
long bianma;//編碼
uchar code line1_data[]={"  編碼器測(cè)試   "};
uchar code line2_data[]={"計(jì)數(shù):          "};
///////////////////////////////////////
void  lcd_pos(uchar X,uchar Y)
{                          
  uchar  pos;
  if (X==1) {X=0x80;}
  else if (X==2) {X=0x90;}
  else if (X==3) {X=0x88;}
  else if (X==4) {X=0x98;}
  pos = X+Y ;
  lcd_wcmd(pos);     //顯示地址
}
///////////////////////////////////////
void display()        // 開(kāi)機(jī)頁(yè)面
{
        lcd_clr();
        lcd_pos(1,0);
        for(i=0;i<16;i++)
        {
                lcd_wdat(line1_data[i]);
                delay_ms(1);
        }
        lcd_pos(3,0);
        for(i=0;i<16;i++)
        {
                lcd_wdat(line2_data[i]);
                delay_ms(1);
        }
}
void bianma_display() //顯示計(jì)數(shù)
{
        lcd_pos(3,4);
        lcd_wdat(bianma/10000%10+0x30);
        lcd_wdat(bianma/1000%10+0x30);
        lcd_wdat(bianma/100%10+0x30);
        lcd_wdat(bianma/10%10+0x30);
        lcd_wdat(bianma%10+0x30);
}
////////////////////////////////////////////
void main()
{
        lcd_init();//初始化
        lcd_clr(); //清屏
        display(); //開(kāi)機(jī)頁(yè)面
        bianma=0;
        EA=1;      //開(kāi)總中斷
        EX0=1;     //外部中斷0打開(kāi)
        IT0=1;     //等于0為電平觸發(fā)方式,低電平有效,等于1為脈沖觸發(fā)方式,下降沿有效.       
        while(1)
        {
                 
                if(!fuwei||bianma>999000||bianma<0)
                {
                        bianma=0;bianmaqiZ=0;
                        bianma_display();
                }
               
                bianma_display();

        }
}

/*中斷函數(shù),編碼器AB進(jìn)入單片機(jī)時(shí)要通過(guò)高速光耦隔離,
        INT0與INT1口10K上拉電阻接+5V*/
void int0() interrupt 0
{
        EX0=0;//外部中斷0關(guān)閉//等于0為電平觸發(fā)方式,低電平有效,等于1為脈沖觸發(fā)方式,下降沿有效,
        if(DIR){count--; }//中斷計(jì)數(shù)---正轉(zhuǎn)時(shí),A為下降沿,B為高電平
        else count++;
        if(!BMQshuruB)bianma++;         //中斷計(jì)數(shù)---反轉(zhuǎn)時(shí),A為下降沿,B為低電平
       
        EX0=1;//外部中斷0打開(kāi)
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91视频91| 日本一区二区高清视频 | 日韩在线欧美 | 日韩一区二区在线视频 | 欧美一区不卡 | 伊人色综合久久久天天蜜桃 | 九九热这里 | 国产线视频精品免费观看视频 | 国产精品爱久久久久久久 | 欧美a√ | 看一级毛片视频 | 人人种亚洲 | 免费观看www | 午夜视频免费网站 | 99精品欧美一区二区三区综合在线 | 国产一区二区影院 | 精品国产乱码久久久久久丨区2区 | 激情婷婷 | 国产乱码久久久久久 | 欧洲一区二区三区 | 天天综合永久 | 亚洲国产自产 | 日韩欧美亚洲一区 | 国产成人精品一区二 | 99久久国产综合精品麻豆 | 亚洲高清久久 | 欧美五月婷婷 | 久久免费国产 | 99久久精品国产麻豆演员表 | 99热都是精品 | 2019天天操 | 国产98色在线 | 日韩 | 一区二区国产在线观看 | 99久久视频 | 精品国产一区二区三区久久狼黑人 | 99福利在线观看 | 一区免费 | 亚洲久视频| 国产精品视频网站 | 精品视频一区二区三区 | 91传媒在线播放 |