3.2 程序设计见附件
四、仿真调试及操作说明
1、按下开机键LCD显示如下
2、按下歌曲按钮播放所选歌曲
3、操作说明
一共13个按钮,按下对应的歌曲选择按钮键,会播放对应的歌曲。
第一首,《挥着翅膀的女孩》 ;第二首,《同一首歌》 ;第三首,《两只蝴蝶》 ;第四首,《母亲》 ; 第五首,《世上只有妈妈好》 ;第六首,《浏阳河》 ;第七首,《同桌的你》 ;第八首,《茉莉花》
第九首,《梁祝》 ;第十首,《生日快乐》
6
其中还有,暂停键、继续键、上一曲、下一曲。
五、心得体会
其实,在开始单片机课程设计之前,我是很担心的。因为单片机这一课程还有很多没学懂的地方,很多命令都还不怎么会使用。以前几乎每次试验都要搞好久,很不熟练。当拿到课程设计的任务时,我很开心,因为相对来说,数字音乐盒的设计比较简单,而且我个人也比较喜欢音乐。所以,之后做起来也很有干劲。通过此次课程设计,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
在设计过程中我遇到了许多问题。比如说,1、有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。2、编程时要注意,在程序开始时,要写入各定时器中断的入口地址。3、编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。等等。还有很多小细节的问题,通过问同学,或是通过上网查询,我不仅是获得了答案,更多的是获得知识的开心和成就感。当听到一首首歌响起的时候,那种无语伦比的开心,充斥了我整个大脑。
这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。我明白了一个人要 想 做 好一件 事,就 必 须 具 备 自 信 心,耐 心,还 要 有 毅 力,要 胆 大心 细,要 勇 于尝试,要手脑并用,最后才能交出一份令人满意的答卷。对我而言,知识上的收获重要,精神上的丰收更加。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为为我人生旅途上一个非常美好的回忆。
六、参考文献
[1] 谭浩强.C语言程序设计(第二版)[M],北京:清华大学出版社,1991. [2] 曾屹.单片机原理与应用(第一版)[M],中南大学出版社,2009. [3] 美妙的音乐盒--《家庭电子》1994年05期
7
附件:
#include
#define SYSTEM_OSC 12000000//11059200 //定义晶振频率12000000HZ #define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔 #define uchar unsigned char #define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; uchar code tab1[]=\AN %uchar code tab2[]=%uchar code tab3[]=%uchar code tab4[]=%uchar code tab5[]=\sbit BeepIO=P1^4; //定义输出管脚 sbit key0=P2^0; sbit key1=P2^1; sbit key2=P2^2; sbit key3=P2^3; sbit key4=P2^4; sbit key5=P2^5; sbit key6=P2^6; sbit key7=P2^7;
sbit key8=P3^0; sbit key9=P3^1; sbit key10=P3^4; sbit key11=P3^5; sbit key12=P3^6; sbit key13=P3^7; sbit LCD_EN=P1^7; sbit LCD_RS=P1^5; sbit LCD_RW=P1^6; sbit led=P1^3; uchar count; uint Point; uint *temp;
unsigned char *Sound;
unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表 unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在频率表中的位置
8
unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 }; unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存 unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存
uchar flag; uchar lcdflag;
uchar fen; uchar miao; uchar num;
void write_com(uchar com); void write_data(uchar date); void init();
void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
bit lcd_busy()
{ bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();
result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
void write_com(uchar cmd)
{ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;
9
}
void write_data(uchar dat)
{ while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
void init() {
LCD_EN=0; LCD_RW=0;
write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80);
// write_com(0x80+0x10); }
void wr_lcd_1602(unsigned char add,unsigned char dat) { unsigned char ge,shi; shi=dat/10; ge=dat; write_com(0x80+add); write_data(0x30+shi); write_data(0x30+ge); }
//************************************************************************** void Play(unsigned char Signature,unsigned Octachord,unsigned int Speed) //此处是程序的关键 { unsigned int NewFreTab[12]; //新的频率表 unsigned char i,j;
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数字音乐盒设计(2)在线全文阅读。
相关推荐: