




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计实验报告电子音调发生器姓名: 日期: 2009年6月29日星期一目录(一)实验目的2(二)设计任务及要求2(三)工作原理及设计思路2(四)实现功能设计3(五)软件设计3(六)电路设计35(七)调试36(八)实验体会37(一)实验目的1 了解计算机发声原理。2 熟悉定时器和键盘扫描电路的工作原理及编程方法。(二)设计任务及要求利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:1利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的音调,依次拨动K0K7,蜂鸣器发出1234567i八个音调。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秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍, 每个音节相应的定时器初值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实现两个功能的切换,其余按键分别发出音调低音5、6、7,中音1、2、3、4、5、6、7,高音1、2、3、4、5。发音的同时在液晶显示屏上显示出对应的音调。2、音乐播放:按键0实现两个功能的切换,按键1实现播放类型选择(单曲循环播放、所有循环播放),其余按键分别对应一首歌。目前已经有9首歌。播放的同时,在液晶上显示出歌名。(五)软件设计根据要实现的功能,流程图如下:开始系统初始化判断按键判断按键电子琴液晶显示录音调整时钟功能选择音乐#include #include #define nop _nop_() #define uchar 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,Record_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(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 */*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 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() 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);/静态显示字符串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,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, 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, 0x82, 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, 0x44, 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, 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, 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, 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, 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, /*梦醒时分*/ 0x62, 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, 0x92, 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, 0xb1, 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, 0xb1, 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, 0x94, 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, 0x64, 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, 0x84, 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, 0x81, 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, 0x02, 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, 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, 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, 0x54, 0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古呼和浩特市新城区东街西街街道社区卫生服务中心招聘3人考前自测高频考点模拟试题及完整答案详解
- 2025贵州安顺市紫云苗族布依族自治县利源融资担保有限责任公司招聘1人考前自测高频考点模拟试题及一套完整答案详解
- 2025海南文昌市人民医院编外工作人员招聘(9号)模拟试卷附答案详解(黄金题型)
- 安全培训教师报到册课件
- 安全培训教师工作简历课件
- 小学安全培训总结讲话课件
- 小学安全培训学费课件
- 2025年佳木斯同江市事业单位公开遴选管理人员和专业技术人员73人考前自测高频考点模拟试题及答案详解(夺冠)
- 2025福建三明市大田县住房和城乡建设局(房地产服务中心)补招聘工作人员(政府购买服务)1人模拟试卷及参考答案详解一套
- 2025年杭州市余杭区卫生健康系统事业单位招聘编外工作人员73人模拟试卷及答案详解(夺冠)
- 饮品运输行业分析
- 胸痛的鉴别诊断和诊断流程课件
- 混料错料预防措施培训课件
- 白鹿原名著导读读书分享
- 医疗设备采购 投标技术方案 (技术方案)
- 国开《建设监理》形成性作业1-4答案
- 合同法教案(第十版)教案全套
- 工伤预防知识培训PPT
- 同济大学信纸
- 室早的危险分层及治疗选择
- 交通运输工程施工安全监管台帐(参考)用表样表分享
评论
0/150
提交评论