首页 单片机课程设计报告电子琴

单片机课程设计报告电子琴

举报
开通vip

单片机课程设计报告电子琴.PAGE.电子音调发生器一、实验目的1.了解计算机发声原理。2.熟悉定时器和键盘扫描电路的工作原理及编程方法。二、实验完成的功能1.利用键盘1~7进行音调选择,即按下音符产生对应音调。2.事先存储三首歌曲,并可进行选择播放。3.谱曲功能:通过按键对LCD菜单选项进行选择,进入谱曲界面,通过按键1~7分别输入音高与几分音符类型,由按键输入若干数据完成谱曲。4.在播放存储歌曲与谱曲播放时,对应音符及其节奏LCD显示对应频谱。5.在播放音乐时按"返回"键出现返回界面,由键盘按"确认"键选择返回主菜单或循环播放。三...

单片机课程设计报告电子琴
.PAGE.电子音调发生器一、实验目的1.了解计算机发声原理。2.熟悉定时器和键盘扫描电路的工作原理及编程 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。二、实验完成的功能1.利用键盘1~7进行音调选择,即按下音符产生对应音调。2.事先存储三首歌曲,并可进行选择播放。3.谱曲功能:通过按键对LCD菜单选项进行选择,进入谱曲界面,通过按键1~7分别输入音高与几分音符类型,由按键输入若干数据完成谱曲。4.在播放存储歌曲与谱曲播放时,对应音符及其节奏LCD显示对应频谱。5.在播放音乐时按"返回"键出现返回界面,由键盘按"确认"键选择返回主菜单或循环播放。三、实验原理1.音节由不同频率的方波产生,音节与频率的关系如表〔1所示。要产生音频方波,只要计算出某一音频的周期〔1/频率,然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O〔P1.7反相,然后重复计时此半周期时间再对I/O反相,就可在P1.7脚得到此频率的方波。将P1.7经过驱动电路与蜂鸣器相连,随着P1.7口输出不同频率的方波,蜂鸣器便会发出不同的声音。音乐的节拍是由延时实现的,如果1拍的时间为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可得到节拍的时间。延时实现基本延时时间,节拍值只能是它的整数倍。每个音节相应的定时器初值计算公式如下:〔1/2*<1/f>=<12/fose>*<216-x>即x=216-其中,f是音调频率,当晶振fosc=11.0592MHz时,音节"1"相应的定时器初值为x,则可得到x=63777D=F921H,其它的可同样得到。表〔1音节与频率的关系音调频率〔HzX1262F9212294F9E13330FA8C4349FAD85392FB686440FBE97494FC5Bi523FC8F在编写歌曲代码过程中,音高由三位数字组成:个位是表示1~7这七个音符;十位是表示音符所在的音区:1-低音,-中音,-高音;百位表示这个音符是否要升半音:0-不升,-升半音。音长最多由三位数字组成:个位表示音符的时值,其对应关系是:|数值:|0|1|2|3|4|5|6|几分音符:|1|2|4|8|16|32|64音符=2^n十位表示音符的演奏效果<0-2>:0-普通,-连音,-顿音,百位是符点位:0-无符点,1-有符点。2.键盘扫描将单片机P1.0~P1.7<引脚1~8>与键盘上对应引脚相连,其中P1.0~P1.3控制键盘的行,P1.4~P1.7控制键盘的列,这次使用的键盘是4行4列,键盘上的第一行到第四行由8位十六进制代码的低四位控制,即第一行若有键按下,则8位十六进制代码的后四位为0x8,第二行有按键按下,则后四位代码为0x4,依此规律类推;键盘上的第一列到第四列由8位十六进制代码的高四位控制,即第一列若有键按下,则8位十六进制代码的前四位为0x8,第二列有按键按下,则前四位代码为0x4,依此规律类推。综上所述,可以根据8位十六进制的高四位和低四位数据,分别确定按下的键处于第几行第几列,从而确定按键的位置,实现键盘扫描的功能。3.LCD显示根据写命令函数wrcomd和写数据函数wrdata分别控制LCD的命令写入和数据写入。具体操作方法是由写命令函数wrcomd编程控制数据输入的行列,再由写数据函数wrdata编程写入需要在LCD上显示的数据或应执行的操作,结合两个命令一起控制LCD显示。四.产品展示五.实验程序#ifndef_DRIVEFUTION_H_#define_DRIVEFUTION_H_/*********************EEPROM函数*******************//**************************************************//******************关闭ISP,IAP功能**************/voidISP_IAP_disable{ISP_CONTR=0X00;ISP_CMD=0X00;ISP_TRIG=0x00;}/*******************字节读***************************/ucharByte_read{EA=0;//关中断ISP_CONTR=En_Wait_TIME;//开启ISP/IAP;并送等待时间ISP_CMD=Read_COM;//送字节读命令字ISP_ADDRH=>8>;//送地址高字节ISP_ADDRL=;//送地址低字节ISP_TRIG=0X46;//送触发命令字0X46、0XB9ISP_TRIG=0XB9;_nop_<>;ISP_IAP_disable<>;//关闭ISP/IAP功能EA=1;//开中断return;}/********************字节编程***********************/voidByte_program{EA=0;//关中断ISP_CONTR=En_Wait_TIME;//开启ISP/IAP;并送等待时间ISP_CMD=Prog_COM;//送字节编程命令字ISP_ADDRH=>8>;//送地址高字节ISP_ADDRL=;//送地址低字节ISP_DATA=isp_iap_data;//送数据进ISP_DATAISP_TRIG=0X46;//送触发命令字0X46、0XB9ISP_TRIG=0XB9;_nop_<>;ISP_IAP_disable<>;//关闭ISP/IAP功能EA=1;//开中断}/*********************扇区擦除*********************/voidSector_erase{EA=0;//关中断ISP_CONTR=En_Wait_TIME;//开启ISP/IAP;并送等待时间ISP_CMD=Dele_COM;//送扇区擦除命令字ISP_ADDRH=>8>;//送地址高字节ISP_ADDRL=;//送地址低字节ISP_TRIG=0X46;//送触发命令字0X46、0XB9ISP_TRIG=0XB9;_nop_<>;ISP_IAP_disable<>;//关闭ISP/IAP功能EA=1;}/*********************写入函数**********************/voidEEPROM_write{Sector_erase;Byte_program;}/*********************EEPROM函数*******************//**************************************************//***************音乐播放相关子函数*******************//****************************************************/voidInitialSound//初始化定时器{BeepIO=0;Sound_Temp_TH1=<65535-<1/1200>*SYSTEM_OSC>/256;//计算TL1应装入的初值<10ms的初装值>Sound_Temp_TL1=<65535-<1/1200>*SYSTEM_OSC>%256;//计算TH1应装入的初值TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TMOD|=0x11;ET0=1;ET1=0;TR0=0;TR1=0;EA=1;}voidBeepTimer0interrupt1//音符发生中断函数{BeepIO=!BeepIO;TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;}/*********************END****************************//****************************************************//*****************LCD操作子函数**********************//****************************************************/voidwrcomd//写入命令{cs=0;_nop_<>;rs=0;_nop_<>;e=1;_nop_<>;rw=0;_nop_<>;P0=comd;_nop_<>;rw=0;_nop_<>;_nop_<>;rw=1;_nop_<>;_nop_<>;_nop_<>;_nop_<>;}voidwrdata//往液晶中写入数据{cs=0;_nop_<>;rs=1;_nop_<>;e=1;_nop_<>;rw=0;_nop_<>;P0=data_wri;_nop_<>;rw=0;_nop_<>;_nop_<>;rw=1;_nop_<>;_nop_<>;_nop_<>;_nop_<>;}voidbmp//刷屏子函数//初始化设置,对屏幕清零,默认值,为0,0,8,2,132{unsignedchari,j;intnum_3;charnum_0=0xb0;//ucharcolumn_h,column_l;num_0+=row_start;for{num_3=column_end;wrcomd;//写入命令设置页,从0页开始,0xb0=10110000;delay〔time_def;//设置页wrcomd<0x10|<0xf0&column_start>>>4>;//设置列,先写入高4位再写入低四位wrcomd<0x00|<0x0f&column_start>>;for{wrdata;}num_0++;}}voiddelay//延时子程序,执行time_delay个_nop_<>延时{longinti;for_nop_<>;}voidwrite_word//写汉字/字符子函数//对应参数数据数组名,数组中位置,行位置,列位置,宽,高{charpage;//页号unsignedinti,j,k,p;p=num*2*width;//p确定汉字字模数据初始位置i=height%8;k=?:;page=0xb0+pos_y;for{wrcomd;wrcomd<0x10|<0xf0&pos_x>>>4>;wrcomd<0x00|<0x0f&pos_x>>;for{wrdata;}p=p+width;page++;if0xb0>7||page-0xb0<0>return;}}/**************************END***********************//****************************************************//******************键盘扫描函数*********************//****************************************************//****************判断是否有键盘输入*********************/bitCheckState//键盘状态判断子函数{bitstate=0;P1=0x0F;//键盘扫描ifstate=1;//检测是否有按键输入elsestate=0;return;}/******************获取键盘输入值*****************/ucharGetKeys//键盘值获取子函数{ucharcolumn,line;scan=0xFE;while<!=0>{P1=scan;if<!=0xF0>//line1havekeypressed{column=~;line=~;key=column+line;return;}elsescan=|0x01;}return<0>;}/******************应用子函数*****************//*********************************************/voidcsh//初始化,清屏{inti;res=0;delay;delay;res=1;delay;cs=0;//片选一直有效delay;delay;for//初始命令写入{wrcomd;delay;}bmp<0,0,8,0,132>;}voidstart_print//开机显示画面子函数{inti,j;for{write_word;if<<7>{write_word;if<<10>{write_word;}}}write_word;for=0;j-->{write_word;delay<5000>;}}voidmenu_first_symbol//菜单选择符刷新子函数,即"打钩项"{bmp<0,0,8,4,18>;write_word;}/*********************音乐播放显示函数******************//*******************************************************/voidmusic_display_one//显示最底层子函数{inti;bmp<0,2,8,18+x*16,34+x*16>;for0;i-->{if{write_word;s=s-1;}else{write_word;//delay<200>;}}}voidmusic_display_two//显示次底层子函数{intsign;sign=mc_size[p_x][0];if{if{sign=0;mc_size[p_x][0]=sign;mc_size[p_x][1]=0;}else{music_display_one;mc_size[p_x][1]+=1;if3>size[p_x]-=1;elsesize[p_x]+=1;}}/*************************************/else{bmp<0,2,8,18+p_x*16,34+p_x*16>;write_word;//delay<500>;}/************************************/}voidmusic_display_three//音符状态置位函数{mc_size[mc-1][0]=1;mc_size[mc-1][1]=1;size[mc-1]=1;}voidmusic_display_four//显示次顶层子函数{inti;for{music_display_two;}}voidmusic_display_five<>//显示顶层子函数{inti;allsize=0;forallsize+=mc_size[i][0];music_display_four<>;}/*voidmusic_display//显示主函数{inti;for{music_display_three;music_display_five<>;}whilemusic_display_five<>;}*/voiddisplay_between_musicplay//播放音乐同时显示音符显示界面{music_display_three;music_display_five<>;}/****************************************************//*********************播放子程序*********************/voidmusic_play_one//频率表,音符,音长,12000/Speed,<<12000/Speed>/4>-<<12000/Speed>/4>*SOUND_SPACE{unsignedcharSL,SH,SM,SLen,XG,FD;uinti,Temp_T,CurrentFre,LDiv,LDiv2,LDiv3;SL=Tone%10;//计算出音符SM=Tone/10%10;//计算出高低音SH=Tone/100;//计算出是否升半CurrentFre=NewFreTab[SignTab[SL-1]+SH];//查出对应音符的频率if{ifCurrentFre>>=2;//低音ifCurrentFre<<=2;//高音Temp_T=65536-<50000/CurrentFre>*10/<12000000/SYSTEM_OSC>;//计算计数器初值Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0+12;//加12是对中断延时的补偿}SLen=LengthTab[Length%10];//算出是几分音符XG=Length/10%10;//算出音符类型<0普通1连音2顿音>FD=Length/100;LDiv=LDiv0/SLen;//算出连音音符演奏的长度<多少个10ms>ifLDiv=LDiv+LDiv/2;ifif//算出普通音符的演奏长度ifLDiv2=LDiv-LDiv1;elseLDiv2=LDiv*SOUND_SPACE;elseLDiv2=LDiv/2;//算出顿音的演奏长度elseLDiv2=LDiv;ifLDiv2=0;LDiv3=LDiv-LDiv2;//算出不发音的长度if{TR0=1;for0;i-->//发 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 长度的音{while;TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TF1=0;}}display_between_musicplay;//???要结合音长来控制其显示时间,弄清音长问题???if{TR0=0;BeepIO=0;for0;i-->//音符间的间隔{while;TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TF1=0;}}}/**************************************************************************//**************************************************************/voidmusic_play_two_1//播放原存储的音乐{uintxdataPoint;ucharxdataTone,Length,i;Point=0;TR0=0;TR1=1;forwrite_word*16,0,16,16>;while{Tone=Sound[Point];Length=Sound[Point+1];//读出第一个音符和它时时值music_play_one;Point+=2;}BeepIO=0;whilemusic_display_five<>;}voidmusic_play_two_2//播放谱曲存储的音乐{uintxdataPoint;ucharxdataTone,Length,i;Point=0;TR0=0;TR1=1;forwrite_word*16,0,16,16>;while{Tone=Byte_read;Length=Byte_read;//读出第一个音符和它时时值music_play_one;Point+=2;}BeepIO=0;while//显示末尾结束的状态music_display_five<>;}//**************************************************************************voidPlay_Two{unsignedintxdataNewFreTab[12];//新的频率表unsignedcharxdatai,j;unsignedintxdataLDiv0,LDiv1,SoundLength;menu_state=1;for//根据调号及升降八度来生成新的频率表{j=i+Signature;if11>{j=j-12;NewFreTab[i]=FreTab[j]*2;}elseNewFreTab[i]=FreTab[j];ifNewFreTab[i]>>=2;elseifNewFreTab[i]<<=2;}LDiv0=12000/Speed;//算出1分音符的长度<几个10ms>LDiv1=LDiv0/4;//LDiv为算出4分音符的长度LDiv1=LDiv1-LDiv1*SOUND_SPACE;//LDiv最后为普通音最长间隔 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 SoundLength=0;if//{while//计算歌曲长度SoundLength+=2;forwrite_word*16,0,16,16>;while//{music_play_two_1;bmp<0,0,8,2,132>;forwrite_word*16,2,16,16>;while>;if==0x11>//确认键返回,F键menu_state=0;delay<1000>;bmp<0,0,8,2,132>;}}else{while!=0x00>//计算歌曲长度SoundLength+=2;forwrite_word*16,0,16,16>;while{music_play_two_2;bmp<0,0,8,2,132>;forwrite_word*16,2,16,16>;while>;if==0x11>//确认键返回,F键menu_state=0;delay<1000>;bmp<0,0,8,2,132>;}}}/*************音符转换函数**********************************/voidChangeKey//把输入的音符转换成相应的数据形式,存储到EEPROM中{//inti;if{delay<5000>;if<==0>bmp<0,2,8,0,132>;switch{case0x11:if2>{bmp<0,0,8,0,132>;music_state=1;}break;case0x42:Byte_program<,0>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x88:Byte_program<,1>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x48:Byte_program<,2>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x28:Byte_program<,3>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x18:Byte_program<,4>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x84:Byte_program<,5>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x44:Byte_program<,6>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;case0x24:Byte_program<,7>;write_word%16>*8,2+</16>*2,8,16>;++music_counter;break;default:break;}}}voidEntry_Music//输入乐谱播放函数{uchargkey,i;bmp<0,0,8,2,132>;while{forwrite_word*16,0,16,16>;while{if>{ifChangeKey>;}}bmp<0,2,8,2,132>;InitialSound<>;Play_Two;bmp<0,2,8,2,132>;forwrite_word*16,2,16,16>;forwrite_word*16,4,16,16>;while>;gkey=GetKeys<>;delay<500>;if//确认键返回,F键menu_state=0;delay<1000>;bmp<0,0,8,2,132>;}}/************************************//***********菜单函数****************/voidmenu_first//主菜单{inti,j;bmp<0,0,8,2,132>;for{write_word;write_word;forwrite_word;}menu_first_symbol;}voidmenu_three1{inti,gkey;while{bmp<0,0,8,2,132>;for{write_word;write_word;write_word;}delay<10000>;while>;gkey=GetKeys<>;bmp<0,0,8,2,132>;InitialSound<>;switch{case0x88:Play_Two;break;case0x48:Play_Two;break;case0x28:Play_Two;break;case0x81:menu_state=1;break;//C键返回default:break;}}}voidmenu_three2{inti,gkey;bmp<0,0,8,2,132>;forwrite_word*16,0,16,16>;while{while>;gkey=GetKeys<>;InitialSound<>;//定时器初始化switch{case0x88:Music_take[0]=1;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x48:Music_take[0]=2;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x28:Music_take[0]=3;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x18:Music_take[0]=4;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x84:Music_take[0]=5;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x44:Music_take[0]=6;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x24:Music_take[0]=7;music_play_two_1,<<12000/Speed>/4>*<1-SOUND_SPACE>>;delay<10>;break;case0x81:menu_state=1;break;//C键返回default:break;}}}voidmenu_four0//参数修改最底层子函数,用于参数值的修改显示{intxdatai,value_sign;i=0;bmp<0,6,8,76,108>;//bmp<0,6,8,2+16,2+2*16>;value_sign=value/100;if{write_word;i+=1;}value_sign=/10;if{write_word;i+=1;}value_sign=value%10;write_word;}uintchovalue//参数修改判断子函数,用于选择对应参数项{uintrealvalue;realvalue=value;if{ifrealvalue+=30;elserealvalue-=30;realvalue=realvalue>500||realvalue<0?360:realvalue;}else{ifrealvalue+=1;elserealvalue-=1;ifrealvalue=realvalue>11||realvalue<0?0:realvalue;elserealvalue=realvalue>3||realvalue<0?3:realvalue;}return;}uintmenu_four1//参数修改次底层函数,用于选择那个参数项的值{uintxdatagkey;while{while>;gkey=GetKeys<>;delay<10000>;switch{case0x41:value=chovalue;menu_four0;break;case0x21:value=chovalue;menu_four0;break;case0x11:menu_state=0;bmp<0,6,8,0,132>;break;//value=chovalue;default:break;}}return;}voidmenu_four//参数修改顶层子函数,用于修改参数{ucharxdatai,value;bmp<0,6,8,0,132>;//刷新最后一行switch{case0:menu_four0;forwrite_word;write_word;value=Speed;Speed=menu_four1;break;case1:menu_four0;forwrite_word;write_word;value=Signature;Signature=menu_four1;break;case2:menu_four0;forwrite_word;write_word;value=Octa;Octa=menu_four1;break;default:break;}}voidmenu_three3//参数修改界面,选定修改参数项以及进入参数修改函数{uchari,gkey;charcho;bmp<0,0,8,2,132>;for{write_word;write_word;write_word;}cho=0;while{menu_first_symbol;while>;gkey=GetKeys<>;delay<10000>;switch{case0x41:cho-=1;break;case0x21:cho+=1;break;case0x11:menu_state=1;menu_four;menu_state=0;break;case0x81:menu_state=1;break;default:break;}cho=cho>2?0:cho;cho=cho<0?2:cho;}}voidmenu_second//主菜单子函数,用于选中功能子菜单,进入相应的功能子菜单函数{//menu_state=0;switch{case0:menu_state=0;menu_three1<>;menu_state=0;break;case1:music_state=0;Entry_Music<>;break;case2:menu_state=0;menu_three2<>;menu_state=0;break;case3:menu_state=0;menu_three3<>;menu_state=0;break;}}/**********************************************/#endif六.仿真图及操作流程图开始界面:<电子音调发生器>主菜单:音乐播放数字谱曲音乐弹奏参数修改让世界充满爱梦醒时分千千阙歌选1由按键输入音符音长谱曲。由键盘1~7控制进行弹奏。修改播放速度修改歌曲调号修改升降八度选22选3选4七.实验中出现的问题及解决方法1.在刚开始编写子函数时,编程思想不够明确,子函数设置的比较混乱。经过一段时间的摸索,懂得如何合理分配子函数,比如可以直接调用子函数,将它们互相嵌套,这么做可以极大程度减少程序中的冗余成分,使程序更加简洁明了。2.原先我设定蜂鸣器是一端接P3.7,另一端接地,这样的话蜂鸣器是低电平驱动。但是由于单片机输出的驱动电流过小,影响蜂鸣器的播放效果,所以后来将蜂鸣器改成高电平驱动的形式,即使蜂鸣器一端接P3.7,另一端接高电平,使高电平输出的电流从蜂鸣器流过,使蜂鸣器的音量增大。3.本次实验的拓展功能之一是LCD显示屏与播放的音符同步显示对应频谱,在编程过程中如何使两者实现同步是一个难点。通过 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 之后,采取了尽使播放的音符与显示的频谱之间的延时尽量减少的方法来实现它们的同步。八.实验心得与体会本次实验的时间是在小学期,我从七月初开始着手实验准备。首先第一步就是选题,从老师给的题目中我选择了趣味性较大的电子音调发生器,通过阅读单片机课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 题目中的有关内容,我大致了解了实验的内容、任务与基本原理。然后我开始上网查阅资料,阅读相关程序,利用资源开始了程序编写的工作。应该说这个题目的网上资源较为丰富,所以基本功能编程的大体框架不难确定。除了实现课程设计题目要求的基本功能外,本次实验还实现了一些拓展功能,这些在第二步已进行了详细的阐述,在此我就不再赘述。由于要完成的功能并不少,所以我选择用C语言编程,这样的话比起用汇编来得更方便些。编程占用了我整个实验过程的大部分时间,通过不断的尝试,资料的查阅,同学间互相的帮助,编程工作顺利完成。接下来就是焊板子的工作,由于此实验使用的是单片机,功能比较强大,很多工作可以用程序代替,所以这次板子的构造比较简单,我花了一个下午的时间就将板子焊完了。在调试过程中出现了一些小问题,比如键盘编码问题,仿真电路图也有一些小错误等,在这些问题改正了以后板子就能正常工作了。实验的调试过程还是很迅速的,因为编程阶段,我是一边用开发板烧程序一边用实物直接显示结果的,这样对以后的调试过程的意义很大,能够较大程度的减少调试的工作量,使实验过程更顺利。通过本次的单片机课程设计实验,我重新复习了C语言的使用方法,对于利用单片机在实现功能方面有了更深的体会,尤其是现在可以很熟练的编写歌曲代码了,虽然实验过程中出现了许多的小问题,但每次解决问题的过程对我来说都是一个收获,提醒着我在以后的生活中应认真对待每一件事。总之,通过本次实验学会了很多知识,在以后的学习工作过程中我会学以致用。
本文档为【单片机课程设计报告电子琴】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
zxiang
多年工作经验
格式:doc
大小:88KB
软件:Word
页数:22
分类:建设工程
上传时间:2022-01-28
浏览量:5