摘要。本文是应用stc89c52单片机原理和控制理论来设计**盒的硬件电路,并利用汇编语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的**,再利用延迟来控制发音时间的长短。
该程序通过把乐谱转化成相应的定时常数来驱动发音设备演奏出悦耳动听的**。这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的**只需要改变相应的定时常数即可。对单片机和**爱好者有一定的借鉴价值。
关键词:stc89c52单片机**盒汇编语言。
目录。1.设计目的及要求 1
1.1 设计目的 1
1.2 设计要求 1
2 .设计方案及原理 1
2.1 设计原理1
2.2 总设计思想 2
3.硬件设计 3
4.软件设计 3
4.1 音调、节拍以及编码的确定方法 3
4.2 程序流程图 4
4.3 程序(汇编语言) 5
5. 总结8
参考文献81.设计目的及要求。
1.1设计目的
随着电子技术及计算机技术的发展,单片机在日常生活中的应用越来越广泛,同时也显现出了它的重要性,尤其在一些特殊的场合更是不可代替。为熟悉单片机的应用。要求设计一个基于stc89c52单片机的带彩灯外观的**盒。
1.2 设计要求。
**盒有三个按键key1,key2,key3,其中key1控制彩灯的样式,本设计有六种彩灯花样,每按一次变换一种样式。key2控制****,本设计有五首**,每按一次变换到下一首,同时八路led灯随音调不同而闪烁。key3为总开关用于关闭**跟彩灯。
2.设计方案及原理。
2.1设计原理。
音调之所以不同是因为频率的不同。根据每个音调的频率单片机内部的定时计数器来产生相应的**脉冲。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o口反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。利用stc89c52的内部定时计数器工作在方式1下,改变初值th0及tl0以产生不同频率。此外结束符和休止符可以分别用**0xff和0x00来表示,若查表结果为0xff,则表示曲子终了;若查表结果为0x00,则产生相应的停顿效果。
例如频率为523hz,其周期t=1/523=1912us,定时时间为1912/2=956us因此只要令计数器计时956us/1us=956次(若晶振频率为6mhz),在每次计数956次时将i/o反相,就可得到中音do(523hz)。根据计数次数就可算出计数初值。要产生**光有音调是不行的,每个音调还有持续一定的时间。
这可以用延时程序delay()来实现。因此每个****有八位数字组成,高四位控制音调,低四位通过延时程序对该音调进行延时。通过子函数连续不断的调用****就产生了动听的**。
音调的频率与时间都不同,让do、re、mi、fa、so、la、si分别对应八路led灯中的一个,这样****的同时就有led灯对应闪烁。
2.2总体设计思想。
图1思路图。
如图1所示按键部分有三个键,分别结于外部中断p3.2/int0,p3.3/int1,及串行口p3.
1/txd上,p3.2每产生一次中断count1加一,根据count1的值来决定花样灯的种类。p3.
3每产生一次中断count2加一,根据count2的数值来决定**哪一首歌曲。p3.1接总开关的。
****,及花样灯均通过调用子程序来实现。八路led灯灯接到p1口。扬声器接到p3.
7上。总体设计电路原理图,如图2。
图2原理图。
3硬件设计。
电路由stc89c52八路led灯,排阻,三个开关,扬声器及晶振组成,搭建如图3。
图3硬件图。
4.软件设计。
在本程序中设置了一个标志——count1,分别初始化为0。按键1使得count1在1~4之间切换。程序检测count1的值,count1等于1时**第一首歌曲,等于2时**第二首。
4.1音调、节拍以及编码的确定方法。
一般说来,单片机演奏**基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
不同音高的乐音是用c、d、e、f、g、a、b来表示,这7个字母就是**的音名,它们一般依次唱成do、re、mi、fa、so、la、si,即唱成简谱的,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即tone。把c、d、e、f、g、a、b这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,c–d、d–e、f–g、g–a、a–b两音之间隔着一个黑键,他们之间的距离就是全音;e–f、b–c两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音do的频率(1046hz)刚好是中音do的频率(523hz)的一倍,中音do的频率(523hz)刚好是低音do频率(266hz)的一倍;同样的,高音re的频率(1175hz)刚好是中音re的频率(587hz)的一倍,中音re的频率(587hz)刚好是低音re频率(294hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。
2)利用at89c51的内部定时器使其工作在计数器模式mode1下,改变计数值th0及tl0以产生不同频率的方法。此外结束符和休止符可以分别用**00h和ffh来表示,若查表结果为00h,则表示曲子终了;若查表结果为ffh,则产生相应的停顿效果。3)例如频率为523hz,其周期t=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将i/o反相,就可得到中音do(523hz)。
4.2程序流程图。
4.3汇编语言程序。
org 0000h
ajmp main
org 000bh
jmp tim0
org 0030h
main: ;主程序。
setb p1.1
clr p1.4
setb p3.0
mov tmod,#01h ;设定时方式。
mov ie,#82h ;开中断。
start0:
mov 30h,#00h ;
next:mov a,30h
mov dptr,#table
movc a,@a+dptr ;查表取音调和节拍。
mov r2,a
jz end0 ;为零,不进行处理。
anl a,#0fh
mov r5,a ;将节拍存入r5
mov a,r2
swap a
anl a,#0fh
jnz sing ;根据音调决定是否演奏。
clr tr0
jmp d1
sing:dec a
mov 22h,a ;将音调存入22h.
rl amov dptr,#table1
movc a,@a+dptr ;根据音调决定定时器初值。
mov th0,a ;放入th0
mov 21h,a
mov a,22h
rl ainc a
movc a,@a+dptr
mov tl0,a ;放入tl0
mov 20h,a
setb tr0 ;启动定时。
d1: call delay
inc 30h
jmp next
end0:clr tr0
jmp start0
tim0: ;定时器中断服务程序。
push acc
push psw
mov tl0,20h ;重赋初值。
mov th0,21h
cpl p1.7
pop psw
pop acc
retidelay:mov r7,#02h ;延时子程序。
d2: mov r4,#
d3: mov r3,#
djnz r3,$
djnz r4,d3
djnz r7,d2
djnz r5,delay
rettable1: ;决定音调的定时初值。
dw 64260,64400,64524,64580
dw 64684,64777,64820,64898
dw 64968,65030,65
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
end5.总结。
单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了长达一个学期的时间的摸索与实验,使我们不仅仅是对于单片机入门软件与硬件的常用设计与功能,还使我们对于一项设计研究的制作过程所需要的详细步骤和具体的实现方法的力度的掌握。
当然在这次宝贵的设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。但是,光是完成了作品还是不可以自我满足的,在从一开始的时候就怀着将作品制作得更加人性化,更加令人满意,更加地使功能完美又方便地被应用领域这个最终目的下,随着对单片机这门学科的认识加深,到达了拓展的程度,我想这个目的将在不远的时期内被实现。
总之,这次设计从软件编写、调试到软硬件联机调试,我们倾注了大量的时间和心血。真是曾经为程序的编写而冥思苦想过,曾经为无法找出错误而郁闷苦恼过,也曾经为某一功能不能实现而犹豫彷徨过,但最终我们完成设计了。
社。2006.10
单片机课程设计报告
单片机系统课程设计报告。专业 电气技术。学生姓名 朱海李威张杰。学号。指导教师 陈高燕。完成日期 2014 年 7 月 5 日。目录。1 设计任务和性能指标 1 1.1设计任务 1 2 设计方案 1 2.1方案论证 2 2.2总体设计框图 2 3 系统硬件设计 4 3.1红外线解码电路设计 4 3....
单片机课程设计报告
韶关学院。课程设计说明书 设计题目 基于单片机控制的智能交通灯设计。课程名称 微机原理与应用实训。学生姓名 学号。院系 物理与机电工程学院汽车系。专业班级 12机械制造及其自动化 5班。指导教师姓名及职称 谢杰讲师。陈锦儒助理实验师。起止时间 2015 年 3 月 2015 年 5 月。课程设计评分...
单片机课程设计报告
南京工程学院。课程设计说明书 题目实时钟芯片pcf8563的应用 课程名称单片机原理及应用a 院 系 部 中心 通信工程学院。专业电子信息工程 传感网 班级。学生姓名。学号。设计地点信息楼 c 210 指导教师。设计起止时间 2013年12月23日至 2013年12月27日。一 摘要1 二 课程设计...