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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4784|回復: 6
打印 上一主題 下一主題
收起左側

52單片機程序改成51的

[復制鏈接]
跳轉到指定樓層
樓主
ID:116352 發表于 2016-4-26 16:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神 本人新手菜鳥一枚  網上找了52的程序不會改51的 求幫助
#include <reg52.h>
sbit     PINA    = P1^0;
sbit     PINB    = P1^1;
sbit     PIND    = P1^2;
unsigned char  display[3];
unsigned char  code  LEDData[ ] =
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00
};
char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節
unsigned char  counter = 0;     //編碼器脈沖計數
unsigned char  n,shift;
/**********************************************************
ms延時子函數
**********************************************************/
void delayms(unsigned int ms)
{
  unsigned char k;
  while (ms--)
  {
    for (k = 0; k < 114; k++)
      ;
  }
}
/**********************************************************
掃描編碼器子函數
在編碼器引腳A為低電平期間:
編碼器引腳B從0到1為正轉,編碼器引腳B從1到0為反轉。
**********************************************************/
void scan_encoder(void)
{
   static  bit  Curr_encoder_b;  //定義一個變量來儲存當前B信號
   static  bit  Last_encoder_b;  //定義一個變量來儲存上次B腳信號
   static  bit  updata= 0;
   if( PINA && PINB)           //編碼器無轉動退出
   {
     updata = 0;
     return;
   }
   Last_encoder_b = PINB;       //記錄B信號
   while(!PINA)                //等待A由低變高
   {
     Curr_encoder_b = PINB;     //記錄等待期間的B信號(指當前B信號)
     updata = 1; }
   if(updata)
   {
   updata = 0 ;
     if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B從0到1為正轉
     {
   if(counter == 255)
       return;
       counter++;          //正轉計數加
     }
     else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B從1到0為反轉
     {
       if(counter == 0)
       return;
       counter--;         //反轉計數減
     }
   }
}
/**********************************************************
主函數
**********************************************************/
void  main(void)
{
   P0 = 0xff;
   P1 = 0xff;
   P2 = 0xff;
   T2CON = 0x00;               //設置T2CON寄存器         
   TH2 = 0xfc;                 //1ms定時
   TL2 = 0x66;
   ET2 = 1;                    //啟用Timer2中斷
   EA = 1;                     //總中斷允許
   TR2 = 1;                    //啟動定時器2
   counter = 0;                //計數單元清零
   while(1)
   {
   scan_encoder();
  if(! PIND)                //當按下旋鈕時
     {
       counter = 0;            //計數單元清零(歸位)
       delayms(10);
     }
   }
}
/*********************************************************
Timer2中斷函數
**********************************************************/
void  timer2() interrupt 5
{
   TR2 = 0;
   TF2 = 0;                         //手工清中斷標志  
   TH2 = 0xfc;                      //1ms定時常數
   TL2 = 0x66;
   if(n >= 3)                       //3位數碼管顯示
   {
     n = 0;
     shift = 0xfe;                  //送位碼初值
     P2 = 0xff;                     //關閉顯示
   }
   else
   {
     display[0] = counter%10;       //個位數據
     display[1] = (counter%100)/10; //十位數據
     display[2] = counter/100;      //百位數據

     if(display[2] == 0)
     {
       display[2] = 0x0a;           //百位為0,不顯示
       if(display[1] == 0)
       display[1]  =0x0a;           //十位為0,不顯示
}
     P0 = LEDData[display[n++]];    //送段碼
     P2 = shift;                    //送位碼
     shift = (shift<<1)|0x01;       //調整位碼
   }

   TR2 = 1;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:116780 發表于 2016-4-26 18:38 | 只看該作者
謝謝樓主
回復

使用道具 舉報

板凳
ID:113802 發表于 2016-4-26 19:34 | 只看該作者
這什么程序我看不懂

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:113802 發表于 2016-4-26 19:34 | 只看該作者
什么程序我都看不懂,可以為我解釋一下么

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:7485 發表于 2016-4-26 20:41 | 只看該作者
52和51的區別主要的有內存不同,8052多了一個T2定時器,片內程序存儲器ROM為8K,片內RAM為256字節,你的這段程序對片內RAM和ROM問題都不大,主要是用到了T2,(T2和T1、T0相比較有些功能比較好用,比如16位自動重裝載,消除了賦初值的誤差。但是你所給的程序里面沒有使用這一功能)。你可以將T2改成T0或T1即可。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:116352 發表于 2016-4-26 21:28 | 只看該作者
ahshmj 發表于 2016-4-26 20:41
52和51的區別主要的有內存不同,8052多了一個T2定時器,片內程序存儲器ROM為8K,片內RAM為256字節,你的這段 ...

首先謝謝  但是我改了  一一對應的改過來 他就不工作的  數碼管一閃一閃的
  P0 = 0xff;
   P1 = 0xff;
   P2 = 0xff;
  
           TMOD &= 0xf1;        //設置定時器模式
        TMOD |= 0x01;        //設置定時器模式
        TL0 = (65636-50000)/256;                //設置定時初值
        TH0 = (65636-50000)%256;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        ET0 = 1;
        TR0 = 1;                //定時器0開始計時;               
        EA = 1;  
                        //啟動定時器2
   counter = 0;                //計數單元清零

   while(1)

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:116352 發表于 2016-4-26 21:29 | 只看該作者
50429334 發表于 2016-4-26 19:34
這什么程序我看不懂

這是一個用52讀取旋轉編碼器的程序

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 高清国产午夜精品久久久久久 | 亚洲精品www | 成人福利视频 | 成人av一区 | 久久久夜夜夜 | 福利片在线观看 | 日韩中文字幕网 | 国产精品毛片一区二区在线看 | 日韩二区三区 | 久久国| 久久久精品视频免费看 | 一区二区三区视频在线观看 | 中文字幕亚洲视频 | 在线天堂免费中文字幕视频 | 99在线国产| jvid精品资源在线观看 | 欧美色图综合网 | 成人午夜高清 | 国产精品国产成人国产三级 | 黄色一级免费 | 国产日韩欧美一区二区在线播放 | 亚洲+变态+欧美+另类+精品 | 美日韩精品 | 亚洲aⅴ | 久久蜜桃资源一区二区老牛 | 欧美精品一区二区三区在线 | 亚洲国产精品久久久久 | 91资源在线 | 久久国产精品一区二区三区 | 欧美成人一区二区 | 最新国产在线 | 成人不卡 | 91精品国产综合久久福利软件 | 日本午夜网站 | 欧美精品91爱爱 | 精品久| 成人久久视频 | 91麻豆产精品久久久久久夏晴子 | 久久精品欧美一区二区三区不卡 | 欧美日韩不卡合集视频 | 色香婷婷 |