天天看點

51學習第二天--二、流水燈設計、蜂鳴器發聲(延遲程式,子程式)

二、流水燈設計、蜂鳴器發聲

1.簡單延時程式:

  1. 利用while()循環達到一個延時的效果

#include<reg52.h>

void main()

{

   sbit D1=p1^0;//表示聲明變量,令p0口等于D1

   int=a;

   while(1)//這是一個死循環

  {

      a=500;//表示時間延遲

     D1=0;//表示是低電平即燈滅

     while(a--);//表示a自減到0執行下面程式

     a=500;

    D1=1;

     while(a--);

   }

}

2. 子程式調用:

  1. 先設計一個延遲函數,然後直接調用!

#include<reg52.h>

#define uint  unsigned char//這是宏定義,以後再用char直接輸入ucahr不用再聲明!

#defne uint unsigned int

sbit D1=P1^0;

void delay();//主函數調用子函數,先聲明函數,沒有參數的函數!

void main()

{

  D1=0;

  delay();

  D1=1;

  delay();

}

void delay()//這是一個延時函數控制x,y可以控制延時時間!不帶參數!

{

uint x,y;

for(x=100;x>0;x--)

           for(y=200;y>0;y--)

}

  1. 有參數子函數:比較友善調節。

#include<reg52.h>

#define uint  unsigned char//這是宏定義,以後再用char直接輸入ucahr不用再聲明!

#defne uint unsigned int

sbit D1=P1^0;

void delay(uint z);//主函數調用子函數,先聲明函數,有參數的函數!

void main()

{

D1=0;

delay(600);

D1=1;

delay(600);

}

void delay(uint z)//這是一個延時函數控制x,y可以控制延時時間!帶參數!

{

uint x,y;

for(x=100;x>0;x--)

        for(y=z;y>0;y--)

}

3. 流水燈設計

  1. 一個流水燈是8個,對應8位,二進制表示:1111 1110 ~1111 1101~1111 1011~~~這樣就形成流水燈了(0是亮)
  2. 這個時候需要調用左移函數:實作實作上面的流水

#include<reg52.h>

#include “instrins.h//左移函數頭檔案

#define uchar  unsigned char//這是宏定義,以後再用char直接輸入ucahr不用再聲明!

#defne uint unsigned int

 uchar=temp;//定義一個八位的變量

void delay(uint z);//主函數調用子函數,先聲明函數,有參數的函數!

void main()

{

    temp=0xfe;//0xfe即:1111 1110把P1口定義

    P1=temp;

    while(1)

    {

    temp=_crol_(temp,1);//調用左移函數

    delay(1000);

    P1=temp;

    }

}

void delay(uint z)//這是一個延時函數控制x,y可以控制延時時間!帶參數!

{

uint x,y;

for(x=z;x>0;x--)

        for(y=z;y>0;y--)

}

4. 蜂鳴器設計

  1. pnp三極管:當b給低電平,此時ec電路同形成壓降,蜂鳴器響。當b給高電平,沒有壓降不響。(b是由單片機控制的)
51學習第二天--二、流水燈設計、蜂鳴器發聲(延遲程式,子程式)

方法:直接控制蜂鳴器io口即可!

#include<reg52.h>

#include “instrins.h//左移函數頭檔案

#define uchar  unsigned char//這是宏定義,以後再用char直接輸入ucahr不用再聲明!

#defne uint unsigned int

 uchar=temp;//定義一個八位的變量

sbit feng=P2^3;//P2口的第三位時蜂鳴器口

void main()

{

    temp=0xfe;//0xfe即:1111 1110把P1口定義

    P1=temp;

    feng=0;//此時蜂鳴器一直響,且流水燈走起來!

   while(1)

      {

      temp=_crol_(temp,1);//調用左移函數

      delay(60);

      P1=temp;

       }

}

void delay(uint z)//這是一個延時函數控制x,y可以控制延時時間!帶參數!

{

uint x,y;

for(x=100;x>0;x--)

        for(y=z;y>0;y--)

}

加油!!!你一定行!

繼續閱讀