当前位置:首页 > 课程设计报告-电子琴
单片机最小系统原理图:
三、控制算法:
对于电子琴来说,其主要原理是利用单片机某个口线不断的输出“高”“低”电平,则在该口在线就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音,若再利用过程控制“高”“低”电平的持续时间,就能改变输出波形的频率,从而改变音调。对于AT89C2051单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延时的时间就可以改变输出方波的频率,而单片机延时主要有两种方法:
1.使用循环语句来实现延时,让单片机循环的执行某条指令然后根据单
片机每条指令运行的时间以及循环的次数来计算延时时间。 2.使用单片机的定时/计数器延时。AT89S52单片机内部有两个16位的
定时/计数器T0和T1,当对单片机的内部晶振驱动时钟计数时,每个机器周期定时/计数器的计数值就加1,当计数值达到计数最大值时计数完毕并通知单片机的CPU;对外部输入的时钟信号计数时,外部时钟的每个时钟上升沿定时/计数器的计数值就加1,当计数值达到计数最大值时计数完毕并通知单片机的CPU。因此,如果知道单片机的机器周期或者外部输入时钟信号的周期,单片机就可以根据定时器的计数值计算出定时的时间。
本实验采用第二种方式:
计数初值的计算方法:用最大计数量减去需要的计数次数即可。例:如果T0运行于定时状态,单片机的晶振是12MHz,要求定时lOOus,那么定时器要计 100个机器周期,当TO工作在工作方式O时计数初值应该是8192—100=8092;工作在方式1时的计数初值应该是65536-100= 65436;工作在方式2,3时的计数初值应该是256—100=156。当然,此次实验使用的是T1工作方式。
设音符的频率为f,则计数初值=65336一各个音符的周期=65536-
四、软件控制程序流程图:
开始 T0初始化并开中断允许放T0中断 N 按键按下成功否? Y 识别按键功能 根据按键功能,装入音符初始值到T1中 启动T1工作 N 按键释放成功否? 停止T1工作
附录: 1. 参考文献:
[1] 大学生电子实验室WWW.CEET.HBNU.EDU.CN/BBS/ [2] 电子工程世界WWW.EEWORLD.COM [3] 元器件交易网WWW.CECB2B.COM [4] 中国知网WWW.CNKI.COM.CN
程序代码:
/************************************************** 共有7种音符 有三种音调可选择
C调 1 2 3 4 5 6 7 (do rai mi fa so la xi) g调 1 2 3 4 5 6 7 (fa so la xi do rai mi) 5=1,6=2,7=3,1=4,2=5,3=6,4=7 可保存音乐
**************************************************/ #include
#define uint unsigned int #define uchar unsigned char
uint code table2[]={ //G音 0 ,65178, 65217 ,65252 , 65283, 65058 ,65110 ,65157 };
uint code table3[]={ //C调 0 ,65058 ,65110 ,65157 , 65178,65217 ,65252 ,65283 };
uint table[12]={0}; sbit beep=P2^3;
uint num,CTH0,CTL0,i,j,m; uchartemp,flag; void delay(uint); voidkeyscan();
共分享92篇相关文档