(2) 控制寄存器TCON,控制定时器启动、停止及对其标志溢出和中断,如表4所示。
表4 TCON格式
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
① TF0 (TF1):T0 (T1)溢出标志。当T0 (T1)计数溢出,该位被硬件置1,向CPU发出中断请求,若CPU响应,则该位被硬件清0。
② TR0、TR1:运行控制位。软件置1或置0对定时/计数器启动或关闭。
本系统采用12MHz晶振,定时器T0,选用方式1工作模式,TMOD=0x01。
3.2 音频设计
3.2.1 发声原理
声音是由发声物体振动产生,振动的频率高为高音,振动的频率低则为低音。电子琴可以弹奏很多音乐,而每一首完整的音乐是由许多音符构成,每个音符都有自己不同的频率。通过对不同频率进行随意组合并加以控制就构成了不同的乐曲[8]。
利用AT89C51单片机产生一频率的方波的方式模拟产生音符。将单片机的P3.5口线输出高电平,利用定时/计数器T0延时一段时间后再输出低电平,延时的时间不同,单片机的方波输出频率就不同。通过频率的变化产生不同电平去驱动发音电路,就可以得到要弹奏的音符[9]。
3.2.2 音频计算
要产生对应的音频脉冲需要计算出某音符的周期,然后再除以2。在本次设计中震荡电路选择的晶振为12MHz,使用定时/计数器T0,工作模式1。利用单片机的半周期进行计时,计满以后使P3.5反向,再重复计时然后再反向。通过改变计数初值TH0、TL0产生不同频率的脉冲信号。计数脉冲个数与频率的关系:
(2)
计数初值的算法表达式:
(3)
表达式中N代表计数脉冲个数,fi 代表机器频率(晶振为12MHz,其频率为1MHz),fr是音符的频率[10]。
在本次设计中有八个按键,设计产生1、2、3、4、5、6、7、1,八个音符。已知中音DO的频率fr=523Hz,根据表达式得T=65536-500000÷523=64580。按照表达式根据其他音阶的频率计算他们的计数初值得到中高音符与定时器的计数初值,如表5。在编程中建立表格,AT89C51通过软件查询获取数据信息[11]。
表5 音符频率表
音符 频率(Hz) T值 音符 频率(Hz) T值
中 1 DO 523 64580 中 5 SO 784 64898
中 2 RE 587 64684 中 6 LA 880 64968
中 3 M 659 64777 中 7 SI 988 65030
中 4 FA 698 64820 高 1 DO 1064 65058
3.3 I/O并行口驱动LED显示
将单片机的P1.0~P1.1接键盘的2条行线,P1.4~P1.7接键盘4条列线,P0.0~P0.7分别与8个共阳极的LED灯的阴极相连。在弹奏电子琴的过程中,单片机可以通过软件查询到弹奏不同音符时对应的按键状态以及LED 灯指示状态。如表6所示。 51单片机八音阶电子琴设计+流程图+程序代码(6):http://www.youerw.com/zidonghua/lunwen_566.html