欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51单片机点亮LED和使用定时器中断控制蜂鸣器发声

程序员文章站 2022-06-09 08:58:11
...

  初学51单片机第一个实验一般都是以点亮LED灯开始,以下是使用Proteus仿真软件的实验效果。
  实验需要仿真仪器:
  示波器、LED、电压表、蜂鸣器、AT89C51

实验电路图:

51单片机点亮LED和使用定时器中断控制蜂鸣器发声

实验代码:

#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	
	}		 
}

效果截图:

51单片机点亮LED和使用定时器中断控制蜂鸣器发声
从示波器可以看出,这次中断产生的PWM效果并不是太好。

相关标签: 51单片机