51单片机实现蜂鸣器警车、救护车、消防车声
- 格式:doc
- 大小:50.50 KB
- 文档页数:12
18.“嘀、嘀、……”报警声1.实验任务用AT89S51单片机产生“嘀、嘀、…”报警声从P1.0端口输出,产生频率为1KHz,根据上面图可知:1KHZ方波从P1.0输出0.2秒,接着0.2秒从P1.0输出电平信号,如此循环下去,就形成我们所需的报警声了。
2.电路原理图图4.18.13.系统板硬件连线(1.把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上,(2.在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭;4.程序设计方法(1.生活中我们常常到各种各样的报警声,例如“嘀、嘀、…”就是常见的一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声的频率为1KHz,则报警声时序图如下图所示:上述波形信号如何用单片机来产生呢?(2.由于要产生上面的信号,我们把上面的信号分成两部分,一部分为1KHZ方波,占用时间为0.2秒;另一部分为电平,也是占用0.2秒;因此,我们利用单片机的定时/计数器T0作为定时,可以定时0.2秒;同时,也要用单片机产生1KHZ的方波,对于1KHZ的方波信号周期为1ms,高电平占用0.5ms,低电平占用0.5ms,因此也采用定时器T0来完成0.5ms的定时;最后,可以选定定时/计数器T0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍,也就是说以0.5ms定时400次就达到0.2秒的定时时间了。
5.程序框图主程序框图中断服务程序框图图4.18.2 6.汇编源程序T02SA EQU 30HT02SB EQU 31HFLAG BIT 00HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV T02SA,#00HMOV T02SB,#00HCLR FLAGMOV TMOD,#01HMOV TH0,#(65536-500) / 256MOV TL0,#(65536-500) MOD 256SETB TR0SETB ET0SETB EASJMP $MOV TH0,#(65536-500) / 256MOV TL0,#(65536-500) MOD 256INC T02SAMOV A,T02SACJNE A,#100,NEXTINC T02SBMOV A,T02SBCJNE A,#04H,NEXTMOV T02SA,#00HMOV T02SB,#00HCPL FLAGNEXT: JB FLAG,DONECPL P1.0DONE: RETIEND7.C语言源程序#include <AT89X51.H>unsigned int t02s;unsigned char t05ms;bit flag;void main(void){TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;ET0=1;EA=1;while(1);}void t0(void) interrupt 1 using 0 {TH0=(65536-500)/256;TL0=(65536-500)%256;t02s++;if(t02s==400){t02s=0;flag=~flag;}if(flag==0){P1_0=~P1_0;}}。
51单片机控制交通灯一、实现功能:1、先南北红灯亮,东西绿灯亮。
南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒;到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2秒。
到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮,东西红灯亮维持30秒。
南北绿灯亮维持25秒,然后闪亮3秒后熄灭。
同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。
周而复始。
2、用一个按键模拟急救车到达。
急救车到达路口时,四个方向的红灯全亮,10秒钟后恢复正常显示。
3、一辆急救车正在过路口时(即四个方向全红灯10秒倒计时未结束),又来了一辆急救车,重新从10秒开始倒计时。
4、急救车过去之后(即10秒倒计时结束),路灯状态要继续急救车到达之前的状态往下运行。
5、数码管显示绿灯变红灯、红灯变绿灯以及急救车10秒钟的倒计时。
6、急救车从路口过的时候,蜂鸣器响1s停1s的循环报警。
二、proteus仿真电路图注:此图仅作为仿真使用。
实际焊接电路时,由于单片机的驱动能力较弱,所以数码管的位选、LED的控制最好加上三极管进行电流放大,否则即使能实现功能,但是LED和数码管的发光的亮度也不强。
三、C语言程序程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P2code uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; uchar buff[8] = {10,10,10,10,10,10,10,10};uchar weizhi = 0;uchar alarm = 0;uchar bk_TH1 = 0;uchar bk_TL1 = 0;uchar bk_cnt = 0;uchar bk_cnt_time = 0;uchar cnt_time = 0;uchar cnt = 0;uchar cnt_flash = 0;bit cnt_finish = 0;bit LED = 0;bit beef_flag = 1;sbit Er = P1^0; //东西—红灯sbit Eg = P1^1; //东西—绿灯sbit Ey = P1^2; //东西—黄灯sbit Sr = P1^3; //南北—红灯sbit Sg = P1^4; //南北—绿灯sbit Sy = P1^5; //南北—黄灯sbit beef = P1^6; //蜂鸣器void display(void);void main(void){uchar time = 0;TMOD |= 0x11;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;ET1 = 1;ET0 = 1;INT0 = 1;EX0 = 1;IP |= 0x02;EA = 1;TR0 = 1;TR1 = 1;Sr = 0;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 0;beef = 0;buff[0] = 11;buff[1] = 11;buff[2] = 11;buff[3] = 11;buff[4] = 11;buff[5] = 11;buff[6] = 10;buff[7] = 10;while(1){while((cnt<20)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 1;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<23)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = LED;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<25)&&(alarm == 0)) {Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 1;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<50)&&(alarm == 0)) {Sr = 0;Sg = 1;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<53)&&(alarm == 0)) {Sr = 0;Sg = LED;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt_finish != 1)&&(alarm == 0)){Sr = 0;Sg = 0;Sy = 1;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}cnt_finish = 0;while(alarm == 1){Er = 1;Eg = 0;Ey = 0;Sr = 1;Sg = 0;Sy = 0;time = (10-cnt);buff[7] = time%10;buff[6] = time/10;if(cnt == 10){TR1 = 0;TH1 = bk_TH1;TL1 = bk_TL1;cnt = bk_cnt;cnt_time = bk_cnt_time;TR1 = 1;alarm = 0;}beef = beef_flag;}beef = 0;}}void int0(void) interrupt 0{TR1 = 0;if(alarm == 0){bk_TH1 = TH1;bk_TL1 = TL1;bk_cnt = cnt;bk_cnt_time = cnt_time;}TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;cnt = 0;cnt_time = 0;alarm = 1;TR1 = 1;}void timer0(void) interrupt 1 {TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display();}void timer1(void) interrupt 3 {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(++cnt_time == 20){cnt_time = 0;cnt++;beef_flag = ~beef_flag;}if(++cnt_flash == 4){cnt_flash = 0;LED = ~LED;}if(cnt == 55){cnt = 0;cnt_finish = 1;}}void display(void){duan = 0xff;wei = (1<<weizhi);duan = tab[buff[weizhi]];if(++weizhi == 8){weizhi = 0;}}。
单片机原理及接口技术课程设计报告设计题目:蜂鸣器专业:班级:姓名:学号:一、课程设计题目 (1)二、设计目的 (2)三、蜂鸣器功能 (2)四、操作说明 (2)五、设计原理图 (2)六、设计PCB图 (4)七、程序流程图 (4)八、程序清单 (6)九、器件清单及部分作用 (10)十、参考文献 (11)十一、设计心得体会 (11)一、课程设计题目单片机基本系统的应用:蜂鸣器二、设计目的1、通过单片机课程设计,熟练掌握编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
2、通过对蜂鸣器的设计,掌握蜂鸣器的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力。
3、通过本次单片机课程设计将单片机软硬件结合起来,加强理论联系实际的能力。
4、通过本次课程设计提高学生的综合能力、动手能力、文献资料查阅能力,为毕业设计和以后工作打下一个良好的基础。
三、蜂鸣器功能1、蜂鸣器的作用蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
2、蜂鸣器的分类蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
3、蜂鸣器的电路图形符号蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
4、本次课程设计所采用的蜂鸣器为无源的电磁式蜂鸣器,电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发。
5、这里的“源”不是指电源。
而是指震荡源。
也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
必须用2K~5K的方波去驱动它。
四、操作说明程序调试完成后,点击open File。
在出现的页面上更改相应的串口,连接好硬件,再进行Down load下载,当下面出现握手连接时,拔起短路块进行上电,输入程序,当程序输入完毕后再分别按下三个按键,第一个代表枪声,发出同一频率声调数码管显示为2,第二个键子发出救护车的声音,发出两个频率音调,数码管显示为2和3。
51单片机驱动蜂鸣器发声的实验
在单片机系统中,除了显示器件外经常用到发声器件,最常见的发声器件就是蜂鸣器。
蜂鸣器一般用于一些要求不高的声音报警及发出按键操作提示音等。
虽然蜂鸣器也有自己固有的频率,但是也可以对其施加不同频率的方波,使之发出一些简单的乐曲。
1.实例功能
使蜂鸣器发声。
通过本实验,能熟练掌握蜂鸣器的应用方法。
2.器件和原理
蜂鸣器最重要的特点是只要按照极性要求加上合适的直流电压就可以发出固有频率的声音,使用起来比扬声器简单。
由此可见,其控制与LED的控制是没有区别的。
3.硬件电路
虽然单片机对蜂鸣器的控制和对LED的控制是一样的,但硬件电路却
有所不同。
因为蜂鸣器是感性负载,一般不建议用单片机的I/0口直接对其进
行操作,最好是加一只驱动三极管。
在要求较高的场合,还要加上一只反相保护二极管。
本实验因为是以学习为目的所以没有加反相二极管保护。
51综合学习系统如上图所示,蜂鸣实验相关硬件电路见下图。
三极管为PNP型,要使蜂鸣器发声,只要将单片机P37口置为低电平就可以了。
4.程序设计。
51单片机蜂鸣器代码理解1.引言1.1 概述概述:蜂鸣器是一种广泛应用于电子设备中的声音输出装置,它通过控制某个频率的电信号使蜂鸣器发出特定的声音。
而51单片机,则是一种常见的单片机芯片,具有广泛的应用领域。
本文将主要探讨51单片机蜂鸣器的代码理解和应用。
通过对其基本原理的概述以及相关代码的解析,希望读者能够深入理解51单片机蜂鸣器的工作原理和实现方式。
在第二部分中,我们将介绍单片机蜂鸣器的基本原理。
包括如何通过单片机控制蜂鸣器的电信号频率和时长,从而实现不同的声音效果。
接着,在第二点中,我们将详细解析51单片机蜂鸣器的代码。
通过对代码的分析,读者可以了解到如何使用51单片机的引脚功能和定时器功能来控制蜂鸣器。
最后,在结论部分,我们将对所述内容进行总结,并展望51单片机蜂鸣器在未来的应用前景。
蜂鸣器作为一种重要的声音输出装置,具有广泛的应用前景,可以应用于报警系统、提醒装置等领域。
通过本文的阅读,读者将能够全面了解51单片机蜂鸣器的工作原理和代码实现方式,为相关领域的应用开发提供参考和指导。
让我们开始探索吧!1.2 文章结构文章结构的部分主要介绍了本文的组织和分类方式,以帮助读者更好地理解文章的内容和思路。
本文按照以下结构进行组织:1. 引言部分:介绍了文章的概述、结构和目的。
通过引言部分,读者可以初步了解到本文的内容和主题,并对文章的结构和目的有一个整体的认识。
2. 正文部分:主要分为两个小节,分别是"单片机蜂鸣器的基本原理"和"51单片机蜂鸣器代码解析"。
2.1 单片机蜂鸣器的基本原理:该部分将详细介绍单片机蜂鸣器的基本工作原理,包括蜂鸣器的构成和工作原理,以及单片机如何控制蜂鸣器发出指定的声音。
2.2 51单片机蜂鸣器代码解析:该部分将对51单片机蜂鸣器的代码进行解析,包括如何初始化引脚、设置定时器和中断等相关代码。
通过对代码的逐行解析和说明,读者可以更加深入地理解代码的功能和实现原理。
本例使用延时函数实精品文档按键发音/* 名称:按键发音说明:按下不同的按键会是SOUNDE 发出不同频率的声音。
现不同频率的声音输出,以后也可使用定时器*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A 7;sbit K 仁 P1A4;sbit K2=P1A5;sbit K3=P1A6;sbit K4=P1A7;// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 按周期 t 发音void Play(uchar t){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;DelayMS(t);}BEEP=0;}void main(){P1=0xff;BEEP=0;while(1){if(K1==0) Play(1);if(K2==0) Play(2);if(K3==0) Play(3);if(K4==0) Play(4);}}精品文档播放音乐/* 名称:播放音乐说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时 实现*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A7;// 生日快乐歌的音符频率表,不同频率由不同的延时来决定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,9,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_LON为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;〃SONG_TON延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);} DelayMS(10);i++;}}void main(){BEEP=0;while(1){PlayMusic(); // 播放生日快乐DelayMS(500); // 播放完后暂停一段时间}精品文档。
蜂鸣器是怎样发出警报功能的?看完一目了然!
本次实例介绍用C51单片机来驱动蜂鸣器,实现简单的蜂鸣器发出警报的功能。
首先是电路的硬件连接部分。
通常使用仿真软件来进行简单项目的的仿真测试。
下面介绍电路部分。
上图就是用仿真软件绘制的电路原理图,除了LS1之外的部分是单片机最小系统的构成。
X1是一个12MHZ的晶振,C!和C2是两个22pF的电容(陶瓷电容)。
C3是一个10uF的电容。
用于系统的上电复位。
LS1就是一个蜂鸣器,也可以用其他兼容的喇叭代替。
对于蜂鸣器的驱动,其实更为合理的方式是用一个三极管来驱动,或是驱动芯片。
为了方便理解,此处以最简单的方式呈现。
之后的项目中会逐步给出更复杂更专业的设计。
C程序如下:
#include
#define unit unsigned int
#define uchar unsigned char
sbit B=P3^7;
void main(void)
{
B='0';
while(100)
{
for(i=0;i<>
B='1';
for(i=0;i<>
B='0';
}
}
汉得利电子专注于倒车雷达传感器,产品齐全:1000多款产品型号
快捷:一键对比
精准:官网比对
您可以:查价格、查库存量、查货期、查资料参数、下载手册…
好了,写好程序记得生成.hex文件哦,然后烧录到单片机内,也可以直接在仿真软件中测试哦。
如果发现问题记得反馈给我哦。
谢谢大家!。
51蜂鸣器发不同的声音程序/****************************************************同时用两个定时器,控制蜂鸣器发声,T0控制频率,T1控制同一频率发声的时长(2s),不同依次频率为1,10,50,100,200,400,800,1k(hz),占空比均为0.5T0的计时周期为125us;T1的计时周期为50ms 。
不同频率对应的num依次为:4000,400,80,40,20,10,5,4*****************************************************/#includesbit beep=P2^3; //unsigned int num=4000,//决定蜂鸣器的响应周期,从而决定不同的频率counter0=0,//T0控制频率counter1=0; //T1控制周期void main(void){ //TMOD=0x12; //T0用自动重装初值的8位计数方式,T1用16位计数方式TH0=0x83; //T0计数周期125usTL0=0x83;TH1=(65536-50000)/256; //T1计数周期50msTL1=(65536-50000)%256;ET0=1; //允许T0中断ET1=1; //允许T1中断EA=1; //开总中断TR0=1; //T0开始计数TR1=1; //T1开始计数beep=1;while(1);}void time0() interrupt 1 {counter0++;if(counter0==num){counter0=0;beep=~beep;}}void time1() interrupt 3 {TH1=(65536-50000)/256; TL1=(65536-50000)%256; counter1++;if(counter1==40){counter1=0;switch(num){case 4000:num=400 ;break; case 400 :num=80 ;break; case 80 :num=40 ;break; case 40 :num=20 ;break; case 20 :num=10 ;break; case 10 :num=5 ;break; case 5 :num=4 ;break; case 4 :num=4000;break; }}}。
蜂鸣器报警声音单片机512011 9.12 农历8.15 建模心得51单片机外部中断小程序采用中断0和1 并测试电平触发和边沿触发的区别2011-07-16 19:47:22| 分类:默认分类| 标签:|字号大中小订阅// 8.外部中断的用法// EA=1;//开总中断// EX0=1;//开外部中断0 默认IT0=0 (低)电平触发方式//IT0=1 为边沿触发方式有高低电平变化时发送中断请求//响应中断后硬件自动清0//P3.2 (int0口)口为0时亮一下p3.7的发光二极管电平触发方式p3.7外接电阻和led灯到电源//P3.3 (int1口)口电压变化时亮一下p3.7的发光二极管下降沿触发方式#include<reg52.h>sbit light=P3^7;sbit P3_2=P3^2;sbit P3_3=P3^3;void delay1ms(unsigned int z); //延时1msmain(){EA=1;EX0=1;//默认IT0=0EX1=1;IT1=1; //边沿触发方式while(1);}void int0() interrupt 0 //外部中断0服务程序默认电平触发方式{light=0; //不需要消抖抖动时高电位持续时间短// 一直按下一直有中断delay1ms(300);light=1;}void int1() interrupt 2 //外部中断1服务程序设为下降沿触发方式{delay1ms(10);if(P3_3==0) //需要消抖抖动时有电平变化{light=0;delay1ms(300);light=1;}}void delay1ms(unsigned int z) //延时1ms {unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。
/*-----------------------------------------------------------------------------------------------------------------------------------*//*--*************************功能:【喇叭发出声音,频率可调】*********************--*//*--*************************芯片:【STC12C5A60S2】******************************--*//*--*************************说明:【频率500Hz,单次发声时长1s】******************--*//*--*************************控制:【每按下P1.0一次,喇叭发声1s,长按一直发声】**--*//*------------------------------------------------------------------------------------------------------------------------------------*//*头文件*/#include <reg52.h>#include <intrins.h>sbitControl_Key = P1^0; //定义控制独立按键P1.0,按下发声。
sbitSpeaker_port = P2^7; //定义喇叭控制端口unsigned intnum = 8; //num = (4 * 1000) / Frequency(500Hz) : 决定喇叭的响应周期,从而决定不同的频率unsigned int counter0 = 0; //T0控制频率unsigned int counter1 = 0; //T1控制时长unsigned char Juge_Start; //判断发声1s是否开始。
项目二救护车 / 消防车声响报警电路【学习目标】1.熟悉 555 定时器中 5 脚电压控制端的功能和作用2.了解 555 定时器用电压控制端调到多谐振荡器的频率实现救护车和消防车的报警声响。
【项目情景】声响报警电路在实际生活中的应用越来越广泛,救护车上,消防车上,都有用到,人们通过声音来判别各种信号,比如下图中所示的情况,那么,怎样来设计这么一个声响报警电路呢?图 2-1【项目准备】一.元器件配置表 2-1 元器件配置序号名称数量序号名称数量1 555 定时器 4 8 电阻器 2.7K 12 0.5W 扬声器 2 9 电阻器 150K 23 直流稳压电源 1 10 9012PNP 二极管 14 双踪示波器 1 11 电容器 10 uF 25 电阻器 100K 1 12 电容器 100 uF 26 电阻器 10K 4 13 电容器 0.01 uF 47 电阻器 47K 3 14 ICT 8 脚插座 4表 2-1二、元器件简介1.555 定时器555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。
它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。
它内部包括两个电压比较器,三个等值串联电阻,一个RS 触发器,一个放电管T及功率输出级。
它提供两个基准电压VCC/3和2VCC /3。
555定时器的功能主要由两个比较器决定。
两个比较器的输出电压控制RS触发器和放电管的状态。
在电源与地之间加上电压,当 5 脚悬空时,则电压比较器C1的同相输入端的电压为2VCC /3 , C2 的反相输入端的电压为VCC/3。
若触发输入端TR 的电压小于VCC/3,则比较器C2 的输出为0,可使RS 触发器置 1 使输出端OUT=1 。
如果阈值输入端TH 的电压大于2VCC/3 ,同时TR 端的电压大于VCC/3 ,则 C1 的输出为 0, C2 的输出为 1 ,可将RS 触发器置0 ,使输出为0 电平。