




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 单片机课程设计实验报告电子音调发生器姓名: 日期: 2009年6月29日星期一目录(一)实验目的2(二)设计任务及要求2(三)工作原理及设计思路2(四)实现功能设计3(五)软件设计3(六)电路设计35(七)调试36(八)实验体会37(一)实验目的1 了解计算机发声原理。2 熟悉定时器和键盘扫描电路的工作原理及编程方法。(二)设计任务及要求利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:1利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的音调,依次拨动K0K7,蜂鸣器发出1234567i八个音调。2编写2支歌曲,并可进行选择播放。(三)工作原理及设计思路音节由
2、不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的
3、整数倍, 每个音节相应的定时器初值X可按下法计算: (1/2)*(1/f)=(12/fose)*(216-x)即 x=216-(fose/24f)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H 其它的可同样求得。 表1 音调频率(Hz)X(HEX)1262F9212294F9E13330FA8C4349FAD85392FB686440FBE97494FC5Bi523FC8F(四)实现功能设计实现两个主要功能:电子琴与音乐播放;一个辅助功能:在液晶上显示相关信息。1、电子琴:4*4的矩阵16个按键,按键0实现两个功能的
4、切换,其余按键分别发出音调 低音5、6、7,中音1、2、3、4、5、6、7,高音1、2、3、4、5。发音的同时在液晶显示屏上显示出对应的音调。2、音乐播放:按键0实现两个功能的切换,按键1实现播放类型选择(单曲循环播放、所有循环播放),其余按键分别对应一首歌。目前已经有9首歌。播放的同时,在液晶上显示出歌名。(五)软件设计根据要实现的功能,流程图如下:开始系统初始化判断按键判断按键电子琴液晶显示录音调整时钟功能选择音乐#include <AT89X52.H>#include <intrins.h>#define nop _nop_() #define ucha
5、r unsigned char #define uint unsigned int#define PAI_BASE 15#define MUSIC_NUM 9#define SCAN_CYCLE 500#define BEEP P3_3/*液晶显示相关变量*/sbit LCD_RS = P27; sbit LCD_RW = P26;sbit LCD_EN = P25; static uchar th0_f; /在中断中装载的 T0 的值高 8 位static uchar tl0_f; /在中断中装载的 T0 的值低 8 位static timebuffer,Record_counter,Rec
6、ord_flag=0;static uchar key2,key=16,scounter=0,Record_time;static uchar s_musicCounter=0x00,s_tableCounter;bit Rplay_flag=0;bit K0_flag=0;bit Music_flag0;bit Music_flag=0;bit Freq_flag=0;bit disptime_flag=0;bit musicAutoFlag=0;/sbit BEEP = P3_3; /喇叭输出脚/延时子程序1void delay(int ms) int i; while(ms-) for(
7、i = 0; i< 250; i+) _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* */*/bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; /*/* */*写指令数据到LCD *
8、/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; /*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */* */*/void
9、lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; /*/* */* 设定显示位置 */* */*/void lcd_pos(uchar pos) lcd_wcmd(pos|0x80); /数据指针=80+地址变量/*/* */* LCD初始化设定 */* */*/void lcd_init
10、() delay(15); /等待LCD电源稳定 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); /显示开,关光标 delay(5); lcd_wcmd(0x06); /移动光标 delay(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay(5);/*/* */* 清屏子程序 */* */*/void lcd_clr() lcd_wcmd(0x01); /清除LCD的显示内容 delay(5)
11、;/静态显示字符串void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/ register i=0;while(strpointi!=0) lcd_wdat(strpointi);i+;/*/*Constant Tables*/const char code c_music1=0x82,0x01,0x81,0x94,0x84, /*生日快乐歌*/ 0xb4,0xa4,0x04,0x82,0x01,0x81,0x94,0x84,0xc4,0xb4,0x04,0x82,0x01,0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2,
12、0x01,0xe1,0xd4,0xb4,0xc4,0xb4,0x04,0x00;const char code c_music2=0x62, 0x52, /*两只蝴蝶*/ 0x64, 0x64, 0x02, 0x52, 0x62, 0x52, 0x44, 0x44, 0x04, 0x22, 0x42, 0x54, 0x52, 0x62, 0x52, 0x42, 0x22, 0x42, 0x14, 0x14, 0x04, 0x62, 0x52, 0x64, 0x64, 0x02, 0x52, 0x62, 0x52, 0x44, 0x44, 0x04, 0x22, 0x42, 0x54, 0x52
13、, 0x62, 0x52, 0x42, 0x22, 0x42, 0x54, 0x54, 0x04, 0x62, 0x82,0x84, 0x84, 0x02, 0x82, 0x92, 0x82,0x64, 0x64, 0x04, 0x52, 0x52,0x54, 0x52, 0x62, 0x52, 0x42, 0x22, 0x91, 0x41,0x42, 0x42, 0x44, 0x44, 0x44, 0x02, 0x82, 0x82, 0x92, 0xb2, 0xa2, 0xa2, 0x92, 0x64, 0x52, 0x62, 0x64, 0x64, 0x02, 0x62, 0x62, 0x
14、82, 0x94, 0x94, 0x02, 0x22, 0x62, 0x52, 0x54, 0x54, 0x04, 0x62, 0x82, 0x82, 0x62, 0x84, 0x02, 0xb2, 0xb2, 0xa2, 0x92, 0xa2, 0x64, 0x02, 0x92, 0x92, 0xa2, 0x92, 0x82, 0x62, 0x52, 0x52, 0x62, 0x52, 0x62, 0x84, 0x84, 0x02, 0x82, 0x82, 0x92, 0x92, 0x82, 0x62, 0x52, 0x52, 0x12, 0x12, 0x22, 0x44, 0x44, 0x
15、44, 0x44, 0x00;const char code c_music3=0x04, 0x42, 0x41, 0x51, 0x62, 0x62, 0x52, 0x41, 0x51, 0x54, 0x02, 0x41, 0x51, /*老鼠爱大米*/ 0x62, 0x62, 0x52, 0x42, 0x44, 0x02, 0x11, 0x21, 0x14, 0x11, 0x11, 0x21, 0x41, 0x44, 0x02, 0x42, 0x42, 0x42, 0x42, 0x41, 0x51, 0x54, 0x42, 0x51, 0x61, 0x62, 0x62, 0x82, 0x91
16、, 0x51, 0x54, 0x62, 0x51, 0x41, 0x42, 0x42, 0x52, 0x61, 0x81, 0x84, 0x02, 0x81, 0x81, 0x92, 0x41, 0x41, 0x42, 0x61, 0x01, 0x52, 0x42, 0x42, 0x51, 0x41, 0x44, 0x44, 0x44, 0x62, 0x61, 0x81, 0x82, 0x81, 0x81, 0x82, 0x81, 0x91, 0x94, 0x62, 0x52, 0x42, 0x42, 0x42, 0x51, 0x61, 0x64, 0x02, 0x61, 0x81, 0x82
17、, 0x82, 0x82, 0x91, 0xb1, 0xb2, 0x92, 0x82, 0x62,0x52, 0x42, 0x42, 0x22, 0x54, 0x02, 0x61, 0x81,0x82, 0x82, 0x81, 0x92, 0x81, 0x94, 0x62, 0x52, 0x42, 0x42, 0x42, 0x51, 0x61, 0x64, 0x02, 0x61, 0x81, 0x82, 0x82, 0x82, 0x91, 0xb1, 0xb2, 0x92, 0x82, 0x61, 0x51, 0x52, 0x52, 0x54, 0x54, 0x41, 0x62, 0x71,
18、0x62, 0x52, 0x54, 0x54, 0x62, 0x51, 0x41, 0x44, 0x62, 0x51, 0x41, 0x44, 0x62, 0x52, 0x62, 0x42, 0x62, 0x91, 0x81, 0x84, 0x02, 0x61, 0x81, 0x92, 0x91, 0x81, 0x82, 0x91, 0x81, 0x84, 0x61, 0x51, 0x42, 0x52, 0x51, 0x61, 0x52, 0x41, 0x51, 0x41, 0x53, 0x62, 0x51, 0x41, 0x44, 0x62, 0x51, 0x41, 0x44, 0x62,
19、0x52, 0x62, 0x42, 0x61, 0x92, 0x81, 0x84, 0x02, 0x61, 0x81, 0x92, 0x92, 0xb2, 0x81, 0x91, 0x82, 0x01, 0x81, 0x61, 0x51, 0x41, 0x54, 0x51, 0x41, 0x51, 0x61, 0x54, 0x62, 0x62, 0x54, 0x02, 0x42, 0x44, 0x44, 0x00;const char code c_music4=0x04, 0x02, 0x41, 0x51, 0x62, 0x61, 0x61, 0x62, 0x52, /*梦醒时分*/ 0x6
20、2, 0x81, 0x61, 0x62, 0x61, 0x81, 0x92, 0x92, 0x92, 0xa2, 0x82, 0x62, 0x62, 0x62, 0x61, 0x51, 0x42, 0x41, 0x41, 0x42, 0x22, 0x62, 0x81, 0x41, 0x44, 0x51, 0x52, 0x01, 0x52, 0x42, 0x81, 0x61, 0x52, 0x52, 0x41, 0x51, 0x62, 0x61, 0x61, 0x62, 0x52, 0x62, 0x81, 0x61, 0x62, 0x61, 0x81, 0x92, 0x91, 0x91, 0x9
21、2, 0xa2, 0x82, 0x62, 0x61, 0x81, 0x81, 0x81, 0x92, 0xb2, 0xb2, 0x92, 0x72, 0x52, 0x52, 0x81, 0x81, 0x92, 0xb2, 0xb2, 0x92, 0xb2, 0xc2, 0xc4, 0xc4, 0x01, 0x81, 0x81, 0x81, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xc1, 0xc1, 0xc2, 0xb1, 0xa1, 0xb2, 0xb2, 0xb2, 0xc2, 0x62, 0x82, 0x82, 0x81, 0x81, 0x92, 0xb1, 0xb
22、1, 0xb2, 0xb2, 0xc2, 0x91, 0xb1, 0xb2, 0xb1, 0xb1, 0xc2, 0xc1, 0xc1, 0xc2, 0xb2, 0xd2, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x81, 0xd2, 0xd2, 0xd2, 0xf2, 0xd2, 0xc1, 0xc1, 0xc2, 0xb1, 0xa1, 0xb2, 0xb2, 0xb2, 0xc2, 0x62, 0x82, 0x82, 0x81, 0x81, 0x92, 0xb1, 0xb1, 0xb2, 0xb1, 0xb1, 0xc2, 0x91, 0xb1, 0xb2, 0xb
23、1, 0xb1, 0xc2, 0xc1, 0xc1, 0xc2, 0xb2, 0xd4, 0xc2, 0x01, 0xb1, 0xb4, 0xb4, 0xb4, 0xb4, 0x00;const char code c_music5=0x54, 0x64, 0x64, /*大长今*/ 0x64, 0x02, 0x52, 0x44, 0x24, 0x44, 0x44, 0x51, 0x43, 0x44, 0x44, 0x54, 0x64, 0x64, 0x64, 0x02, 0x82, 0x64, 0x64, 0x54, 0x64, 0x64, 0x64, 0x64, 0x84, 0x94, 0
24、x94, 0x94, 0x84, 0x64, 0x64, 0x84, 0x94, 0x81, 0x91, 0x82, 0x84, 0x84, 0x54, 0x64, 0x64, 0x54, 0x02, 0x62, 0x64, 0x54, 0x64, 0x24, 0x41, 0x23, 0x94, 0x94, 0x24, 0x24, 0x24, 0x54, 0x64, 0x64, 0x64, 0x02, 0x52, 0x44, 0x24, 0x44, 0x44, 0x51, 0x43, 0x44, 0x44, 0x54, 0x64, 0x64, 0x64, 0x02, 0x82, 0x64, 0
25、x64, 0x54, 0x64, 0x64, 0x64, 0x64, 0x84, 0x94, 0x94, 0x94, 0x02, 0x82, 0x64, 0x64, 0x84, 0x94, 0x84, 0x84, 0x84, 0x54, 0x64, 0x64, 0x54, 0x02, 0x62, 0x64, 0x54, 0x64, 0x24, 0x41, 0x23, 0x24, 0x24, 0x24, 0x24, 0x24, 0x54, 0x02, 0x42, 0x24, 0x54, 0x02, 0x42, 0x24, 0x54, 0x64, 0x44, 0x54, 0x02, 0x62, 0
26、x84, 0x94, 0x02, 0x82, 0x64, 0x54, 0x02, 0x42, 0x24, 0x24, 0x14, 0x24, 0x41, 0x23, 0x24, 0x24, 0x24, 0x24, 0x24, 0x14, 0x14, 0x14, 0x14, 0x02, 0x22, 0x42, 0x52, 0x62, 0x52, 0x44, 0x02, 0x22, 0x44, 0x44, 0x54, 0x64, 0x64, 0x64, 0x64, 0x64, 0x84, 0x94, 0x02, 0xb2, 0x94, 0x84, 0x84, 0x84, 0x84, 0x61, 0
27、x81, 0x92, 0x04, 0x92, 0x82, 0x64, 0x02, 0x52, 0x64, 0x02, 0x52, 0x62, 0x52, 0x44, 0x44, 0x44, 0x41, 0x23, 0x24, 0x44, 0x54, 0x54, 0x54, 0x54, 0x64, 0x64, 0x44, 0x41, 0x23, 0x24, 0x24, 0x24, 0x24, 0x00;const char code c_music6=0x24, 0x42, 0x52, 0x64, 0x62, 0x92, /*漫步人生路*/ 0x84, 0x62, 0x52, 0x64, 0x0
28、2, 0x62, 0x72, 0x62, 0x62, 0x52, 0x52, 0x42, 0x41, 0x31, 0x22, 0x44, 0x02, 0x52, 0x34, 0x34, 0x24, 0x42, 0x52, 0x64, 0x62, 0x92, 0xa4, 0x82, 0x62, 0x64, 0x02, 0x62, 0x72, 0x62, 0x52, 0x42, 0x32, 0x42, 0x52, 0x62, 0x42, 0x32, 0x22, 0x12, 0x24, 0x24, 0x42, 0x32, 0x42, 0x52, 0x64, 0x52, 0x62,0x74, 0x74
29、, 0x72, 0x81, 0x71, 0x62, 0x52, 0x64, 0x74, 0x84, 0x02, 0x62, 0x94, 0x92, 0x82, 0x94, 0x92, 0xb2, 0x92, 0x82, 0x82, 0x92, 0x64, 0x52, 0x42, 0x54, 0x52, 0x42, 0x54, 0x42, 0x42, 0x82, 0x62, 0x62, 0x52, 0x42, 0x34, 0x62, 0x62, 0x94, 0x92, 0x82, 0x94, 0x92, 0xb2, 0x92, 0x82, 0x82, 0x92, 0x64, 0x52, 0x42
30、, 0x54, 0x42, 0x82, 0x64, 0x52, 0x42, 0x52, 0x61, 0x51, 0x42, 0x32, 0x24, 0x24, 0x00;const char code c_music7=0x02, 0x12, 0x12, 0x22, /*最浪漫的事*/ 0x44, 0x42, 0x42, 0x42, 0x22, 0x22, 0x62, 0x64, 0x64, 0x02, 0x12, 0x24, 0x42, 0x42, 0x42, 0x42, 0x44, 0x62, 0x82, 0x84, 0x84, 0x84, 0x02, 0x82, 0x92, 0x82, 0x92, 0x82, 0x94, 0x82, 0x51, 0x61, 0x62, 0x51, 0x41, 0x44, 0x02, 0x42, 0x42, 0x22, 0x44, 0x42, 0x22, 0x42, 0x64, 0x52, 0x5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安卓的面试题及答案
- 工程晋升面试题及答案
- 传染病考试题及答案
- 公关商务面试题及答案
- 翻译教材考试题及答案
- 地图英文面试题及答案
- T/CAEPI 55-2023污染土壤原位热传导修复工艺设计指南
- 某自治县工贸行业领域重大隐患督导检查工作方案
- 收费站应聘班长演讲稿
- 人生规划课件
- 田亩转户协议书
- 2025年MySQL开发趋势试题及答案研究
- 违约就业协议书
- 《人工智能通识导论(慕课版)》全套教学课件
- 烘培创业合伙协议书
- 2025年信息系统管理知识考试试题及答案
- 马法理学试题及答案
- 2025年全国保密教育线上培训考试试题库附完整答案(夺冠系列)含答案详解
- 视频制作拍摄服务方案投标文件(技术方案)
- 量子计算中的量子比特稳定性研究-全面剖析
- 构建健全企业资金体系
评论
0/150
提交评论