找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

學(xué)習(xí)單片機的13個經(jīng)典實例

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:17888 發(fā)表于 2017-6-3 18:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
學(xué)習(xí)單片機,
//實例1:用單片機控制第一個燈亮


#include<reg51.h>  //包含51單片機寄存器定義的頭文件
void main(void)
  {
    P1=0xfe; //P1=1111 1110B,即P1.0輸出低電平
  }
//實例2:用單片機控制一個燈閃爍:認(rèn)識單片機的工作頻率


#include<reg51.h>    //包含單片機寄存器的頭文件
/                                       
函數(shù)功能:延時一段時間
                                         /
void delay(void)        //兩個void意思分別為無需返回值,沒有參數(shù)傳遞
{
  unsigned int i;       //定義無符號整數(shù),最大取值范圍65535
  for(i=0;i<20000;i++)  //20000次空循環(huán)
        ;               //什么也不做,等待一個機器周期
}
/                                                      
函數(shù)功能:主函數(shù) C語言規(guī)定必須有也只能有1個主函數(shù))
                                                        /
void main(void)
{
  while(1)      //無限循環(huán)
   {
          P1=0xfe;   //P1=1111 1110B, P1.0輸出低電平
          delay();   //延時一段時間
          P1=0xff;   //P1=1111 1111BP1.0輸出高電平
          delay();  //延時一段時間
         }
}


//實例3:將 P1口狀態(tài)分別送入P0、P2、P3口:認(rèn)識I/O口的引腳功能
#include<reg51.h>   //包含單片機寄存器的頭文件
/                                                      
函數(shù)功能:主函數(shù) C語言規(guī)定必須有也只能有1個主函數(shù))
                                                        /

void main(void)
{
    while(1)                   //無限循環(huán)
          {         
                 P1=0xff;        // P1=1111 1111B,熄滅LED
            P0=P1;                // P1口狀態(tài)送入P0
                 P2=P1;                 // P1口狀態(tài)送入P2
       P3=P1;                 // P1口狀態(tài)送入P3
          }
}


//實例4:使用P3口流水點亮8LED
#include<reg51.h>   //包含單片機寄存器的頭文件
/                                       
函數(shù)功能:延時一段時間
                                         /

void delay(void)
   {
          unsigned char i,j;
           for(i=0;i<250;i++)
                 for(j=0;j<250;j++)                  
                   ;
          }
/                                                      
函數(shù)功能:主函數(shù)
                                                        /
void main(void)
{
   while(1)
          {
                   P3=0xfe;   //第一個燈亮
                         delay();   //調(diào)用延時函數(shù)
                         P3=0xfd;   //第二個燈亮
                         delay();   //調(diào)用延時函數(shù)
                        P3=0xfb;   //第三個燈亮
                         delay();   //調(diào)用延時函數(shù)
                        P3=0xf7;   //第四個燈亮
                         delay();   //調(diào)用延時函數(shù)
                        P3=0xef;   //第五個燈亮
                   delay();   //調(diào)用延時函數(shù)
                        P3=0xdf;   //第六個燈亮
                    delay();   //調(diào)用延時函數(shù)
                        P3=0xbf;   //第七個燈亮
                   delay();   //調(diào)用延時函數(shù)
                        P3=0x7f;   //第八個燈亮
                   delay();   //調(diào)用延時函數(shù)  
         }

}

             //實例7:通過對P3口地址的操作流水點亮8LED
#include<reg51.h>   //包含單片機寄存器的頭文件
sfr x=0xb0;   //P3口在存儲器中的地址是b0H, 通過sfr可定義8051內(nèi)核單片機
          //的所有內(nèi)部8位特殊功能寄存器,對地址x的操作也就是對P1口的操作
/                                       
函數(shù)功能:延時一段時間
                                         /
void delay(void)
   {
          unsigned char i,j;
           for(i=0;i<250;i++)
                 for(j=0;j<250;j++)                 
                   ;   //利用循環(huán)等待若干機器周期,從而延時一段時間
          }
/                                         
函數(shù)功能:主函數(shù)
                                          /
void main(void)
{
    while(1)
          {
                    x=0xfe;   //第一個燈亮
                         delay();  //調(diào)用延時函數(shù)
                          x=0xfd;  //第二個燈亮
                         delay();  //調(diào)用延時函數(shù)
                         x=0xfb;  //第三個燈亮
                         delay();  //調(diào)用延時函數(shù)
                         x=0xf7;  //第四個燈亮
                         delay();  //調(diào)用延時函數(shù)
                        x=0xef;   //第五個燈亮
                   delay();  //調(diào)用延時函數(shù)
                        x=0xdf;   //第六個燈亮
                    delay();  //調(diào)用延時函數(shù)
                        x=0xbf;   //第七個燈亮
                   delay();  //調(diào)用延時函數(shù)
                        x=0x7f;   //第八個燈亮
                   delay();  //調(diào)用延時函數(shù)   
        }

}

        //實例8:用不同數(shù)據(jù)類型控制燈閃爍時間
#include<reg51.h>   //包含單片機寄存器的頭文件
/                                                      
函數(shù)功能:用整形數(shù)據(jù)延時一段時間
                                                      /
void int_delay(void) //延時一段較長的時間
{
  unsigned int m;    //定義無符號整形變量,雙字節(jié)數(shù)據(jù),值域為0~65535
  for(m=0;m<36000;m++)
                         ;          //空操作      
}
/                                                      
函數(shù)功能:用字符型數(shù)據(jù)延時一段時間
                                                      /
void char_delay(void) //延時一段較短的時間
{
   unsigned char i,j;   //定義無符號字符型變量,單字節(jié)數(shù)據(jù),值域0~255
        for(i=0;i<200;i++)
          for(j=0;j<180;j++)
                           ;        //空操作
}
/                                                      
函數(shù)功能:主函數(shù)
                                                      /
void main(void)  
{
  unsigned char i;
  while(1)
        {
          for(i=0;i<3;i++)
                 {
             P1=0xfe;     //P1.0口的燈點亮
                  int_delay(); //延時一段較長的時間
                  P1=0xff;     //熄滅
                  int_delay(); //延時一段較長的時間
                 }
     for(i=0;i<3;i++)
                 {
             P1=0xef;     //P1.4口的燈點亮
                  char_delay(); //延時一段較長的時間
                  P1=0xff;     //熄滅
                  char_delay(); //延時一段較長的時間
                 }         

          }

}



//實例9:用P0口、P1 口分別顯示加法和減法運算結(jié)果
#include<reg51.h>
void main(void)   
{  
  unsigned char m,n;
  m=43;     //即十進(jìn)制數(shù)2x16+11=43
  n=60;     //即十進(jìn)制數(shù)3x16+12=60
  P1=m+n;  //P1=103=0110 0111B,結(jié)果P1.3、P1.4、P1.7 口的燈被點亮
  P0=n-m;  //P0=17=0001 0001B,結(jié)果P0.0、P0.4的燈被熄滅
}




//實例10:用P0、P1口顯示乘法運算結(jié)果
#include<reg51.h> //包含單片機寄存器的頭文件
void main(void)  
{
  unsigned char m,n;
  unsigned int s;
  m=64;
  n=71;
  s=m n;       //s=64 71=4544,需要16位二進(jìn)制數(shù)表示,高8位送P1口,低8位送P0
               //由于4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0
                                        //兩邊同除以256,可得17+192/256=H3 16+H2+H1 16+H0/256
                                        //因此,高816進(jìn)制數(shù)H3 16+H2必然等于17,即4544除以256的商
                                        //816進(jìn)制數(shù)H1 16+H0必然等于192,即4544除以256的余數(shù)

  P1=s/256;     //8位送P1口 ,P1=17=11H=0001 0001B, P1.0P1.4口滅,其余亮
  P0=s%256;     //8位送P0, P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口滅,其余亮
}


//實例11:用P1、P0口顯示除法運算結(jié)果
#include<reg51.h>   //包含單片機寄存器的頭文件
void main(void)  
{
  P1=36/5;          //求整數(shù)
  P0=((36%5) 10)/5; //求小數(shù)
  while(1)         
    ;              //無限循環(huán)防止程序“跑飛”
}




//實例12:用自增運算控制P08LED流水花樣
#include<reg51.h>   //包含單片機寄存器的頭文件
/                                                      
函數(shù)功能:延時一段時間
                                                      /
void delay(void)
{
   unsigned int i;   
        for(i=0;i<20000;i++)
            ;
}
/                                                      
函數(shù)功能:主函數(shù)
                                                      /
void main(void)  
{
  unsigned char i;
  for(i=0;i<255;i++)  //注意i的值不能超過255
   {
          P0=i;    //i的值送P0
          delay(); //調(diào)用延時函數(shù)
        }
}



//實例13:用P0口顯示邏輯""運算結(jié)果
#include<reg51.h>   //包含單片機寄存器的頭文件
void main(void)  
{
  P0=(4>0)&&(9>0xab);//將邏輯運算結(jié)果送P0
  while(1)
    ;    //設(shè)置無限循環(huán),防止程序“跑飛”

評分

參與人數(shù) 2黑幣 +10 收起 理由
羅景衡 + 5 共享資料的黑幣獎勵!
259654 + 5 很給力!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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