當前位置:編程學習大全網 - 編程軟體 - 用C語言編寫,兩個按鈕控制蜂鳴器工作。按鈕1按下,蜂鳴器以500Hz的頻率工作。按鈕2按下,蜂鳴器停止工作

用C語言編寫,兩個按鈕控制蜂鳴器工作。按鈕1按下,蜂鳴器以500Hz的頻率工作。按鈕2按下,蜂鳴器停止工作

#include"reg52.h"

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit?BELL=P1^0;//定義蜂鳴器

sbit?key1=P1^1;//定義按鍵

sbit?key2=P1^2;//定義按鍵

uint?num;

/*1ms廷時*/

void?delay_ms(uint?z)

{

uint?i,j;

for(i=0;i<z;i++)

for(j=0;j<110;j++);

}

/*定時器初始化*/

void?init_timer0()

{

TMOD=0x01;

TH0=(65535-2000)/256;

TL0=(65535-2000)%256;

EA=0;

ET0=1;

TR0=1;

}

void?main()

{

BELL=0;

init_timer0();

while(1)

{

if(key1==0)

{

delay_ms(10);?//延時消抖

if(key1==0) ?//再次判斷按鍵是否真的被按下

{

while(key1==0);//等待釋放按鍵

EA=1; ?//開啟總中斷

}

}

if(key2==0)

{

delay_ms(10);?//延時消抖

if(key2==0) ?//再次判斷按鍵是否真的被按下

{

while(key2==0); ?//等待釋放按鍵

EA=0; ? ?//關閉總中斷

BELL=0; ? ?//關閉蜂鳴器

}

}

}

}

void?timer0()?interrupt?1

{

TH0=(65535-2000)/256;

TL0=(65535-2000)%256;?//中斷計時2ms(500Hz),之所以用中斷是因為定時比較準確?想改延時就把裏面的2000改掉,這個數除以1000得的數就是多少毫秒

num++;

if(num==1) ?//讓蜂鳴器工以?500Hz頻率工作

{

num=0;

BELL=~BELL;

}

}

  • 上一篇:關於應用層軟件開發和系統底層開發的選擇
  • 下一篇:fanuc 18i 系統的加工中心,G83功能指令格式及詳細解釋是什麽?
  • copyright 2024編程學習大全網