專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51系列-C語言程序詳解

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月19日   【字體:

 1.單個LED燈,單個按鍵

//C語言的頭文件    //這是第一種注釋方式;

#include

#include <> //預(yù)處理命令

 void main(void)                //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型

 {

 unsigned int a;           //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾

  

  do{                            //do-while 組成的循環(huán)過程,過程的開始

 for (a=0; a<500; a++);  //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句

P1_0 = 0;         //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1;             //設(shè) P1.0 口為高電平,熄滅 LED

   }

 while(1);            //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷

}

 

程序說明:

While(條件語句) 與 for(條件語句) 單獨使用所表達的循環(huán),是在句首先執(zhí)行判斷,為真循環(huán),為假轉(zhuǎn)下一句執(zhí)行。其中語句的括號內(nèi)為判斷條件語句。

Do-while合用,是需要對do的過程再進行一次判斷。While(條件語句)為真循環(huán),為假跳轉(zhuǎn)。while(1)表示高電平為真循環(huán)do,否則,低電平跳轉(zhuǎn)。由于P1.0 口為高電平結(jié)尾,因此,又回到do再循環(huán),無限反復(fù)。

 

2.多個LED燈,單個按鍵

#include

#include <> //預(yù)處理命令

 void main(void)                //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型

 {

 unsigned int a;           //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾

    do{                            //do-while 組成的循環(huán)過程,過程的開始

 for (a=0; a<500; a++);  //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句

P1_0 = 0;         //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1;             //設(shè) P1.0 口為高電平,熄滅 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

   }

 while(1);            //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷

}

 

程序說明:

每個口用位賦值指令來開關(guān)P1口的各個LED?梢杂米止(jié)賦值指令一次性的開關(guān)8位P1口LED。

P1=0;     //P1口8位置低電平,點亮8個LED

P1=1;      // P1口8位置低電平,關(guān)閉8個LED

 

#include

#include <> //預(yù)處理命令

 void main(void)                //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型

 {

 unsigned int a;           //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾

    do{                            //do-while 組成的循環(huán)過程,過程的開始

 for (a=0; a<500; a++);  //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句

P1 = 0;         //字節(jié)賦值語句,設(shè) P1 口為低電平—置0,點亮 8個LED

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P = 1;             //設(shè) P1 口為高電平,熄滅 LED

   }

 while(1);            //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷

}

 

 

l  LED循環(huán)問題(跑馬燈):

每個口用位賦值指令來開關(guān)P1口的各個LED,用位指令賦值順序開關(guān),實現(xiàn)跑馬燈。

 

#include

#include <> //預(yù)處理命令

 void main(void)                //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型

 {

 unsigned int a;           //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾

    do{                            //do-while 組成的循環(huán)過程,過程的開始

 for (a=0; a<500; a++);  //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句

P1_0 = 0;         //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1;             //設(shè) P1.0 口為高電平,熄滅 LED

P1_1 = 0;

P1_2 = 1;

P1_3 = 1;

 

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1; 

P1_1 = 1;

P1_2 = 0;

P1_3 = 1;

 

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1;

P1_1 = 1;

P1_2 = 1;

P1_3 = 0;

 

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P1_0 = 1;             //設(shè) P1.0 口為高電平,熄滅 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

 

   }

 while(1);            //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷

}

 

用循環(huán)語句實現(xiàn)跑馬燈,需要使用數(shù)組—表data。每個字節(jié)--8位來表達P1口各個位的電平高低,也就是亮與滅。

 

#include

#include <> //預(yù)處理命令

 void main(void)                //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型

 {

 unsigned int a;           //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾

    do{                            //do-while 組成的循環(huán)過程,過程的開始

 for (a=0; a<500; a++);  //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句

P1 = 0;         //字節(jié)賦值語句,設(shè) P1 口為低電平—置0,點亮 8個LED

for (a=0; a<500; a++);        //這又是一個判斷循環(huán)

P = 1;             //設(shè) P1 口為高電平,熄滅 LED

   }

 while(1);            //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷

}

3.  鍵盤與數(shù)碼管
 

//鍵盤掃描法--數(shù)碼管顯示鍵值。行P1.0~3  列P1.4~7

#include

unsigned char code tabyin[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

        0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0到F的16個鍵值

unsigned char code tabyang[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,

0x88,0x83,0xc6,0xa1,0x86,0x8e};//0到F的16個鍵值

//延時函數(shù)

void Delayt(unsigned char t)

{

unsigned char i;

for(t=0;i<=t;t++)

    for(i=0;i<255;i++);

}

//鍵值判斷函數(shù)

bit pkey(void)

{

P1=0xf0;

if(P1!=0xf0)

    {

    Delayt(25);

      if(P1!=0xf0)

      return 1;

      else

      return 0;

    }

else

      return 0;

}

 

//主函數(shù)

void main(void)

{

unsigned char key,j,k,s;

while(1)

  {

    if(pkey()==1)

    {

      P1=0xfe;

    k=0xfe;

      for(j=0;j<4;j++)

       { 

                  s=P1&0xf0;

        switch(s)

         {

            case 0xe0: key=4*j+0; break;

             case 0xd0: key=4*j+1; break;

              case 0xb0: key=4*j+2; break;

               case 0x70: key=4*j+3; break;

            default: break;

         }

       k=(k<<1)|0x01;

       P1=k;

      }

    }

  P2=0x00;

   P3=0xff;

      P3=tabyang[key];

       Delayt(200);

        P2=tabyin[key];

         Delayt(250);

 

  }

}

關(guān)閉窗口

相關(guān)文章