51單片機點亮LED和使用定時器中斷控制蜂鳴器發聲

  初學51單片機第一個實驗一般都是以點亮LED燈開始,以下是使用Proteus仿真軟件的實驗效果。
  實驗需要仿真儀器:
  示波器、LED、電壓表、蜂鳴器、AT89C51

實驗電路圖:

在這裏插入圖片描述

實驗代碼:

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i = 0;
sbit buzzer = P2^1;
sbit led=P2^0;		 //將單片機的P2.0端口定義爲led

void delay(uint i)
{
	while(i--);	
}

//定時器T0初始化
void Timer0init()
{   //設置T0
    TMOD|=0X01; //選擇爲定時器0模式,工作方式1,僅用TR0打開啓動
    TH0=0x0F8;	//給定時器賦初值,定時0.5ms  
    TL0=0x30;	 
    ET0=1;      //打開定時器0中斷允許 
    EA=1;       //打開總中斷
    TF0=0;      //溢出位清零 
    TR0=1;      //打開定時器	
}
void Timer0() interrupt 1
{
		uchar count;
    TH0=0x3c;	//給定時器賦初值
    TL0=0xb0;
		count++;	//計時變量加
		if(count==10)//定時器定時是50ms,此處計數10次,正好是500ms
		{
			buzzer = ~buzzer;
			delay(10);
			count = 0;
			TR0 = 0;
		}
		TR0 = 1;
    
}


void main(void)
{   
		Timer0init();   //定時器T0初始化 	
    while(1)
	{
		led=1;
		delay(50000); //大約延時450ms
		led=0;
		delay(50000); //大約延時450ms	
	}		 
}

效果截圖:

在這裏插入圖片描述
從示波器可以看出,這次中斷產生的PWM效果並不是太好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章