当前位置:文档之家› 蜂鸣器实验报告

蜂鸣器实验报告

蜂鸣器实验报告
蜂鸣器实验报告

驱动蜂鸣器实验

一、实验要求

完成驱动蜂鸣器实验

二、实验目的

1.学习Proteus软件的使用方法

2.学习Keil软件的使用方法

3.学习端口输出的使用方法

4.掌握延时程序的设计

三、实验说明

(条理清晰,含程序的一些功能分析计算)

分析系统要实现的功能,怎么设计实现方案,有哪些计算相关数据要计算,需要使用哪些什么特殊功能寄存器等,

四、硬件原理图及程序设计

(一)硬件原理图设计

在PROTEUS中截图过来,并有文字说明

(二)程序流程图设计

将实现方案流程化,对流程图要有简要文字介绍

(三)程序设源代码

#include

sbit buzzer=P3^7;

void delay(int);

void pulse_BZ(int,int,int);

main()

{

while(1)

{

pulse_BZ(100,1,1);

delay(1000);

}

}

void delay(int x)

{

int i, j;

for(i=0;i

for(j=0;j<60;j++);

}

void pulse_BZ(int count,int TH,int TL)

{

int i;

for(i=0;i

{

buzzer=1;

delay(TH);

buzzer=0;

delay(TL);

}

} 将程序的源代码付上,主要句子和功能要有注释

五.实验总结

1、实验过程中遇到的问题及解决方法

2、体会

VHDL实验报告

《创新实验》实验报告 —基于VHDL的编程和硬件实现

一、实验目的 1.熟悉和掌握硬件描述语言VHDL的基本语法及编写; 2.掌握软件Xilinx ISE 10.1的使用; 3.熟悉SDZ-6电子技术实验箱的使用; 4.了解节拍脉冲发生器等基本电路的实现; 5.了解八位二进制计数器的功能与设计; 6.学习键盘和七段数码管显示的控制和设计。 二、实验内容 1.Xilinx ISE 10.1软件的使用; 2.节拍脉冲发生器等基本电路的实现; 3.八位二进制计数器的实现 4.键盘扫描及显示的实现 三、实验器材 1、PC机 2、SDZ-6电子技术实验箱 3、正负5V电源 4、I/O接口线 四、软件的使用 在安装Xilinx10.1软件时,需要一个ID号,其实这个ID号是可以重复使用的,几个同学在官网注册后就可以共享ID号了。 安装完成之后就可以使用这个软件编写相应的VHDL的程序。 1.新建工程 File—>New Project 弹出下面的对话框 输入工程名后单击Next。然后根据本实验的实验箱进行以下设置。

以后的步骤一般都是单击Next(有些资料上会介绍有些这些步骤的具体功能,但对于本实验不必用到),最后单击Finish,完成新建一个工程。在窗口的左边会出现刚刚新建的工程,如下: 2.新建一个VHDL的源文件。 在上图中,右击工程选择New Source ,弹出如下对话框。

在对画框的左边选择VHDL Module,输入文件的名字(改名字最好是你定义的实体的名字)。单击Next。出现下面的对话框。 该对话框主要是对外部端口的编辑。可以直接跳过,即单击Next,在源文件上编辑端口。然后在接下来的对话框中单击Finish。完成建立一个源文件。窗口右边就会出现刚才编辑的源文件。 3.编写和编译代码 将事先编好的代码复制到源文件里,然后保存文件。 选中左边的文件名,在窗体的左边出现如下编辑文档内容。

单片机蜂鸣器音乐演奏程序的解释

关于“世上只有妈妈好”的单片机音乐演奏程序 2009-11-22 21:45 单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。 这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。 众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。 下面是个网上广泛流传的单片机音乐演奏程序,很多人都关心如何修改乐曲的内容,但是不知如何入手。做而论道对这个软件,做了一些说明,希望对大家有所帮助,以后大家自己就能够编写进去新的乐曲。 在这个程序中,包括了两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。 演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。 乐曲的数据,也要写个数据表:code unsigned char sszymmh[],表中每三个数字,说明了一个音符,它们分别代表: 第一个数字是音符的数值1234567之一,代表多来咪发...; 第二个数字是0123之一,代表低音、中音、高音、超高音;低音:数字下面一个点 中音:没有点 高音:数字上面一个点 超高音:数字上面两个点(两个点纵向排列) 第三个数字是时间长度,以半拍为单位。 音的长短是在音符后面或下面加短横线来表示的。 全音符 5 ———唱四拍 二分音符 5 —唱二拍 四分音符 5 唱一拍 八分音符 5(在音符下加一条短的横线) 唱半拍 十六分音符5(在音符下加两条短的横线)唱四分之一拍 三十二分音符(在音符下加三条短的横线)唱八分之一拍 乐曲数据表的结尾是三个0。 #include sbit speaker = P1^7; unsigned char timer0h, timer0l, time; //-------------------------------------- //单片机晶振采用11.0592MHz // 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据 code unsigned char FREQH[] = { 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567 // 频率-半周期数据表低八位

两个定时器蜂鸣器,一个控制频率,另一个控制时间

//同时利用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同一个频率持续的时间,间隔300ms依次输出 1、"1 0、" // 50、" 100、" 200、" 400、"800HZ的方波 #include//52单片机头文件 #include //包含有左右循环移位子函数的库 #define uint unsigned int//宏定义 #define uchar unsigned char sbit Waveout=P1^0; uchar tt; uint fre,flag; uint Freq[]={1,10,50,100,200,400,800,1000} void main()//主函数{fre=500; TMOD=0x11;//设置定时器0,定时器1为工作方式1 TH0=(65536-fre)/256;

TL0=(65536-fre)%256; TH1=(65536-500)/256; TL1=(65536-500)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 ET1=1; TR1=1; TR0=1;//启动定时器0 while (1) //等待中断产生{if(tt=a){tt=0; Waveout=~Waveout;}}}void timer0() interrupt 1//定时器0中断{TR0=0;//进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失TH0=(65536-fre)/256; TL0=(65536-fre)%256; tt++;}void timer1() interrupt 3//定时器1中断用来产生300微秒时间定时{TH1=(65536-500)/256; TL1=(65536-500)%256; flag++; if(flag==6){flag=0; freq=Freq[i];}}

嵌入式- 蜂鸣器控制实验

实验二蜂鸣器控制实验 实验目的:1 了解ARM处理器PWM接口的处理机制 2 掌握在S3C2440A平台下进行PWM接口应用编程实验器材:Sinosys-EA2440实验箱PC机 实验原理:脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。即通过改变方波的占空比表示不同的模拟信号的电平。 在ARM嵌入式实验中,其实是通过微处理器中的计数器,对经过频率变换的输出频率周期进行计数,在PWM中,是通过两个寄存器(TCNTBn和TCMPBn)对输出信号的占空比进行调制,TCNTBn可以设置为TCMPBn+X,当TCNTBn在TCMPBn和TCMPBn+X 之间计数时,TOUTn(即输出信号)输出低电平,当TCNTBn计数下降到TCMPBn时,TOUTn电平反转,变为高电平,直到TCNTBn计数减到0,如果此时开启了重载,则又把预定的值重新装入TCNTBn和TCMPBn中,重复以上过程。 在ARM嵌入式PWM中,会提供一个基准时钟作为输入时钟,PWM调制会对输入的时钟进行分频等操作进入计时器逻辑,其电路图2.1如下:

图2.1 PWM计时器框图 如图2.1,输入的时钟PCLK经过一个8bit预置器和一个分频器,将得到的时钟进入计数器逻辑板块作为驱动时钟,而输出的TOUT则作为蜂鸣器(蜂鸣器控制电路如图2.2)的驱动信号。 图2.2 蜂鸣器控制电路

实验总结:实验的主函数首先设置时钟,端口初始化,并捕捉进入测试函数的指令,与实验一大致相同,在此不在赘述,重点分析测试函数。测试函数如下: void Beep(int freq,int ms) { int div,i rGPBCON&=~0x3; //将GPB0作为输入口rGPBCON|=0X2; // 接入TIMER0 rTCFG0&=~0XFF; // 设置prescaler为32 rTCFG0|=0XF; rTCFG1&=~0XF; //选择mux=1/16 rTCFG1|=0X3; div=plck/32/16/freq 计算TCNTB0的值rTCNTB0=div; rTCMPB0=rTCNTB0>>2; 占空比为4:1 rTCON&=~0X1F; 设置死区自动重载反转人工载入开始rTCON|=0XB; 关闭死区开启重载关反转开人工载入开始rTCON&=~2; 关闭人工载入 for(i=1,i

VHDL实验报告03137

VHDL实验报告 60 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码-格雷码转换器设计 一.实验目的 学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术 1. 学习4位可逆计数器的设计 2. 学习4位可逆二进制代码-格雷码转换器设计 二.实验内容 设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。 [具体要求] 1.4位可逆计数器 a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁, 人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。(可 利用实验一) b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减 法计数器,同时使用LEDR17显示SW17的值。 c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时, 置“0000”,当为减法计数器时,置“1111”。 d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 2.4位可逆二进制代码――格雷码转换器 a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换, 置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。 b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0 为低位。 c)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 三.管脚设定 SW[0]PIN_N25 SW[1]PIN_N26 SW[2]PIN_P25 SW[3] PIN_AE14 SW[17] PIN_V2 LEDR[0] PIN_AE23 LEDR[1] PIN_AF23 LEDR[2] PIN_AB21 LEDR[3] PIN_AC22 LEDR[17] PIN_AD12 KEY[3] PIN_W26

单片机 利用蜂鸣器演奏音乐

实验三-利用蜂鸣器演奏音乐 一、实验目的 1.了解BlueSkyC51单片机实验板中蜂鸣器的硬件电路 2.学会利用蜂鸣器实现音乐的演奏 3.掌握蜂鸣器实现音乐演奏的编程 二、实验硬件设计及电路 1. BlueSkyC51单片机实验板 ` 2.单片机最小系统

。 3.蜂鸣器电路连接 三极管主要是做驱动用的。因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以

我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。 三、实验原理 1.音调及节拍 用一个口,输出方波,这个方波输入进蜂鸣器就会产生声音,通过控制方波的频率、时间,就能产生简单的音乐。一般说来,单片机演奏音乐基本都是单音频率,因此单片机奏乐只需控制音调和节拍。 (1)音调的确定 音调是由频率来确定的。通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O 口来回取反,从而让蜂鸣器发出不同频率的声音。只需将定时器给以不同的定时值就可实现。通过延时,即可发出所需要的频率。 … (2)节拍的确定 一拍的时长大约为400—500ms,每个音符的时长通过节拍来计算。详细见程序代码。 2.软件设计相关 (1)头文件 #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long sbit beep=P1^4; 译实验相关问题 ; (1)实际发音颤音重 解决方法为修改蜂鸣器的驱动频率. (2)实际节奏过快或者过慢 调整延时 四、C51程序代码(部分来源于网络) #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long ~ sbit beep=P1^4; //蜂鸣器与口连接 uchar th0_f; //中断装载T0高8位 uchar tl0_f; //T0低8位 uchar code freq[36*2]={ //音阶码表 0xf7,0xd8, //440hz , 1 //0 0xf8,0x50, //466hz , 1# //1

单片机按键控制蜂鸣器发声程序(严选参考)

#include typedef unsigned char uint8; typedef unsigned int uint16; uint8 Count,i; sbit Speak =P1^2; //蜂鸣器器控制脚 sbit key1 =P3^2;//按键控制引脚 sbit key2 =P3^3; sbit key3 =P3^4; /*以下数组是音符编码*/ uint8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,}; void Time0_Init()//定时器T0方式1,定时10ms { TMOD = 0x01; IE = 0x82; TH0 = 0xDC; TL0 = 0x00; } void Time0_Int() interrupt 1 { TH0 = 0xDC; TL0 = 0x00; Count++; } void delay (uint8 k)//按键防抖延时 { uint8 j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } void Delay_xMs(uint8 x)//发声延时 { uint8 i,j; for(i=0; i

} } void Play_Song(uint8 i)//蜂鸣器发声函数 { uint8 Temp1,Temp2; uint8 Addr; Count = 0; //中断计数器清0 Addr = i *3; while(1) { Temp1 = SONG[Addr++]; if (Temp1 == 0xFF) //休止符 { TR0 = 0; Delay_xMs(100); } else if (Temp1 == 0x00) //歌曲结束符 { return; } else { Temp2 = SONG[Addr++]; TR0 = 1; while(1) { Speak = ~Speak; Delay_xMs(Temp1); if(Temp2 == Count) { Count = 0; break; } } } } } void keyscan (void)//按键切换声音函数 { if(key1==0) { delay(10);

蜂鸣器音乐程序

#include sbit speaker = P1^7; unsigned char timer0h, timer0l, time; //------------------ //单片机晶振采用11.0592MHz // 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据code unsigned char FREQH[1] = { 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC.//1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567 // 频率-半周期数据表低八位 code unsigned char FREQL[ 0] = { 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音234567 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567 //-------------------------------------- code unsigned char sszymmh[ 2] = { Void main{ t=0;t++;t<1000 }//-------------------------------------- void t0int() interrupt 1 //T0中断程序,控制发音的音调 { TR0 = 0; //先关闭T0 speaker = !speaker; //输出方波, 发音 TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低 TL0 = timer0l; TR0 = 1; //启动T0 } //-------------------------------------- void delay(unsigned char t) //延时程序,控制发音的时间长度 { unsigned char t1; unsigned long t2; for(t1 = 0; t1 < t; t.2++) //双重循环, 共延时t个半拍 for(t2 = 0; t2 <12000; t3++); //延时期间, 可进入T0中断去发音 TR0 = 0; //关闭T0, 停止发音 } //-------------------------------------- void song() //演奏一个音符

单片机实验报告-蜂鸣器驱动实验

本科实验报告 课程名称:单片机原理与接口技术实验项目:蜂鸣器驱动实验 实验地点:电机馆 专业班级:学号: 学生姓名: 指导教师: 2015年 6 月9 日

蜂鸣器驱动实验 一、实验目的 1、学习输入/输出端口控制方法 2、了解音频发声原理 二、实验说明 本实验是利用89C51端口定时器输出控制端口,驱动扬声器发声,声音的频率高低由延时快慢控制。本实验是利用单片机唱歌的声音控制程序,请用户思考如何修改程序,可以让蜂鸣器发出不同频率,不同长短的声音。 三、实验原理 1、通过单片机控制驱动信号使蜂鸣器发出不同音调的声音,驱动方波的频率越高,音调就越高;驱动方波频率越低,音调越低。由此,我们可以根据驱动方波的频率使蜂鸣器凑出各种音调的声音。 2、由于单片机I/O口的输出电流较小,因此需要三极管放大电路驱动蜂鸣器。 四、主要仪器设备 单片机仿真试验箱,THKL-C51型单片机仿真器,计算机 五、实验内容及步骤 INT1输出音频信号接音频驱动电路,使蜂鸣器的发声。 1、使用单片机最小应用系统和蜂鸣器模块。蜂鸣器模块的短路帽J1插到VCC方向,用导线将INT1接到蜂鸣器输入端。 2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。 3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“MUSIC.ASM”源程序,进行编译,直到编译无误。 4、全速运行程序,扬声器周期性的发出“八月桂花开”歌曲。(添加“MUSIC1.ASM”程序为“祝你平安”歌曲) 5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)

基于VHDL语言的EDA实验报告(附源码)

EDA 实验报告 ——多功能电子钟 姓名:张红义 班级:10级电科五班 学号:1008101143 指导老师:贾树恒

电子钟包括:主控模块,计时模块,闹钟模块,辅控模块,显示模块,蜂鸣器模块,分频器模块。 1.主控模块: 主要功能:控制整个系统,输出现在的状态,以及按键信息。 源代码: libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; useieee.std_logic_unsigned.all; entity mc is port(functionswitch,k,set,lightkey: in std_logic; chose21,setout: out std_logic; lightswitch:bufferstd_logic; modeout,kmodeout : out std_logic_vector(1 downto 0); setcs,setcm,setch,setas,setam,setah:outstd_logic); end mc; architecture work of mc is signalmode,kmode:std_logic_vector(1 downto 0); signal light,chose21buf:std_logic; signalsetcount:std_logic_vector(5 downto 0); begin process(functionswitch,k,set,lightkey) begin iffunctionswitch'event and functionswitch='1' then mode<=mode+'1'; end if; iflightkey'event and lightkey='1' then lightswitch<=not lightswitch; end if; if mode="01" thenchose21buf<='0'; else chose21buf<='1'; end if; ifk'event and k='1' then if mode="01" or mode="11" then kmode<=kmode+'1'; end if;end if; if set='1' then if mode = "01" then ifkmode="01" then setcount<="000001"; elsifkmode="10" thensetcount<="000010"; elsifkmode="11" then setcount<="000100";

51单片机蜂鸣器播放音乐代码(生日快乐 两只蝴蝶 祝你平安)

/*生日快乐歌曲*/ #include #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; 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_LONG 为拍子长度 for(j=0;j

中断定时蜂鸣器实验

中断定时蜂鸣器实验 一.实验目的 1.掌握ARM2131开发环境ADS,熟悉开发环境的常用工具以及相应功能。 2.学习建立ADS的工程文件、编译连接设置、调试操作等。 3.学习对中断向量VTC、GPIO口的设置。 4.学习定时器中断的应用 二.实验设备 PC兼容机一台,操作系统WINDOWS 2000,安装ADS1.2(ARM Developer Suite 的成熟版本) 三.实验原理 随着信息技术技术的飞速发展,ARM技术方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入式微处理器,得到了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。目前已被广泛的用于各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等领域。被业界人士认为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。LPC2131 Philips LPC2131 是基于ARM7TDMI-S 的高性能32 位RISC 微控制器,它一方面具有ARM处理器的所有优点:低功耗、高性能;同时又具有较为丰富的片上资源,非常适合嵌入式产品的开发。其特点如下: ·集成了Thumb 扩展指令集。 ·32KB可在系统中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量中断控制器。 ·2个UART,2个I2C 串行接口,2 个SPI串行接口,2 个定时器(7 个捕获/ 比较通道),PWM单元可提供多达6个PWM输出,8通道10位ADC,实时时钟RTC,看门狗定时器WDT,48 个通用I/O引脚。 ·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。 GPIO:(General Purpose Input Output) GPIO是用来进行输入输出的,那么肯定有寄存器进行控制。对于输入的话,可以通过读取寄存器来确定引脚的高电平还是低电平;对于输出的话,可以通过写某个寄存器来让这个引脚输出高低电平.GPxCON,GPACON每一位对应着一根引脚(23根)0:代表输出;1:相应的引脚为地址线或用于地址控制对于PORT B-PORT J的话,GPxCON中每两位控制一根引脚00:输入;01:输出;10:特殊功能;11:保留。GPxDA T用于读或者写。GPxUP,1:不使用内部的上拉电阻;0:使用内部上拉电阻。 向量控制寄存器VICVectCntl0-15记录了各个通道号及其使能位。 当中断发生时,VICVectAddr0-15中的一个值会被copy到VICVectAddr. 如果是非向量中断则VICdefaultAddr被copy到VICVectAddr. 程序跳转到VICVectorAddr指向的地址。 中断返回时,写0x00到VICVectAddr. 非向量中断是指那些虽然已经打开(允许),但是没有在相应的VICVectorCntl0~15 和VICVectorAddr0~15中设置的中断。 关于中断设置: 1、首先,硬复位后所有的Special Function Registor都有默认值。不必考虑设置的顺序问题。可以先设置好中断,再开通模块功能。

VHDL实验报告

专用集成电路实验报告 13050Z01 1305024237 刘德文

实验一开发平台软件安装与认知实验 实验内容 1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计 电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。 2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译 码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。 源程序: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity ls74138 is Port ( g1 : in std_logic; g2 : in std_logic; inp : in std_logic_vector(2 downto 0); y : out std_logic_vector(7 downto 0)); end ls74138; architecture Behavioral of ls74138 is begin process(g1,g2,inp) begin if((g1 and g2)='1') then case inp is when "000"=>y<="00000001"; when "001"=>y<="00000010";

单片机按键控制蜂鸣器发声程序

#include typedef unsigned char uint8; typedef unsigned int uint16; uint8 Count,i; sbit Speak =P1A2; //蜂鸣器器控制脚 sbit keyl =卩3人2;〃按键控制引脚 sbit key2 =P3A3; sbit key3 =P3A4; /* 以下数组是音符编码 */ uint8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,}; void Time0_Init()// 定时器 T0 方式 1 ,定时 10ms { TMOD = 0x01; IE = 0x82; TH0 = 0xDC; TL0 = 0x00; void Time0_Int() interrupt 1 { TH0 = 0xDC; TL0 = 0x00; Count++; } void delay (uint8 k)// 按键防抖延时 { uint8 j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } void Delay_xMs(uint8 x)// 发声延时 { uint8 i,j; for(i=0; i

Count = 0; // 中断计数器清 0 Addr = i *3; while(1) { Temp1 = SONG[Addr++]; if (Temp1 == 0xFF) //休止符 { TR0 = 0; Delay_xMs(100); } else if (Temp1 == 0x00) //歌曲结束符 { return; } else { Temp2 = SONG[Addr++]; TR0 = 1; while(1) { Speak = ~Speak; Delay_xMs(Temp1); if(Temp2 == Count) { Count = 0; break; } } } } }void keyscan (void)// 按键切换声音函数{ if(key1==0) { delay(10); if(key1==0) {

vhdl实验报告--蜂鸣器

VHDL 实验报告 一、实验目的 1、掌握蜂鸣器的使用; 2、通过复杂实验,进一步加深对VHDL语言的掌握程度。 二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的12 平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。在2个八度音之间,又可分为12个半音。另外,音符A(简谱中的低音6)的频率为440Hz, 音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音I至高音1 之间每个音符的频率,如表所示。 音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 中音1 高音1 低音2 中音2 高音2 低音3 中音3 高音3 低音4 中音4 高音4 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7 表简谱音名与频率的对应关系 产生各音符所需的频率可用一分频器实现, 由于各音符对应的频率多为非整数, 而分频系数又不能为小数, 故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低, 则由于分频系数过小, 四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素, 在尽量减小频率误差的前提下取合适的时钟频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此, 要控制音符的音 长,就必须知道乐曲的速度和每个音符所对应的节拍数, 本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。 本例设计的音乐电子琴选取40MHZ的系统时钟频率。在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。由于数控分频器 输出的波形是脉宽极窄的脉冲波, 为了更好的驱动蜂鸣器发声, 在到达蜂鸣器之前需要均衡占空比, 从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频, 频率变为原来的二分之一即。 因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为 523. 3Hz,它的分频系数应该为: 0.375MHZ 0.375 106 716 523.3 523.3

蜂鸣器和弦音发声控制

蜂鸣器和弦音发声控制 前言:现在一些带按键显示控制面板的家电(比较常见的是柜式空调)在按键操作的时候会有悦耳的和弦音发出,特别是开关机或操作上下键时会有不同变调的和弦音,相比普通的嘀嘀声给人更愉悦的操作体验。 1.控制方式说明 此处以型号为SH2225T2PA的蜂鸣器(谐振频率2.6KHz)为例。蜂鸣器模块有两个驱动引脚与MCU相连,一个是振荡信号输入引脚,由MCU提供相应频率的方波信号驱动蜂鸣器发声,一个是供电控制端,供电切断后蜂鸣器靠电解电容放电维持其发声,会有音量渐渐变小的效果。 原理图如下所示,MC9为供电控制端,MC8为振荡信号输入端。MC9为高电平时,三极管Q4导通,然后Q2导通,蜂鸣器开始供电,同时电容CD2充电。若MC8有一定频率的方波信号发出,则蜂鸣器可发出鸣叫。若此时先关掉供电,即MC9 置低电平,MC8依然发出方波信号,则蜂鸣器可依靠CD2放电发出声音,但随着电容电量减少,音量会逐渐减小,形成蜂鸣声渐隐的和弦音效果。要实现变调的效果,则可通过短时间内切换发出几种不同频率的蜂鸣声来实现。

以下是3种比较典型的和弦音的实现细节:(符号说明:Tf:频率给定持续时间(ms)Tv:电压给定持续时间(ms)F:输出频率(KHz)) 单声和弦音:短暂鸣响后音量渐隐 F=2.6,Tv=200,Tf=1000 开机和弦音:三升调,按音调分3个阶段 1.F= 2.3,Tv=200,Tf=200 2.F=2.6,Tv=200,Tf=200 3.F=2.9,Tv=100,Tf=2100 关机和弦音:三降调,按音调分3个阶段 1.F= 2.9,Tv=200,Tf=200 2.F=2.6,Tv=200,Tf=200 3.F=2.3,Tv=100,Tf=2100 2.编程实例 MCU:STM8S903K3 开发环境:STVD 4.1.6+Cosmic 4.2.8 /* buzzer.h文件*/ ?[Copy to clipboard]View Code C 1 2 3 4 5 6 #ifndef __BUZZER_H #define __BUZZER_H #include "common.h" #include "beep.h" typedef enum

蜂鸣器程序

单片机蜂鸣器实验 C程序: #include "reg51.h" #define uchar unsigned char #define uint unsigned int sbit FM=P2^3; void delay ( uchar x) { uint y; for (; x > 0 x-- ) for( y=500 y>0;y--); } void main() { FM=0; while(1) { delay(20); FM=1; delay(20); FM=0; } } 因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音

单片机驱动蜂鸣器原理与设计 蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。下面是电磁式蜂鸣器的外形图片及结构图。。。电磁式蜂鸣器实物图:一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:S51增强型单片机实验板蜂鸣器驱动原理图:如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平 时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机P3.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P3.7输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。二、蜂鸣器列子下面我们举几个简单的单片机驱动蜂鸣器的编程和电路设计的列子。1、简单的蜂鸣器实验程序:本程序通过在P3.7输出一个音频范围的方波,驱动实验板上的蜂鸣器发出蜂鸣声,其中DELAY延时子程序的作用是使输出的方波频率在人耳朵听觉能力之内的20KHZ以下,如果没有这个延时程序的话,输出的频率将大大超出人耳朵的听觉能力,我们将不能听到声音。更改延时常数,可以改变输出频率,也就可以调整蜂鸣器的音调。大家可以在实验中更改#228为其他值,听听蜂鸣器音调的改变。 ORG 0000H AJMP MAIN ;跳转到主程序 ORG 0030H MAIN: CPL P3.7 ;蜂鸣器驱动电平取反 LCALL DELAY 延时 AJMP MAIN 反复循环 DELAY:MOV R7,#228 ;延时子程序,更改该延时常数可以改变蜂鸣器发出的音调 DE1: DJNZ R7,DE1 RET

vhdl实验报告

福建农林大学计算机与信息学院 信息工程类 实验报告 2013年11 月13 日

实验项目列表

福建农林大学计算机与信息学院信息工程类实验报告 系:电子信息工程系专业:电子信息工程年级: 2010级 姓名:学号:实验课程: VHDL数字系统设计 实验室号:__ 田C407 实验设备号: 07 实验时间: 11.12 指导教师签字:成绩: 实验一数控分频器的设计 1.实验目的和要求 学习数控分频器的设计、分析和测试方法。 2.实验原理 信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例1所示。 数控分频器的仿真波形如图1所示:输入不同的CLK频率和预置值D,给出如图1的时序波形。 100.0μs200.0μs300.0μs400.0μs 图1 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns) 3.主要仪器设备(实验用的软硬件环境) 实验的硬件环境是: 微机一台 GW48 EDA实验开发系统一套 电源线一根 十芯JTAG口线一根 USB下载线一根 USB下载器一个 示波器 实验的软件环境是: Quartus II 9.0软件

4.操作方法与实验步骤 (1)创建工程,并命名位test。 (2)打开QuartusII,建立VHDL文件,并输入设计程序。保存为DVF. (3)选择目标器件。Acex1k—EP1K100QC208-3。 (4)启动编译。 (5)建立仿真波形图。 (6)仿真测试和波形分析。 (7)引脚锁定编译。 (8)编程下载。 (9)硬件测试 5.实验内容及实验数据记录 在实验系统上硬件验证例5-20的功能。可选实验电路模式1(第一章图4);键2/键1负责输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz 或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。 6.实验数据处理与分析 1)实验代码 【例1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC ); END; ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CNT8 = "11111111" THEN CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL <= '1'; --同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; --否则继续作加1计数 FULL <= '0'; --且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2; --如果溢出标志信号FULL为高电平,D触发器输出取反

相关主题
文本预览
相关文档 最新文档