/* ch4-3-4.c - 按鈕嗶聲實驗 */
//==宣告區=====================================
#include <reg51.h>  // 包含8051暫存器之標頭檔
#define LED  P2   // 定義LED連接到P2
sbit  PB=P3^7;   // 宣告PB接至P3^7
sbit  buzzer=P3^1;  // 宣告蜂鳴器接至P3^1
void  delay500us(int x);// 宣告0.5ms延遲函數
void  beep(char x);  // 宣告beep嗶聲函數
//==主程式=====================================
main()      // 主程式開始   
{ 
 LED=0xFF;   // 關閉8個LED
 PB=1;    // 規劃PB為輸入埠
 while(1)   // 無窮迴圈,程式一直跑
 { 
  if (!PB)    // 若按下PB
  {
   if (LED==0xFF) LED = 0xFE; // 若LED全不亮,則點亮第1個LED
   else LED=(LED<<1)|1; // 否則單燈左移
   while(!PB); // 若仍按住PB,繼續等
   beep(1); // 嗶一聲
  }    // if敘述結束
 }     // while迴圈結束
}       // 主程式結束
/* 延遲函數(0.5ms) */
void delay500us(int x)  // 延遲函數開始
{ int i,j;    // 宣告變數i,j
 for(i=0;i<x;i++)  // 外部計數迴圈(x*0.5ms)
  for(j=0;j<60;j++); // 內部計數迴圈(0.5ms)
}       // 延遲函數結束
/* 嗶聲函數(1kHz) */
void beep(char x)   // 嗶聲函數開始
{ char i,j;    // 宣告變數i,j
 for(i=0;i<x;i++)  // 產生x個嗶聲
 { for(j=0;j<100;j++) // 重複吸放100次,(0.5ms+0.5ms)*100
  { buzzer=0;delay500us(1); // 蜂鳴器激磁0.5ms
   buzzer=1;delay500us(1); // 蜂鳴器斷磁0.5ms
  }
  delay500us(200); // 靜音0.1s
 }
} 
 
 
 
沒有留言:
張貼留言