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

QQ登錄

只需一步,快速開始

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

跑步機(jī)啟停速度控制的單片機(jī)程序+Proteus仿真圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

部分代碼如下:
#include <AT89X52.h>   
unsigned char code SEGtable[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};     //字符編碼
sbit SEKey =  P1 ^ 0;   //啟動(dòng)、暫停和停止按鍵
sbit INCKey = P1 ^ 4;     //速度增加鍵
sbit DECKey = P1 ^ 7;     //速度減少鍵
sbit pauseLED = P3 ^ 0;  //暫停指示燈
sbit stopLED = P3 ^ 7;       //停止指示燈
bit keyFlg;     //按鍵長(zhǎng)按、短按標(biāo)志位 0為短按 1為長(zhǎng)按
unsigned char TimeCounter;     //計(jì)數(shù)專用
unsigned char KeyDownFlg,set;   //按鍵專用
unsigned char yansi,key,send,unitsdData,tensdData,num,keynum;
bit keybz;
//延時(shí)函數(shù)
void delay(unsigned char time)
{
unsigned char x,y;
for(x=time;x>0;x--)
  {
   for(y=110;y>0;y--);
  }
}
//掃描啟動(dòng)、停止、暫停按鍵
void StartAndStopKeyScan()
{
  if(SEKey == 0)     //鍵被按下
{
   KeyDownFlg = 1;     //置鍵按下標(biāo)志位
   TR0 = 1;       //啟動(dòng)定時(shí)器
}

if((SEKey == 1) && (KeyDownFlg == 1))  //判斷設(shè)置鍵是否松開
{
    KeyDownFlg = 0;      //清除鍵標(biāo)志位
  if(keyFlg == 0)    //如果是短按
  {
    stopLED = 1;
    pauseLED =~pauseLED;
   }
   TR0 = 0;       //關(guān)閉定時(shí)器
   TimeCounter = 0;         //計(jì)數(shù)器清零
   keyFlg = 0;      //清除短按、長(zhǎng)按標(biāo)志位
}
}
void SegDisplay(unsigned char tensdData,unsigned char unitsdData)
{
  P0 = SEGtable[tensdData];
   delay(10);
P2 = SEGtable[unitsdData];
   delay(10);
}
void keyscan1()   //具有連加功能的的按鍵掃描程序
{
if(INCKey==0)       //判斷INCKey鍵是否按下?
  {
   SegDisplay(tensdData,unitsdData);     //延時(shí)去抖動(dòng)
   if(INCKey==0)     //如果真接下就去執(zhí)行鍵盤程序
   {
    if(keybz==0)    //判斷是否是第一次按下?
      {
       num++;  //值加一
       if(num==100) //判斷是否加到100
        {num=0;}//加到100清0
       keybz=1; //第一次進(jìn)來置標(biāo)志位
       key--;  //按鍵次數(shù)計(jì)數(shù)器
       keynum=5; //快加按鍵次數(shù)計(jì)數(shù)器
       tensdData=num/10; //BCD碼轉(zhuǎn)為十進(jìn)制值
       unitsdData=num%10;
       return;  //不用檢測(cè)松手直接返回
         
      }
     else    //如果是第二次按下則執(zhí)行下面的語(yǔ)句
     {
      if(key==0)  //判斷按鍵次數(shù)到100次了嗎?  
       {
       if(keynum==0) //檢測(cè)按下時(shí)間是否超過加5次的時(shí)間
        {
         key=10;  //如果按鍵持續(xù)時(shí)間超過加5次的時(shí)間則以后每10次執(zhí)行加工廠操作
         num++;
         if(num==99)
          {
           num=0;
          }
         tensdData=num/10;
         unitsdData=num%10;
         return;
        }
         else  //沒有到5次時(shí)間則執(zhí)行下面的語(yǔ)句
          keynum--; //快加計(jì)數(shù)器減一
          key=100;
          num++;
         if(num==99)
          {
          num=0;
          }
         tensdData=num/10;
         unitsdData=num%10;
         return;
         
       }
      else   //沒有到100次下次再來判斷.
       key--;
       return;
     
     }
         
   }
   if(INCKey!=0)       //松手后所有的計(jì)數(shù)器清并置默認(rèn)值
    {
     keynum=5;
            key=30;
     keybz=0;
     return;      //返回
    }      
  }

全部資料51hei下載地址:
跑步機(jī)啟停速度控制.zip (58.56 KB, 下載次數(shù): 22)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:657167 發(fā)表于 2019-12-8 18:30 | 只看該作者
有沒有相關(guān)的文檔啊?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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