基于51单片机简易电子琴设计报告(编辑修改稿)内容摘要:
据的高 4位代表音符对应的序列号,低 4 位代表节拍数 //例如 0x82,表示第八个音符 ,延时两个节拍 uchar code Music_One[]={ 0x02,0x82,0x16,0x32,0x54,0x02,0x52,0xA6,0x32,0x54,0x02,0x52,0x64,0x74,0xB6,0x64,0x52,0x5C,0x32,0x22,0x16,0x12,0x14,0x32,0x22,0x26,0x12,0x94,0x22,0x32,0x2C,0x32,0x52,0x36,0x22,0x14,0x54,0xAC,0x92,0xA2,0x96,0xA2,0x96,0x82,0x3C,0x54,0x36,0x22,0x14,0x54,0xAC,0x92,0xA2,0x16,0x12,0x14,0x22,0x32,0x2C,0x02,0x82,0x16,0x32,0x56,0x12,0xA6,0x32,0x56,0x52,0x66,0x72,0xB6,0x62,0x1C, 0xff}。 void PlayMusic(void) { uchar yinfu,jiepai,yinfu_led。 uchar i,j。 //循环变量 uchar *p1=Music_One,*p2=MusicYinFu。 //p1 开始指向第一首歌 //p2 去歌曲的音符和节拍 for(i=0。 *(p1+i)!=0XFF。 i++) { yinfu=((*(p1+i))4)。 //取出音符对应的序号 ,如 //Music_One[2]=0x82, 音符代表MusicYinFu[8] jiepai=((*(p1+i))amp。 0X0F)。 //取出节拍数 yinfu_led=yinfu%7。 //音符对应 LED 显示号 if(yinfu!=0) { th0=*(p2+(yinfu1)*2)。 tl0=*(p2+(yinfu1)*2+1)。 TR0=1。 ET0=1。 } else //如 Music_One[1]=0x02,这里的音符为 0,表停顿 18 { TR0=0。 Beep=1。 } for(j=jiepai。 j0。 j) { led=LED_Dis[yinfu_led1]。 Delayms(180)。 //一 拍延时时间 key_scan()。 if(KeyNo==23) //退出播放 {ET0=1。 break。 } else if(KeyNo==22)//下一曲 { if(p1==Music_One) 若正在播放第一首,那么下一曲就是第二首 {ET0=0。 p1=Music_Two。 } else if(p1==Music_Two)//若是第二首,下一首是第三首 {ET0=0。 p1=Music_Three。 } else {ET0=0。 p1=Music_One。 }//同理 i=0。 KeyNo=26。 //一定要改变 KeyNo 的值,否则只播放一个音符 Delayms(1000)。 //歌曲切换,停顿一下 break。 //跳出之前播放的歌曲,以使播放下一曲 } } if(*(p1+i+1)==0XFF) //判断歌曲是否播放完毕 { 19 ET0=0。 Beep=0。 //暂停一下 if(p1==Music_One) //如果刚刚结束第一首歌,播放第二首歌 { i=0。 p1=Music_Two。 Delayms(2020)。 } else if(p1==Music_Two) //如果刚刚结束第二首歌,播放第三首歌 { i=0。 p1=Music_Three。 Delayms(2020)。 } else //如果刚刚结束第三首歌,播放第一首歌 { i=0。 p1=Music_One。 Delayms(3000)。 } } TR0=0。 ET0=0。 if(KeyNo==23) { ET0=1。 20 break。 } } ET0=1。 } : N Y KeyNo21 KeyNo21 KeyNo==23 程序框图: 5 程序实现: void Record_yinfu() { uchar keystate,i=0。 主程序 检测是否有按键按下 LED指示灯亮 按键扫描 关定时器关 定时器开启,播放按键所对应的音符,同时 LED灯显示那个音符按下 播放已按下的键,播放完毕后,绿色LED指示灯灭 存储按下键的键值,以及按下键的时间 21 uchar history[100]={0}。 //记录按下的键音 ,初始化 led_zhishi=1。 //开灯 while(KeyState())。 //等待按键释放 while(1) { keystate=KeyState()。 //按键状态检测 if(keystate) { key_scan()。 if(KeyNo==23) Recordonoff=~Recordonoff。 //退出录音 else if(KeyNo21)//音符键 { do //这里用 do while 循环能使音符播放随按键松开而停止,//同时计时也是随按键松开而停止计时,这样能比较准确计算按键按下的时间 { key_scan()。 if(KeyNo21) { yuzhi=(KeyNo+3)%7。 //判断 DO RE MI FA... YinFu_DiZhongGao_Flag(KeyNo)。 th0=Tone_Delay_Table[KeyNo]/256。 tl0=Tone_Delay_Table[KeyNo]%256。 TR0=1。 TR1=1。 history[i*2]=KeyNo。 //存储按键的键的音符 history[i*2+1]=Record_Timer。 //存储按键按下不松的时间 22 } keystate=KeyState()。 }while(keystate)。 //如果按键松开,表示按下的一个音符结束 i++。 //接下来按的键就是下一个音符 } } else//表示没键按下,那得关闭定时器, led 灭 { led=0x00。 Record_Timer=0。 //按键按下定时数清零,下一个按键按下后从新计时 TR0=0。 TR1=0。 } if(!Recordonoff)//按下录音播放键,回放按下的音符 { for(i=0。 history[i*2+1]!=0。 i++)//history[i*2+1]存的是按键对//应的音符 { yuzhi=(history[i*2]+3)%7。 //判断 DO RE MI FA... YinFu_DiZhongGao_Flag(history[i*2])。 //判断是中高低音 th0=Tone_Delay_Table[history[i*2]]/256。 tl0=Tone_Delay_Table[history[i*2]]%256。 TR0=1。 TR1=1。 for(history[i*2+1]。 history[i*2+1]0。 history[i*2+1]) Delayms(10)。 //history[i*2+1]中存放的是按键按 //下的时间次数,一次表示一个 10ms,因为中断时间是 10ms Delayms(10)。 //音符之间延时一下 led=0x00。 } TR0=0。 //回放完了就关掉定时器 23 TR1=0。 for(i=0。 i100。 i++) //清除录音数据 history[i]=0。 led_zhishi=0。 //关闭指示灯 while(KeyState())。 //等待按键释放 break。 //跳出死循环,回到主程序 } } } 硬件调试主要是针对单片机部分进行的调试。 在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。 在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。 注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。 在确保硬件。基于51单片机简易电子琴设计报告(编辑修改稿)
相关推荐
单片机访问 DS18B20 DS18B20 充当从机,单片机是主机,而单片机作为主机通过一线总线访问DS18B20需要经过以下步骤: 1. DS18B20复位指令; 2.执行 ROM指令; 3.执行 DS18B20功能指令( RAM指令)。 11 设计程序中需要用到的 DS18B20功能指令有: 1. 0xcc:跳过读序号列; 2. 0x44:启动温度转换; 3. 0xbe:读取温度寄存器。
01 9 图 23 74HC573 芯片引脚图 触摸按键介绍 本次无线记分器设计采 用的是一款 TTP226 触摸式按键, KEY1KEY8 接口与TTP226 的 D0D7 输入接口连接,输出接口 Q0Q7 与 OUT1OUT8 接口相连,将其安置在记分器的无线发射端来控制 A、 B 两队的加减分。 这是一种接触板检测 IC,一共提供了八个触摸按键,并且内含八个指示灯,每个按键对应一个指示灯
OpenCORE,支持多种常用的音频、视频格式回访和录制,同时支持静态图像文件。 3) Surface Manager:管理显示子系统,为多个应用程序提供 2D和 3D图层的无缝融合。 4) SGL:底层的 2D图形引擎。 5) 3D libraries:基于 OperGL ,可以使用硬件 3D加速或高度优化 5 的软件 3D加速。 6) RreeType:位图和矢量字体显示。 7)
拉电阻,某个引脚被外部信号拉低时会输出电流( IIL)。 P3 口同时具有 AT89C51 的多种特殊功能,具体如下表 1所示 : 端口引脚 第二功能 RXD (串行输入口 ) TXD(串行输出口) 0INT (外部中断 0) 1INT (外部中断 1) T0(定时 器 0) T1(定时器 1) WR (外部数据存储器写选通) RD(外部数据存储器都选通) 表 1 P3口的第二功能 •RST
动作出现干烧等缺点。 CWVH0510水流量传感器在智能数码热泵系统中的应用 湛江中信电磁阀有限公司口径为 3cm 的 CWVH0510 型水流量传感器,它价格较低,体积小、重量较轻便于携带,而实际生活应用中可以根据自己的需要,定制口径和接线端连接方式和线路长短。 CWVH0510 型水流量传感器如图 210 所示: 12 图 210 CWVH0510型水流量传感器
k 1个; 10k滑动变阻器 1个; 10Ω 1个; ( 10) 开关 1个 ( 11) 5V有源蜂鸣器 1个 ( 12) 三极管 S8550一个 ( 13) 排针若干,杜邦线若干 22 附录 2 程序清单 分 9 个文件: , ,, , (a) 程序清单: ifndef __delay_h__ define __delay_h__ void delay_us(uint t)。 void