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

QQ登錄

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

搜索
查看: 9543|回復(fù): 0
收起左側(cè)

51單片機(jī)學(xué)習(xí)--常用的單片機(jī)子函數(shù)

[復(fù)制鏈接]
ID:51090 發(fā)表于 2014-9-22 16:09 | 顯示全部樓層 |閱讀模式
//延時(shí)函數(shù)
void delay(unit t)
{
  while(t--);
}

void delayms(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
   for(j=113;j>0;j--);
}


//共陰極數(shù)碼管編碼
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};


//共陰數(shù)碼管顯示函數(shù)
void smg_display(uchar numdis)
{
  uchar shi,ge;
  shi=numdis/10;
  ge=numdis;

  dula=1;
P0=table[shi];           //送段選數(shù)據(jù)
  dula=0;
P0=0xff;                 //送段選數(shù)據(jù)前關(guān)閉所有顯示,防止打開(kāi)位選鎖存時(shí)
wela=1;                  //原來(lái)原來(lái)段選數(shù)據(jù)通過(guò)位選鎖存器造成混亂
P0=0xfe;                 //送位選數(shù)據(jù)
  wela=0;
delayms(5);              //延時(shí)

  dula=1;
  P0=table[ge];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delayms(5);
}


//定時(shí)器0、1初始化函數(shù)
void TR0_init()
{
TMOD=0x01;               //設(shè)置定時(shí)器0為工作方式1(M1M0為01)
TH0=(65536-45872)/256;   //裝初值11.0592M晶振定時(shí)50ms數(shù)為45872
  TL0=(65536-45872)%6;

//TH1=(65536-45872)/256;
//TL1=(65536-45872)%6;
EA=1;                    //開(kāi)總中斷
ET0=1;                   //開(kāi)定時(shí)器0中斷
//ET1=1;                   //開(kāi)定時(shí)器1中斷
TR0=1;                   //啟動(dòng)定時(shí)器0
//TR1=1;                   //啟動(dòng)定時(shí)器1

}


//定時(shí)器0中斷函數(shù)
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;   //重裝初值
  TL0=(65536-45872)%6;
num1++;                  //num每加1次判斷一次是否到20次
if(num==20)              //如果到了20次,說(shuō)明1秒時(shí)間到
  {
   num=0;                 //然后把num清0重新再計(jì)20次
   led1=~led1;            //把發(fā)光管狀態(tài)取反
  }
}


//獨(dú)立鍵盤(pán)按鍵檢測(cè)
void keyscan()
{
  if(key1==0)
  {
   delayms(10);
      if(key1==0)
      {
        num++;
        if(num==60)
        num=0;
       while(!key1);              //等待按鍵釋放
      }
  }

  if(key2==0)
  {
   delayms(10);
      if(key2==0)
      {
        if(num==0)
        num=60;
        num--;
       while(!key2);              //等待按鍵釋放
      }
  }

  if(key3==0)
  {
   delayms(10);
      if(key3==0)
      {
        num=0;
       while(!key3);              //等待按鍵釋放
      }
  }

  if(key4==0)
  {
   delayms(10);
      if(key4==0)
      {
       while(!key4);              //等待按鍵釋放
        delayms(10);
        while(!key4);
        TR0=~TR0;
      }
  }
}

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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