找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機學習--第二章 流水燈設(shè)計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51090 發(fā)表于 2014-9-22 16:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
第二章 流水燈設(shè)計
§2.1  點亮第一個發(fā)光二極管
例2.1.1

#include             //52系列單片機頭文件
sbitled1=P1^0;         //聲明單片機P1口的第一位
voidmain()               //主函數(shù)
{
led1=0;               
}


例2.1.2

#include
void mian()
{
  P1=0xfe;
}


★    reg52.h頭文件的作用
在代碼中引用頭文件,其實際意義就是將這個頭文件中的全部內(nèi)容放到引用頭文件的位置處,免去我們每次編寫同類程序都要將頭文件中的語句重復(fù)編寫.
#include :編譯器先進入到軟件安裝文件夾處開始搜索這個頭文件
#include “reg52.h”:編譯器先進入當前工程所在文件夾處開始搜索這個頭文件

★ 特殊功能位定義sbit   定義sfr的某一位

§2.2   while語句
★    格式:while(表達式)
        {內(nèi)部語句(內(nèi)部可為空)}
特點:先判斷表達式,若不是0,即為真,那么執(zhí)行內(nèi)部語句。否則跳出while語句,執(zhí)行后面的語句。

例2.2.1

#include
void main()
{
  P1=0xfe;
  while(1);
}

§2.3  for語句及簡單的延時語句
★    格式:for(表達式1;表達式2;表達式3)
        {語句(內(nèi)部可為空)}
特點:求解一次表達式1。求解表達式2,若其值為真,則執(zhí)行for中的語句,然后求解執(zhí)行表示3,再回到求解表達式2開始一直循環(huán)。若不是真直接跳出,不執(zhí)行表達式3。

例2.3.1 實驗板上第一個發(fā)光二極管以間隔1s亮滅閃動

#include
#define uint unsignedint      //宏定義
sbitled1=P1^0;                //聲明單片機P1口的第一位
uint i,j;
voidmain()                    //主函數(shù)
{
while(1)                     //大循環(huán)
{
led1=0;                    
for(i=1000;i>0;i--)        //延時程序
  for(j=110;j>0;j--);
led1=1;                    
for(i=1000;i>0;i--)        //延時程序
  for(j=110;j>0;j--);
}
}


★    #define宏定義
格式:#define 新名稱原內(nèi)容

§2.4 不帶參數(shù)函數(shù)的寫法及調(diào)用
voiddelay1s()                  //子函數(shù)體
{
  uint i,j;
for(i=1000;i>0;i--)           // i=1000即延時約1000毫秒
for(j=110;j>0;j--);
}

§2.5 帶參數(shù)函數(shù)的寫法及調(diào)用
void delayms(unsigned int xms)
{
  uint i;j;
for(i=xms;i>0;i--)          // i=xns即延時約xms毫秒
  for(j=110;j>0;j--);
}
例2.5.1 完整程序,讓實驗板上第一個發(fā)光二極管亮200ms、滅800ms

#include          //52系列單片機頭文件
#define uint unsigned int   //宏定義
sbit led1=P1^0;           //聲明單片機P1口的第一位
voiddelayms(uint);        //聲明子函數(shù)
voidmain()               //主函數(shù)
{
while(1)                //大循環(huán)
{
   led1=0;                  
   delayms(200);          //延時200毫秒
   led1=1;                 
   delayms(800);          //延時800毫秒
   }  
}
void delayms(uintxms)            
{
    uinti,j;
   for(i=xms;i>0;i--)     //i=xms即延時約xms毫秒
       for(j=110;j>0;j--);
}


§2.6 利用C51庫函數(shù)實現(xiàn)流水燈
★    移位操作
(1):左移“<<”
每執(zhí)行一次左移指令,被操作的數(shù)將最高位移入單片機PSW寄存器的CY位,CY位中原來的數(shù)丟棄,最低位補0,其他位一次向左移動一位。

(2):右移“>>”
每執(zhí)行一次右移指令,被操作的數(shù)將最低位移入單片機PSW寄存器的CY位,CY位中原來的數(shù)丟棄,最高位補0,其他位一次向右移動一位。

(3):循環(huán)左移。
最高位移入最低位,其他位一次向左移一位。C語言中沒有專門的指令,通過移位指令與簡單邏輯運算可以實現(xiàn)循環(huán)左移,或直接利用C51庫中自帶的函數(shù)_crol_實現(xiàn)。

(4):循環(huán)右移。
最低位移入最高位,其他位一次向右移一位。C語言中沒有專門的指令,通過移位指令與簡單邏輯運算可以實現(xiàn)循環(huán)右移,或直接利用C51庫中自帶的函數(shù)_cror_實現(xiàn)。

★    PSW寄存器
PSW(Program StatusWord)全稱為程序狀態(tài)字標志寄存器。是一個8為寄存器,位于單片機片內(nèi)的特殊功能寄存器區(qū),字節(jié)地址為D0H,用來存放運算結(jié)果的一些特征,如有無進位、借位等。其每位的具體含義如下圖所示。

①CY—進位標志位。它表示運算是否有進位(或借位)。如果操作結(jié)果在最高位有進位(加法)或者借位(減法),則該位為1,否則為0。

②AC—輔助進位標志,又稱半進位標志。它指兩個8位運算低4位是否有半進位,即低4位相加(或相減)是否進位(或借位),如有AC為1,否則為0。

③ F0—由用戶使用的一個狀態(tài)標志位?捎密浖䜩硎顾1或清0,也可由軟件來測試它,以控制程序的流向。

④ RS1,RS0,—4組工作寄存器區(qū)選擇控制位。在匯編語言中這兩位用來選擇4組工作寄存器區(qū)中的哪一組為當前工作寄存區(qū)。

⑤ OV—溢出標志位。反映帶符號數(shù)的運算結(jié)果是否有溢出。有溢出時,此位為1,否則為0。

⑥P—奇偶標志位。反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運算結(jié)果有偶數(shù)個1(如11001100B,其中有4個1),則P為0,否則P為1。


例2.6.1 利用C51自帶的庫函數(shù)_crol_(),以間隔500ms,在實驗板上實現(xiàn)流水燈程序

#include             //52系列單片機頭文件
#include           //包含_crol_函數(shù)所在的頭文件
#define uint unsigned int     //宏定義
#define uchar unsigned char
voiddelayms(uint);            //聲明子函數(shù)
ucharaa;                      //定義一個變量,用來給P1口賦值
voidmain()                  //主函數(shù)
{
aa=0xfe;                   //賦初值11111110
while(1)                   //大循環(huán)
{
P1=aa;                     //先點亮第一個發(fā)光管
   delayms(500);              //延時500毫秒
   aa=_crol_(aa,1);           //將aa循環(huán)左移1位后再賦給aa
}
}
void delayms(uintxms)            
{
uint i,j;
f

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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