这一篇文章主要介绍用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);
}
/*仅供学习参考*/