欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機定時器計數程序 [打印本頁]

作者: quick910    時間: 2019-10-30 15:53
標題: 51單片機定時器計數程序
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1 = P1^0;                   //加
sbit k2 = P1^1;                   //減
sbit k3 = P1^2;                   //復位
void key(void);
void display(void);

//uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
//0x7f,0x6f};           //數組共陰
                                     //0     1  2    3    4    5    6     7   
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
//8          9
0x80,0x90};        //數組共陽


char m=0,n=0;                                //顯示初值,m,n的值決定開機顯示數值
//****************************************
//延時程序
//****************************************
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
//***********************************************
//顯示程序
//***********************************************
void display(void)
{
        P2=0XFE;
        P0=table[m%10];   //顯示個位
        delayms(5);  
        P2=0XFD;
        P0=table[m/10];   //顯示十位
        delayms(5);                                                              
        P2=0XFB;
        P0=table[n%10];   //顯示百位
        delayms(5);
        P2=0XF7;
        P0=table[n/10];   //顯示千位
        delayms(5);
}

//***************************************************
//按鍵處理
//***************************************************
void key()
{
  if(k1==0)                                         //檢測按鍵是否被按下
   {                                                 //延時消抖
     delayms(10);                        
     if(k1==0)                                 //再次檢測是否真正按下按鍵
      {
        m++;                                         //m自加一
        if(m>=100)                         //如果m加到100則n加一 (限制m的取值范圍) 個位、十位最大顯示99
         {
          n++;                                 //n自加一
          m=0;                                 //使m又從0開始計數
          if(n>=100)                         //如果n加到100則m=n=99 (限制n的取值范圍) 百位、千位最大顯示99
           {
            m=99;                                 //最大顯示9999
            n=99;
           }
          }
        }
        while(!k1);                                 //按鍵松開
   }

  if(k2==0)                                         //檢測按鍵是否被按下
   {                                                 //延時消抖
           delayms(10);                         //再次檢測是否真正按下按鍵
        if(k2==0)
        {                                                 //m自減一
          m--;
          if(m<=0)                                 //如果m減到0則n減一 (限制n的取值范圍) 個位、十位最小顯示00
          {                                                
            m=99;                                 //重新給m裝初值
                  n--;                                 //n自減一
                if(n==-1)                         //如果n減到-1,則m=n=0 (限制n的取值范圍) 百位、千位最小顯示00
                {
                 n=0;                                 //最小顯示0000
                 m=0;
                }
          }
        }
        while(!k2);                                 //按鍵松開
   }

if(k3==0)                                         //檢測按鍵是否被按下
{
   delayms(10);                                 //延時消抖
   if(k3==0)                                 //再次檢測是否真正按下按鍵
   {
     m=0;                                         //復位,顯示0000
     n=0;
   }
   while(!k3);                                 //按鍵松開
}
}

void main()
{
  while(1)
  {                                                         //調用按鍵檢測
   key();                                         //數碼管顯示
   display();
  }

}        






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1