ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:40.67KB ,
资源ID:8030545      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8030545.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机教程实战2 蜂鸣器唱歌.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机教程实战2 蜂鸣器唱歌.docx

1、单片机教程实战2 蜂鸣器唱歌单片机教程实战2 蜂鸣器唱歌发布: 2009-11-04 09:01|作者: 平凡| 来源: 网络| 查看: 189次利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。电子爱好者社区4_L9?5!V单片机的基本发音实验1X_s_S+_U_?-vJ0我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频

2、率,从而改变音调。电子爱好者社区3X_qg*d例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为:电子爱好者社区 7r_q6Q96I_Z(o其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ的音调。将上述程序键入学习机,并不断修改R3的常数可以感到音调的变化。电子爱好者社区_Yl_s M_h7t X-0B乐曲中,每一音符对应着确

3、定的频率,表1给出C调时各音符频率及其相应的时间常数。!_q!d_S_Q-F t0读者可以根据表1所提供的常数,将其16进制代码送入R3,反复练习体会。根据表1可以奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。电子爱好者社区j p_p_C!L*X-G_w音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系见表2。-A2h V_S_x7X_L0但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。我们可以用T0来

4、产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,相应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,相应时间长数为192(即C0H)。_h#g%_?+L_H_o:N0我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。电子爱好者社区 d_Rd_r ,x!|此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结

5、果为FFH,则产生相应的停顿效果。_I&O_?_i K_g_c_k1N0为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。3q2/(q7_T7K9Z5R_l0程序框图如图2所示。电子爱好者社区_G0G_y!LV;t_k_s下面给出程序序请单,可直接在TD-III型学习机上演奏,对其它不同型号的学习机,只需相应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也可以自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器

6、的演奏学唱一首歌曲,其趣味无穷。电子爱好者社区A6n_?_I_O#F!W_xI程序清单(略,请参看源程序的说明)。电子爱好者社区#v_Q_T1Z1Q_Y_c l无线电1992年第3期。电子爱好者社区6K%S N_z_e_e硬件连接说明:电子爱好者社区1Q i_F%so r_k随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。你 单片机教程实战3 键盘扫描识别发布: 2009-11-04 09:02|作者: 平凡| 来源

7、: 网络| 查看: 150次键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。b_e?F_p-m S01、按键开关的抖动问题电子爱好者社区_j W_F*y_I _u$s2y/x/Y#K+v u |_#j_K6V0电子爱好者社区$|_K_)k%x图1电子爱好者社区(D_v-V_f_电子爱好者社区_t_m%h_K_D _P F+R-_i0 图2+r1_i;_j q5g0电子爱好者社区4a1_x K,t_ 组成

8、键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。在下图中,当开关S未被按下时,P1。0输入为高电平,S闭合后,P1。0输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1。0输入端的波形如图2所示。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。前面我们讲到中断时曾有个问题,就是说按键有时灵,有时不灵,其实就是这个原因,你只按了一次按键,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果

9、执行的次数是偶数次,那就不对了。电子爱好者社区3t_r2L!_?.z_A为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单片机中常用软件法,因此,对于硬件方法我们不介绍。软件法其实很简单,就是在单片机获得P1。0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1。0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们通常不对按键释放的后沿进行处

10、理,实践证明,也能满足一定的要求。当然,实际应用中,对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是消除键抖动的原则。电子爱好者社区0s_:4_H2、键盘与单片机的连接电子爱好者社区(bX_j,w_o.Z3j_t+M1Z n_aJl0_S D#J%P)z2(wFV:E0 图3电子爱好者社区2uj_e0L%K,a_ i0t,S:O,T_h0_HH6*G9G_Ex0电子爱好者社区X_lj#P0_H%P _h_u ?_Q1_Z0_I_+5Z_j0 图4电子爱好者社区#e2D4u,s *Y!J_S_E%Z_W#6i H7sQ&F_M-a01、通过1/0口连接。将每个按键的一端接到单片

11、机的I/O口,另一端接地,这是最简单的方法,如图3所示是实验板上按键的接法,四个按键分别接到P3.2 、P3.3、P3.4和P3.5。对于这种键各程序可以采用不断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。下面给出一个例程。其功能很简单,四个键定义如下:_l_vW7L_K_U_k*Y0P3.2:开始,按此键则灯开始流动(由上而下)-n_B6|/h 4t8f%A&S0P3.3:停止,按此键则停止流动,所有灯为暗电子爱好者社区 4T_Pa8YU_D ZP3.4:上,按此键则灯由上向下流动电子爱好者社区:N.D:&CH_T9yn!n8i4R:GP3.

12、5:下,按此键则灯由下向上流动R$N)S a+W A!b0UpDown EQU 00H ;上下行标志电子爱好者社区:?_u P7etStartEnd EQU 01H ;起动及停止标志电子爱好者社区 x_O_Z_Z_N6w3VLAMPCODE EQU 21H ;存放流动的数据代码电子爱好者社区%(M_ef_ | b LORG 0000H_J k i_g_H_q0AJMP MAINa V9V_T_S2r$U/9K0ORG 30H电子爱好者社区_h5A7n_K;_+F_R8FMAIN:_G _ H_R5Y_d-P0MOV SP,#5FH电子爱好者社区_c(M M5h%t_R:N6DMOV P1,#0

13、FFH_w_Ya_h-,J0CLR UpDown ;启动时处于向上的状态电子爱好者社区 B.q_yEmCLR StartEnd ;启动时处于停止状态电子爱好者社区_d_q_b C_B MMOV LAMPCODE,#0FEH ;单灯流动的代码电子爱好者社区_t4_w_r3m |_E(C_Z!tLOOP:%d7Wr:I 0ACALL KEY ;调用键盘程序电子爱好者社区p m_o(m_gq A_RJNB F0,LNEXT ;如果无键按下,则继续T G_ZI_p_P_F_g0ACALL KEYPROC ;否则调用键盘处理程序电子爱好者社区_Q$_g%t_S,Q z_f_M!C e3PLNEXT:v_

14、m Xa+_S/n r_S_0ACALL LAMP ;调用灯显示程序电子爱好者社区_K.r0h_D%gAJMP LOOP ;反复循环,主程序到此结束_:S!z_:m,Q&V$u5m0;-T_P)W(K | y_f_AO0DELAY:电子爱好者社区 Q_O%f6a*m_E_pWMOV R7,#100_G_i_B!t9y+r0D1: MOV R6,#100电子爱好者社区/k d+Z_G9JDJNZ R6,$电子爱好者社区_j Qk_F8_xDJNZ R7,D1电子爱好者社区_S_q%S)j T_j,uRET电子爱好者社区7 $E&Q5s_e%b_E_w;-延时程序,键盘处理中调用_q_?_i_pj

15、0KEYPROC:_k3O_ _?0MOV A,B ;从B寄存器中获取键值*E3-F_z|#j0JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)电子爱好者社区_Q_h/y n-KJB ACC.3,KeyOver电子爱好者社区 Ku0d_G_U_L_X_YJB ACC.4,KeyUp电子爱好者社区_r_K/c_v_*Z;d:_PJB ACC.5,KeyDown_M_G_M+c(s/F7H0AJMP KEY_RET电子爱好者社区 A_q3z_k_?_l_I_KeyStart:_t_Y#I_0SETB StartEnd ;第一个键按下后的处理#D7

16、R_p3A_0AJMP KEY_RET电子爱好者社区+g_o:yw1|_E9z)v!hKeyOver:电子爱好者社区_x_6M&_O)s#X-XCLR StartEnd ;第二个键按下后的处理电子爱好者社区!_(w:_ZdA4pu4W1j_AAJMP KEY_RET_q2c_r o0KeyUp: SETB UpDown ;第三个键按下后的处理电子爱好者社区i:F w_y_A3s)AJMP KEY_RET_R)AG;e9r-0KeyDown:电子爱好者社区%_14U_E_n _CLR UpDown ;第四个键按下后的处理)kB L.E;C z(s1F4L B0KEY_RET:RET_f_U_Q/

17、B_By_U5U/F0KEY:电子爱好者社区_?_y_N_y_n9R_TCLR F0 ;清F0,表示无键按下。K4F:K$N_F6X)l0ORL P3,#00111100B ;将P3口的接有键的四位置1_s&O r0k_Y0MOV A,P3 ;取P3的值电子爱好者社区_H_w*y_|6D*y_u8q&b/s_xORL A,#11000011B ;将其余4位置1电子爱好者社区_J1b1_e_ pkCPL A ;取反电子爱好者社区,Wn |_c_k_lJZ K_RET ;如果为0则一定无键按下_g*a*J +0ACALL DELAY ;否则延时去键抖电子爱好者社区6l i2m%A z_?_p_OR

18、L P3,#00111100B电子爱好者社区_O_|_+N_c_SMOV A,P3电子爱好者社区_j_Q!n_aaXw ORL A,#11000011Bq5?2m*_?#G0CPL A电子爱好者社区_f_G9K#f_z_Z JZ K_RET电子爱好者社区285y$m V5i_s/v.tMOV B,A ;确实有键按下,将键值存入B中.PF-UB/h_m0SETB F0 ;设置有键按下的标志&s T_wO-g_x B_a0K_RET:电子爱好者社区(c4U(o _s6sORL P3,#00111100B ;此处循环等待键的释放电子爱好者社区-:o_JJv D-B_g0F_jMOV A,P3电子爱好

19、者社区_y._ &D_G_EORL A,#11000011B电子爱好者社区?O4Q_G_H_ gCPL AQ:l5b)L;Q s Zj0JZ K_RET1 ;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回电子爱好者社区&A kJ_e _N$dAJMP K_RET_tr/C_x_hq|0K_RET1:电子爱好者社区6v3W_?D_L_Z5RETS B2M_u_F _x/0;-电子爱好者社区_n1:M+C w_BD500MS: ;流水灯的延迟时间,Q_l_|_E9|N_g0PUSH PSW电子爱好者社区.H_Q_X_V_c+fY MSETB RS0电子爱好者社区*O_O5E_Q_a

20、I_T_m&sMOV R7,#200电子爱好者社区_B_s_S/K#S*L_htD51: MOV R6,#250_E_n T_Ez.a%T g_r0D52: NOP电子爱好者社区 C_d$K_,u5_bNOP电子爱好者社区!l_J2J0P!a5_j GNOP电子爱好者社区.W_I1x:2B%DVNOP_f_vk!A_t%*n0DJNZ R6,D52_S;_%x_xSg8u I0DJNZ R7,D51电子爱好者社区_a(k_J#os_y_OPOP PSW电子爱好者社区0a%e_m5Dn-u)URET电子爱好者社区_s9G&F)I_L d,PY _;-电子爱好者社区/C 0i_H_Q2o_q)c#

21、fLAMP:/A/_c8_q4-)S_O0JB StartEnd,LampStart ;如果StartEnd=1,则启动4_A,K5x _S X;G1r0MOV P1,#0FFH0o h_T8q_f v0AJMP LAMPRET ;否则关闭所有显示,返回,p_c z s/;z i_dU9bQ0LampStart:*J!d x2_:D Q0JB UpDown,LAMPUP ;如果UpDown=1,则向上流动电子爱好者社区_u!C_u_z#MOV A,LAMPCODE电子爱好者社区 t&F c kj3c-RL A ;实际就是左移位而已_F d_x_F1l_A0MOV LAMPCODE,A电子爱好者

22、社区_W$W3W(&_e l_MMOV P1,A电子爱好者社区_F9J!m _m&A/t_U FLCALL D500MS6Q4H5I_D.D_S0AJMP LAMPRET电子爱好者社区_o_P d_k_t ?_z;HLAMPUP:电子爱好者社区_E9Jk7d*R_&GMOV A,LAMPCODE电子爱好者社区_M$:E9F_RR A ;向下流动实际就是右移电子爱好者社区4l/|2ChC3rMOV LAMPCODE,A电子爱好者社区 _*V_Z t_n,v_pMOV P1,A_H X_I_|7O9P_0LCALL D500MS0w7K_&o oF_u0LAMPRET:g-l_N_#v x S0R

23、ET电子爱好者社区+2F%X6D)N1JEND_t/O9f_A1I c#L_C0T_t0以上程序功能很简单,但它演示了一个键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按键反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家可以仔细考虑一下这些问题,再想想有什么好的解决办法。1J,m2K_w_nQu8U_h02、采用中断方式:如图4所示。各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,

24、单片机再去做相应的处理单片机音乐程序设计作者:佚名 文章来源: 点击数:3744 更新时间:2009/4/1 15:25:50 热利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生200HZ的音频信号,按图1接入喇叭(若

25、属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ的音调。将上述程序键入学习机,并持续修改R3的常数能感到音调的变化。乐曲中,每一音符对应着确定的频率,表1给出C调时各音符频率及其对应的时间常数。读者能根据表1所供给的常数,将其16进制代码送入R3,反复练习体会。根据表1能奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控

26、制乐曲节奏,即一音符的持续时间。 音符的节拍我们能用定时器T0来控制,送入不一样的初值,就能产生不一样的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系见表2。 但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不一样节拍。我们能用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,对应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,对应时间长数为192(即C0H)。 我们将每一

27、音符的时间常数和其对应的节拍常数作为一组,按次序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就能实现演奏效果。此外,结束符和体止符能分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生对应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不一样的音符。 下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样型号的学习机,只需对应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译

28、成码表输入机器,而程序不变。本实验办法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。程序清单(略,请参看源程序的说明)。程序框图如图2所示。 单片机教程网硬件连接说明: 随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。音乐程序汇编代码代码1 -Voice.asm-ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MO

29、V TH0,#0D8HMOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETISTART: MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTRMOV 20H,#00H ;中断计数器清0MOV B,#00H ;表序号清0MUSIC1:NOPCLR AMOVC A,A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,A+DPTR ;取节拍代码送R7MOV R7,ASETB TR0 ;启动计数MUSIC2:NOPCPL P1.0MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTR; INC BLJMP MUSIC1MUSIC3:NOPCLR TR0 ;休止100毫秒MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1