歡迎您光臨本站 登入註冊首頁

單片機入門

admin @ 2014-03-14 , reply:0

概述

我們在單片機最小系統上接個LED,看我們能否點亮它!對了,上面也有好幾次提到過單片機最小系統了,所謂單片機最小系統就是在單片機上接上最少的外圍電路元件讓單片機工作。一般只須連接晶體、VCC、GND、R……

我們在單片機最小系統上接個LED,看我們能否點亮它!對了,上面也有好幾次提到過單片機最小系統了,所謂單片機最小系統就是在單片機
上接上最少的外圍電路元件讓單片機工作。一般只須連接晶體、VCC、GND、RST即可,一般情況下,AT89C51的31腳須接高電平。
#include      //頭文件定義。或用#include其具體的區別在於:後者定義了更多的地址空間。
    //在Keil安裝文件夾中,找到相應的文件,比較一下便知!
    sbit P1_0 = P1 ^ 0;
    void main (void)
{
  while(1)
  {
  P1_0 = 0;//低電平有效,如果把LED反過來接那麼就是高電平有效
  }
}

    就那麼簡單,我們就把接在單片機P1_0上的LED點亮了,當然LED是低電平,才能點亮。因為我們把LED的正通過電阻接至VCC。
    P1_0 = 0; 類似與C語言中的賦值語句,即把 0 賦給單片機的P1_0引腳,讓它輸出相應的電平。那麼這樣就能達到了我們預先的要求了。
while(1)語句只是讓單片機工作在死循環狀態,即一直輸出低電平。如果我們要試著點亮其他的LED,也類似上述語句。這裡就不再講了。
    點亮了幾個LED后,是不是讓我們聯想到了繁華的街區上流動的彩燈。我們是不是也可以讓幾個LED依次按順序亮呢?答案是肯定的!其
實顯示的原理很簡單,就是讓一個LED滅后,另一個立即亮,依次輪流下去。假設我們有8個LED分別接在P1口的8個引腳上。硬體連接,在
P1_1--P1_7上再接7個LED即可。常式如下:
#include

sbit P1_0 = P1 ^ 0;
sbit P1_1 = P1 ^ 1;
sbit P1_2 = P1 ^ 2;
sbit P1_3 = P1 ^ 3;
sbit P1_4 = P1 ^ 4;
sbit P1_5 = P1 ^ 5;
sbit P1_6 = P1 ^ 6;
sbit P1_7 = P1 ^ 7;

void Delay(unsigned char a)
{
  unsigned char i;
  while( --a != 0)
  {
  for(i = 0; i < 125; i++);  //一個 ; 表示空語句,CPU空轉。
  }          //i 從0加到125,CPU大概就耗時1毫秒
}

void main(void)
{
  while(1)
  {
  P1_0 = 0;
    Delay(250);
  P1_0 = 1;

  P1_1 = 0;
    Delay(250);
  P1_1 = 1;

  P1_2 = 0;
    Delay(250);
  P1_2 = 1;

  P1_3 = 0;
    Delay(250);
  P1_3 = 1;

  P1_4 = 0;
    Delay(250);
  P1_4 = 1;

  P1_5 = 0;
    Delay(250);
  P1_5 = 1;

  P1_6 = 0;
    Delay(250);
  P1_6 = 1;

  P1_7 = 0;
  Delay(250);
  P1_7 = 1;
  }
}


    sbit 定義位變數,unsigned char a 定義無符字元型變數a,以節省單片機內部資源,其有效值為0~255。main函數調用Delay()函數。
Delay函數使單片機空轉,LED持續點亮后,再滅,下一個LED亮。while(1)產生循環。

 

 

(三)

    上面我們講了如何使LED產生流動,但是你是否發現一個問題:寫的太冗長了!能不能再簡單點呢?可以!可以使用C51的內部函數
INTRINS.H實現。函數unsigned char _crol_(unsigned char a, unsigned char n) 可以使變數a循環左移n位,如果我們先給P1口賦
0000 0001那麼當n為1時,便會產生和上面一樣的效果!
#include
#include

void Delay(unsigned char a)
{
  unsigned char i;
  while( --a != 0)
  {
  for(i = 0; i < 125; i++);
  }
}

void main(void)
{
  unsigned char b, i;
  while(1)
  {
  b = 0xfe;
  for(i = 0; i < 8; i++)
  {
    P1 = _crol_(b, 1);
              b = P1;
    Delay(250);
  }
  }
}

 

    INTRINS.H函數中的unsigned char _cror_(unsigned char a, unsigned char n)右移也可以實現同樣的效果!這裡就不再累述。
    流水燈的花樣很多,我還寫過那種拉幕式的流動等,程序很簡單,有興趣的朋友,可以自己試著寫寫!
    對了,講了那麼多,有些朋友一定還不知道編譯軟體怎麼用?這裡給大家介紹幾個吧?WAVE(偉福)大家一定聽說過吧!還有一個
就是KEIL2,我用的就是KEIL2,下面就來講講如何使用KEIL2這個編譯軟體!
  1.安裝軟體,這個應該不用再講了吧!
  2.安裝完后,啟動KEIL軟體左擊Project-->New Project-->輸入文件名-->選擇我們所以使用的晶元(這裡我們一般用到Atmel的
AT89C51或AT89C2051,點確定。
  3.點File-->New-->輸入我們編寫的程序,保存為.C文件。(一般情況下,我們保存的文件名和前面的工程名一樣。)

  4.展開Target 1 -->右擊Source Group 1 -->Add Files to Group 'Source Group 1'-->選擇剛才保存的.C文件點擊ADD后,關閉對
話框。這樣.C文件就被加到了Source Group 1 下。
  5.右擊Target 1-->Options  for 'Target 1' -->Target中填寫晶體的大小,Output中,在Create HEX Files 前打上鉤,點確

[admin via 研發互助社區 ] 單片機入門已經有2980次圍觀

http://cocdig.com/docs/show-post-341.html