其他分享
首页 > 其他分享> > 单片机(ISIS 7 Professional):简易LED警报灯代码项目

单片机(ISIS 7 Professional):简易LED警报灯代码项目

作者:互联网

这一篇文章主要介绍用C语言制作一个按钮控制的简易LED警报灯。

设计思路:这里主要用到了一个新的东西,就是SOUNDER这个发声元件,它的工作原理是需要节拍表和频率表才能发出想要的音乐,网上可以找到其他的音乐我就不再多说了。还有顺时针旋转的警报灯。

基本电路图如下:

使用的代码如下:

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit key1 = P3^2;
sbit BEEP = P3^7;
//音乐音符频率表,不同频率由不同的延时来决定 	
uchar code SONG_TONE[] = {212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};
//音乐节拍表,节拍决定每个音符的演奏长短	
uchar code SONG_LONG[] = {9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,8,3,12,12,12,24,0};

//延时函数		 
void DelayMS(uint x)
{
	uchar t;
	while(x--)
	{
		for(t = 0;t < 120;t++);
	}
}
//播放函数		
void PlayMusic()
{
	uint i = 0,j,k;
	while(SONG_LONG[i] != 0 || SONG_TONE[i] != 0)
	{
		//播放各个音符,SONG_LONG为拍子长度		
		for(j = 0;j < SONG_LONG[i] * 20;j++)
		{
			BEEP =~ BEEP;
			//SONG_TONE延时表决定了每个音符的频率	
			for(k = 0;k < SONG_TONE[i] / 3;k++); 
		}
		DelayMS(10);
		i++;
	}
} 
void main()
{	
	//定时器初始化、中断源初始化、寄存器赋值	
	P2 = 0x00;
	TMOD = 0x01;
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	EA = 1;
	ET0 = 1;							/*开启T0定时器*/ 	
	EX0 = 1;							/*开启外部中断INT0*/	 
	TMOD = 0x01;						/*T0定时最大65536*/		 
	TCON = 0x01;						/*设置边缘触发*/	
	while(1);
	
	BEEP = 0;
	while(1)
	{
		PlayMusic();					/*播放歌曲*/ 	
		DelayMS(500);					/*播放完后暂停一段时间*/	 
	}
}
void EX0_INT0() interrupt 0	
{
	TR0 =! TR0;
	if(P2 == 0x00)
	{
		P2 = 0xE0;
	}
	else
	{
		P2 = 0x00;
	}
} 
void T0_INT0() interrupt 1
{
	//重装初值 	
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	P2 = _crol_(P2,1);
} 
/*仅供学习参考*/

标签:P2,12,ISIS,SONG,159,警报灯,void,单片机,212
来源: https://blog.csdn.net/MOKI36_/article/details/122814140