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效果并不是太好。

猜你喜欢

转载自blog.csdn.net/weixin_45488643/article/details/105930438