单片机课程设计51系列文档格式.docx
- 文档编号:18249896
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:28
- 大小:357.84KB
单片机课程设计51系列文档格式.docx
《单片机课程设计51系列文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计51系列文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
(5)演奏时可以按键中断;
(6)可以实时显示目前正演奏的单音码。
1.3设计项目与功能简介
1.31设计项目简介
本项目设计是采用STC89C52单片机作为核心,利用单片机技术、无源蜂鸣器、4x4键盘、SPEAKER、以及LCD显示屏实现原理图设计到电路板设计开发,并用C51高级语言进行键盘识别程序设计和音频脉冲输出程序与音频存储程序的设计。
最终能够实现乐曲演奏和音律存储以及自动播放,并且可以通过LCD显示屏显示音符。
1.32系统功能简介
(1)能实现基本的琴键功能。
即按下每一个琴键,单片机能够检测到键盘的按键,并通过键盘的位置,通过程序来控制,使蜂鸣器发出不同频率的声音。
(2)能够实现LCD显示按键。
每按下一个按键时,单片机能够检测到所按下的按键,然后通过按键的位置通过程序控制来实现在LCD中显示相应按键。
(3)能够实现实时存储。
每按下一个按键时,发出一个单音并能将其存储起来。
然后,通过一个播放键将所存储的音乐播放出来。
(4)能够实现按键中断。
在播放音乐时可以按下中断键使音乐暂停与播放。
2硬件设计及说明
2.1硬件系统设计
硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的结构图。
该设计要实现一种由单片机控制可存储式电子琴,因为这是一个比较简单的系统,而STC89C52单片机经济实惠,也有很多优点,其性能完全可以满足设计的需求,所以我们选择STC89C52来作为此设计项目的核心。
电子琴首先必须要有按键,又要求输出16个音阶,所以我们采用了4X4矩阵键盘。
另外LCD显示器件具有工作电流小、重量轻、功耗低、寿命长、字迹清晰美观等优点,在便携式仪表、低功耗应用的仪器仪表中得到了广泛应用,所以我们选用了LCD1602来实现显示相应音符,其总体框图设计如下:
图2.1系统结构图
2.2元件简介
2.21STC89C52
STC89C52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
STC89C52的主要特征:
·
8K字节可编程闪烁存储器寿命:
1000写/擦循环数据保留时间:
10年
全静态工作:
0Hz-24Hz
·
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
6个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
STC89C52的芯片图:
图2.2STC89C52芯片图
2.22蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型
1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。
当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。
在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
2.23矩阵键盘
单片机系统中,若使用按键的数量比较多时,通常选用用矩阵式键盘。
矩阵式键由行线和列线构成,按键位于行、列线的交叉点上,键盘矩阵是由四行四列构成,矩阵的四列和P1口的低四位相连,四行与P1口的高四位相连。
其键盘识别方法如下:
(1)判断键盘中有无键按下将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
(2)判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
图2.3矩阵式键盘结构
2.24LCD1602
LCD1602是以点阵字符型为显示方式的液晶显示器,每行可以显示16个字符,一共可以显示2行。
它由LCD显示屏、扩展驱动器HD44100和控制器HD44780组成,其主要参数如下:
3软件程序设计
3.1软件系统设计
软件设计实际上就是程序编程,根据项目设计要求,我们把软件,设计部分大体分为了四个模块:
音频脉冲产生程序设计、键盘扫描识别程序、实时存储程序与LCD显示程序。
其设计图如下:
图3.1软件系统设计图
其总体流程图如下:
图3.2总体流程图
3.2音乐相关知识
乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音乐的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
3.3产生音频脉冲
在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:
音符
频率(HZ)
计数值(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63737
中5SO
784
64898
低2RE
294
63835
#5SO#
831
94934
#2RE#
311
63928
中6LA
880
64968
低3MI
330
64021
#6LA#
932
64994
低4FA
349
64103
中7SI
968
65030
370
64185
1046
65058
低SO
392
64260
1109
65085
415
64331
高2RE
1175
65110
低6LA
440
64400
1245
65134
466
64463
高3MI
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
1490
65198
554
64633
高5SO
1568
65217
中2RE
587
1661
65235
622
64884
高6LA
1760
65252
中3MI
659
64732
1865
65268
中4FA
698
64820
高7SI
1967
65283
表3-1音符频率与计数值T的对照表
T的值决定了TH0和TL0的值,其关系为:
TH0=T/256,TL0=T%256。
3.4识别矩阵键盘
在单片机应用系统中,键盘的工作方式主要有两种,即编程扫描与定时扫描。
编程扫描即行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下:
(1)检测当前是否有键被按下。
。
(2)去除键抖动。
(3)若有键被按下,应识别出是哪一个键闭合。
方法是对键盘的行线进行逐行扫描。
(4)为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。
定时扫描是利用单片机内部的定时器产生一定时间的定时间隔,当定时时间到就产生定时器溢出中断,CPU响应中断时对键盘进行行扫描取键值,以响应键输入请求。
因为编程扫描CPU需不停地扫描键盘,影响其他功能的执行,工作效率低,所以我们采用了第二种键盘扫描识别方法。
其程序如下:
voidtimer1()interrupt3
{
TL1=0x18;
TH1=0xfc;
KeyScan();
}
此语句实现了每1ms进行一次键盘扫描工作。
函数名称:
键盘扫描子程序
函数功能:
按键状态的采集,定时1ms和消抖掩码实现每个按键20ms的消抖延时
voidKeyScan()
uint8i;
staticuint8iKeyOut=0;
staticuint8KeyScanBuff[4][4];
KeyScanBuff[iKeyOut][0]=((KeyScanBuff[iKeyOut][0]<
<
1)|KEY_IN_1)&
DEBOUNCE_MASK;
KeyScanBuff[iKeyOut][1]=((KeyScanBuff[iKeyOut][1]<
1)|KEY_IN_2)&
KeyScanBuff[iKeyOut][2]=((KeyScanBuff[iKeyOut][2]<
1)|KEY_IN_3)&
KeyScanBuff[iKeyOut][3]=((KeyScanBuff[iKeyOut][3]<
1)|KEY_IN_4)&
for(i=0;
i<
4;
i++)
{
if(KeyScanBuff[iKeyOut][i]==DEBOUNCE_MASK)
{
KeySta[iKeyOut][i]=KEY_UP;
}
elseif(KeyScanBuff[iKeyOut][i]==0)
KeySta[iKeyOut][i]=KEY_DOWN;
iKeyOut=(iKeyOut+1)&
0x3;
switch(iKeyOut)
case0:
KEY_OUT_4=1;
KEY_OUT_1=0;
break;
case1:
KEY_OUT_1=1;
KEY_OUT_2=0;
case2:
KEY_OUT_2=1;
KEY_OUT_3=0;
case3:
KEY_OUT_3=1;
KEY_OUT_4=0;
default:
3.5LCD实时显示
LCD1602的控制器HD44780的主要功能部件有:
DDRAM—显示数据RAM、CGROM—字符产生器ROM、CGRAM—字形产生器RAM、IR—指令寄存器、DR—数据寄存器、BF—忙碌标志信号和AC—地址计数器,七大部分组成。
另外,HD44780还提供了清屏指令、读取状态指令、写数据指令、读数据指令等11条指令对DDRAM的内容和地址进行具体操作,这些指令足以完成我们的设计目标,具体相关程序如下:
LCD1602读繁忙标志位子程序
voidLcd1602WaitReady()
uint8sta;
P0=0xFF;
LCD1602_RS=0;
LCD1602_RW=1;
do
LCD1602_E=1;
_nop_();
sta=P0;
LCD1602_E=0;
}
while((sta&
0x80)!
=0);
LCD1602写命令子函数
voidLcd1602WriteCmd(uint8cmd)
Lcd1602WaitReady();
LCD1602_RW=0;
P0=cmd;
nop_();
LCD1602写数据子函数
voidLcd1602WriteDat(uint8dat)
LCD1602_RS=1;
P0=dat;
_nop_();
LCD1602_E=0;
LCD1602初始化子程序
voidLcd1602Init()
Lcd1602WriteCmd(0x38);
Lcd1602WriteCmd(0x0C);
Lcd1602WriteCmd(0x06);
3.6实时存储音律信息
设计要求要把所弹奏的音律实时存储起来,所以编程时我们定义了一个数组来实现存储。
我们把键值与该键所代表的音律脉冲一对应,在按下某个键时,把它代表的音律脉冲通过查询数组的方式存入另一个数组中,在连续播放时再调用这个数组。
例如music_save[save_count]=i*4+j;
这条语句用来储存键值,music_time[save_count]=key_time;
这条语句用来储存按键按下时间的长短,
if(play_count<
save_count)
STH0=music_tab[music_save[play_count]]/256;
STL0=music_tab[music_save[play_count]]%256;
这些语句用于播放时查找存储的音律信息。
4系统调试
4.1硬件调试
硬件调试主要是针对单片机部分进行调试,自行制作了电路板。
硬件调试我们先采用了普中HC6800-EM3开发板进行调试,后自行制作了电路板,在上电前,先确保电路中不在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。
在确保硬件电路正常,无异常情况(断路或短路)方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要键盘单片机控制部分、LCD显示部分、和音频转换电路硬件调试。
1、键盘单片机控制部分调试:
上电后,随机按动键盘可以发现各个按键对应的正确。
2、LCD电路调试:
接通电源,随机按下按钮可以看到LCD液晶显示数字。
4.2软件调试
软件调试主要方法和技巧:
通常一个调试程序应该具备至少四种性能:
跟踪、断点、查看变量、更改数值。
整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。
我们调试日志如下:
(1)编写了键盘扫描程序,初步实现弹奏。
(2)放弃原来键盘扫描程序,编写新的键盘扫描程序。
(3)实现弹奏和播放储存音乐功能。
(4)初步编写LCD1602的驱动程序。
(5)继续编写LCD1602程序,实现显示弹奏的音符和频谱图。
(6)编写播放暂停功能。
(7)完成在普中HC6800-EM3开发板调试。
5课程设计个人分工及心得体会
5.1个人分工
主程序的编写与整合、键盘扫描及按键动作程序的编写、电路板的加工与调试。
5.2心得体会
通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型,整个过程都需要我们充分利用所学的知识进行思考、借鉴。
可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验,让我们所学到的知识更加深刻,同时把理论与实际充分的结合起来。
总的来说,这次课程设计虽然累,但非常充实。
另外,这次课程设计也让我们懂得了团结的重要性,我们小组5人分工明确,同时也互帮互助,同心协力才出色的完成了这次任务。
在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础。
要做好本次的课程设计,熟练地掌握课本上的理论知识是前提,这样才能对试验中出现的问题进行一定的分析和解决。
另外,还要学会互相帮助,在自己走入困境无法走出时,这时别人的帮助可能会使你豁然开朗。
此外在学习单片机知识的时候对于这个领域有了更新更全面的认识。
作为21世纪的工科大学生,学好单片机,一方面可以加深对计算机原理和结构的认识,另一方面也为自身在专业上的深入发展构筑了一个很好的平台其重要性怎么强调都不为过。
致谢
这次课程设计能够得以顺利完成,是所有指导过我们的老师,帮助过我们的同学的结果。
我们小组在这里对他们表示深深的谢意!
首先,要特别感谢我们的指导老师。
老师丰富的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,朴实无华、平易近人的人格魅力对我们影响深远。
其次,要感谢所有曾经教我们单片机的任课老师—刘鹏老师,他教会我们的不仅仅是专业知识,更多的是对待学习、对待生活的态度。
再次,感谢我们的同学,因为有你们的帮助,我们的项目才得以顺利完成。
参考文献
【1】黄鑫,马善农,赵永科.基于CPLD的电子琴研究与设计[J].科技广场,2007
【2】吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M].清华大学出版社,2001
【3】龙威林,杨冠声,胡山.单片机应用入门:
AT89S51和AVR[M].北京:
化学工业出版社,2008.
【4】张毅刚,MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004
【5】李朝青.单片机原理及接口技术[M].北京:
北京航天航空大学出版色,2001
【6】胡汉才.单片机原理及其接口技术[M].北京:
清华大学出版社,2004
【7】陈明荧.8051单片机课程设计实训教材[M].北京:
清华大学出版社,2003年9月
【8】徐新艳.单片机原理、应用与实践[M].北京:
高等教育出版社,2005年3月
【9】杨恢先,黄辉先.单片机原理及应用[M].北京:
人民邮电出版社,2006
【10】张虹.单片机原理及应用[M].北京:
中国电力出版社,2009
【11】赵亮,侯国锐.单片机C语言编程与实例[M].北京:
人民邮电出版社,2003
附录
附录1:
程序清单
C程序(非程序文字)
/********************************************************************
说明:
********************************************************************/
#include<
reg52.h>
#include<
intrins.h>
#include"
config.h"
//程序设置头文件
uint16codemusic_tab[]={63628,63835,64021,64103,//低音音阶
64260,64400,64524,64580,
64580,64633,64732,64820,//高音音阶
64898,64968,65030,65058};
uint8codeLedshow_mus_tab[]={'
1'
'
2'
3'
4'
'
5'
6'
7'
//低音音阶字符
//高音音阶字符
};
uint8codeLedshow_pic_tab[]={1,2,3,4,//低音音阶频谱图
5,6,7,8,
8,9,10,11,//高音音阶频谱图
12,13,14,15};
volatileuint8KeySta[4][4];
//当前的按键状态
uint8xdatamusic_s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 51 系列
![提示](https://static.bdocx.com/images/bang_tan.gif)