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

C51單片機(jī)學(xué)習(xí)手記之1:一盞閃爍的LED

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年05月21日   【字體:

  最近開始學(xué)習(xí)C51單片機(jī),可謂磕磕絆絆,因?yàn)楸救吮容^笨笨啦...(聽聽Michael Jackson的《Heal The World》就堅(jiān)持下來了),不知道對(duì)大家是否有用...

閑言碎語不要講,下面我就來說說這邁出的第一步,我從2010年才接觸到單片機(jī),想想比別人晚了10多年,不過沒關(guān)系,只要有心學(xué)習(xí),從0-1很難,但從1到100、1000、...可能就沒有那么麻煩了。主要要自學(xué)單片機(jī)原理、電子線路、匯編語言,C語言,如果你剛好學(xué)過,那就恭喜啦。
本文旨在介紹單片機(jī)入門的基礎(chǔ)知識(shí),為和我一樣的新手提供一個(gè)交流的平臺(tái)。仿真所使用單片機(jī)為ATMEL公司的AT89C52,軟件為PROTEUS和KEIL;只提供原理圖和KEIL環(huán)境下的注釋,希望對(duì)廣大即將接觸單片機(jī)的人有所幫助,如果有錯(cuò)誤歡迎回帖指出與本人交流或QQ聯(lián)系(93542746),共同進(jìn)步。
一盞閃爍的LED


 

本人用Proteus畫得原理圖如下所示,該電路較簡單,在P1.7上接一個(gè)發(fā)光二極管,為防止電流過大燒壞二極管(LED的Imax=10mA),因此接了一個(gè)限流電阻。單片機(jī)31引腳(EA/Vpp)要接高電平,因?yàn)閱纹瑱C(jī)訪問的是下載到單片機(jī)內(nèi)部的程序。
原理圖:
 
匯編程序:
      org 000h
      ajmp main
      org 003h
main:   mov P1,#07fh ;7fh的二進(jìn)制數(shù)為01111111,P1.7輸出低電平
      acall del  ;調(diào)用延時(shí)子程序
      mov p1,#0ffh ;ffh的二進(jìn)制數(shù)為11111111,P1.7輸出高電平
      acall del
      ajmp main
del:    mov r5,#04h
del1:   mov r6,#0ffh
del2:   mov r7,#0ffh
del3:   djnz r7,del3 ;r7中內(nèi)容減1后判斷,為0,向下執(zhí)行;不為0,執(zhí)行本身
      djnz r6,del2
      djnz r5,del1 ;共做04h*ffh*ffh次減1,即4*256*256次
      ret
      end
C程序:
#include <reg52.h>  //通用89C52頭文件
/*************************************************************
* IO定義 *
/*************************************************************/
sbit LED    =   P1 ^ 7;  
//定義P1.7為LED控制口,低電平LED亮
/*************************************************************
* 毫秒級(jí)延時(shí)函數(shù) *
調(diào)用函數(shù)必須給延時(shí)函數(shù)一個(gè)0~65535的延時(shí)值對(duì)應(yīng)0MS到65535MS
備  注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
/*************************************************************/
void Delay (unsigned int a){    //需要輸入變量值0~65535
  unsigned int i;
  while( --a != 0){     //i 從0加到125,CPU大概就耗時(shí)1毫秒
    for(i = 0; i < 125; i++); //空指令循環(huán)  
  }
}
/*************************************************************
* 主函數(shù) *
/*************************************************************/
void main (void){  
 while(1){   //無限循環(huán)以下程序
  LED = ~LED;  //取LED相反狀態(tài)
  Delay(150);  //延時(shí)150ms
 }     //(0~65535之間)
}
仿真效果圖:
 
關(guān)閉窗口

相關(guān)文章

51Hei缂傚倷绶¢崰妤呭磿閹惰棄绠圭憸鏃堢嵁閹烘惟闁靛ǹ鍎抽ˇ锟�