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

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

51系列-C語言控制逐級娛樂

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


 

 













 

注意51系列8bit)一個字節(jié),應用匯編語言簡潔高效。16位的處理器需要用0000 0000H 表示。1632位以上,使用操作系統(tǒng)(WinCE、Linux等)更有效,可以利用大量的、底層的、專業(yè)化、標準化的面向控制的庫函數(shù)(如:API等)。高級語言具有對底層硬件的無關性,則可移植性好、可重用性好;高級語言描述控制更接近人的自然語言,可描述性好,表達力好。Linux的代碼與模塊的開放性、可剪裁性、自我構造等特點使其前景廣闊。

1.單個LED燈,單個按鍵

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

//預處理命令

#include   

#define uchar unsigned char

#define uint unsigned int

//聲明變量

    sbit LED1_0=P1^0;     // #define 頭文件中沒有定義的I/O,在此由用戶定義

    sbit LED2_0=P2^0;

//延時子程序 這是一個常用的模塊,可視為標準程序段,

 void  Delayms(uint x)

 {

  uchar  i;

  while(x--)    //X每循環(huán)一次,自動減1,直至X1,終止循環(huán)

  {

  For (i=0;i<120;i++);

    }

 }

 //主程序

              void main()

              {

                  while(1)

                {

                 LED2_0=P2^0;

                 LED1_0=LED2_0;

                 Delayms(200);  //這里的200就是X的值― Delayms(uint x)― while(x--)

                }

              }

程序說明

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

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

 

#include

#include <> //預處理命令

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

 {

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

  

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

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

P1_0 = 0;         //賦值語句,設 P1.0 口為低電平0,點亮 LED

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

P1_0 = 1;             // P1.0 口為高電平,熄滅 LED

   }

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

}

 

2.多個LED燈,單個按鍵

對于多個LED燈(LED數(shù) < 8個)來說,在硬件連接方面、軟件編寫方面均沒有大的難點。按照單個LED的連接方式增加便可?刂瞥绦蚓帉懟旧弦彩侵貜托怨ぷCOPY簡單修改即可。

對于LED數(shù)> 8個且不能被8整除的需要用位操作指令。

對于LED數(shù)> 8個的情況,需要解決兩個方面的問題。一個是硬件的連接方法,一個是控制程序的編寫指令用詞方法。硬件方面可以用單個或多個成組的LED多個或總線接口、單個接口擴展等。程序編寫則可以使用重復性工作、可以使用字節(jié)命令而摒棄位命令,使得程序簡潔、可讀性好、硬件運行效率高。

對于LED數(shù)= 8個或是8的倍數(shù)的情況,硬件方面可以用單個或多個成組的LED多個或總線接口、單個接口擴展等。程序編寫則可以使用重復性工作、可以使用字節(jié)操作指令而摒棄位操作指令,使得程序簡潔、可讀性好、硬件運行效率高。

 

#include < reg51.h >

#include <> //預處理命令

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

 {

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

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

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

P1_0 = 0;         //位賦值語句,設 P1.0 口為低電平0,點亮 LED

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

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

P1_0 = 1;             // P1.0 口為高電平,熄滅 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

   }

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

}

 

程序說明

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

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

P1=1;      // P18位置低電平,關閉8LED

對于多燈的情況,可以使用多個數(shù)據(jù)口來進行系統(tǒng)設計(也可單口擴展),在圖2系統(tǒng)的基礎上,添加P3口為一個字節(jié)形式的輸出口。用LED組件的形式顯示輸出要求。

改造結果如圖3所示。

 

#include

#define uchar unsigned char

#define uint unsigned int

//聲明變量

    sbit LED1_0=P1^0; sbit LED1_1=P1^1; sbit LED1_2=P1^2; sbit LED1_3=P1^3;// sbit LED1_4=P1^4;  sbit LED1_5=P1^0;

    sbit LED2_0=P2^0;

 

//延時子程序

 void  Delayms(uint x)

 {

  uchar i;

  while(x--)

  {

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

  }

 }

 //主程序

              void main()

              {

                {

                 if(LED2_0!=1)

                    P3=0xff;

               else

                    P3=0x00;

                LED2_0=P2^0;

                 LED1_0=LED2_0;

                 LED1_1=LED2_0;

                 LED1_2=LED2_0;

                 LED1_3=LED2_0;

                 Delayms(100);

                }

                 return;

              }

程序說明:

上面的單片機系統(tǒng)和C語言控制指令,很容易被更改為多口、多位的單鍵控制系統(tǒng)。圖3為多個LED-單個按鍵的運行結果與C語言。圖中對P2.0口采用了雙擲開關,實現(xiàn)P2.0口的兩種電平狀態(tài)。

 

3.LED循環(huán)問題(跑馬燈、流水燈):

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

先通過單個燈的閃爍來體驗C語言描述單口或多口(位)的高低電平變換。

n  無開關單燈閃爍

 

n  無開關多燈閃爍

 

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

 

 

 

 

#include

#include

#define uchar unsigned char

#define uint unsigned int

//聲明變量 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH

  uchar code LiuSHui[]={0x7F,0xfb,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7F,0xfb,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

       sbit LED2_0=P2^0;                      

//延時子程序

 void  Delayms(uint x)

 {

  uchar t;                                                               

  while(x--)

  {

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

  }

 }

 //主程序

              void main()

              {

               uchar i=0;

                {         

                if(LED2_0!=1)

                {

                   loop:

                    P3=~LiuSHui[i];

                       i=(i+1);

                       Delayms(100);

                      goto loop;

                }

               else

                      P3=0x00;

          if(LED2_0=1)

               {

                     P1=0x00;

                Delayms(100);

               }

                  

                else

                      P1=0xff;

                }

                return;

              }

 

4.多數(shù)碼管

對于多個數(shù)碼管的情形,需要注意通過控制

#define LEDS 4

#include"reg51.h"

//led Tiffl1

unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10};//,0x20};

//unsigned char code Select[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};

unsigned char code LED_CODES[]=

{ 0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,//0-9

0x88,0x83,0xC6,0xA1 ,0x86,0x8E,0xFF,0x0C,0x89,0x7F,0xBF//A,...F,空格,P,H,.,-

};

void main()

{

char i=0;

long int j;

long int n;

while(1)

{

P2=0;

 P2=LED_CODES[n];

//P1=1;

P1=Select[i];

for(j=20000;j>0;j--);

i++;

if(i>4) i=0;

 

n++;

if(n>15) n=0;

}

}

 

                                                       

                                                        51系列-C語言逐級深入練習

 

5.單個LED燈,單個按鍵

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

#include

#include <> //預處理命令

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

 {

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

  

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

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

P1_0 = 0;         //位賦值語句,設 P1.0 口為低電平0,點亮 LED

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

P1_0 = 1;             // P1.0 口為高電平,熄滅 LED

   }

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

}

 

程序說明

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

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

 

6.多個LED燈,單個按鍵

#include

#include <> //預處理命令

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

 {

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

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

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

P1_0 = 0;         //位賦值語句,設 P1.0 口為低電平0,點亮 LED

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

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

P1_0 = 1;             // P1.0 口為高電平,熄滅 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

   }

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

}

 

程序說明

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

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

P1=1;      // P18位置低電平,關閉8LED

 

#include

#include <> //預處理命令

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

 {

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

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

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

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

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

P = 1;             // P1 口為高電平,熄滅 LED

   }

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

}

 

 

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

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

 

#include

#include <> //預處理命令

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

 {

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

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

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

P1_0 = 0;         //位賦值語句,設 P1.0 口為低電平0,點亮 LED

P1_1 = 1;

P1_2 = 1;

P1_3 = 1;

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

P1_0 = 1;             // 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;             // 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 <> //預處理命令

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

 {

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

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

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

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

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

P = 1;             // P1 口為高電平,熄滅 LED

   }

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

}

關閉窗口

相關文章