单片机电子琴设计报告
更新时间:2024-01-07 05:22:01 阅读量: 教育文库 文档下载
单片机课程设计报告
课程设计报告
设计题目 单片机电子琴
专 业 ************ 班 级 0802 姓 名 *** 学 号 *** 同组成员 *** 指导教师 *** 提交日期 2011-05-17
- 1 -
单片机课程设计报告
目录
第1章 概述 ----------------------------------------------------------------------------------4
第2章 课程设计任务及要求 -----------------------------------------------------------4 2.1 设计任务 -------------------------------------------------------------------------------4 2.2 设计要求 -------------------------------------------------------------------------------4
第3章 系统设计-----------------------------------------------------------------------------5 3.1设计方案 -------------------------------------------------------------------------------5 3.2 系统设计 --------------------------------------------------------------------------------5 3.2.2 系统流程图 -----------------------------------------------------------------------5 3.2.2 系统原理图 --------- ---------------------------------------------------------------7 3.3 文件程序代码---------------------------------------------------------------------------7
第4章 心得体会-----------------------------------------------------------------------------42
- 2 -
单片机课程设计报告
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器.本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。
第2章 课程设计任务及要求
2.1 设计任务
1、任务
设计一简易电子琴,要求能够发出1,2,3,4,5,6,7等7个音符,具有一般演奏功能。
2.2 设计要求
1)具有一般演奏功能,利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一个音调的声音 2)具有自动播放已存曲目功能
3)显示当前正在播放的歌曲的名称和歌词 4)显示北京时间
第3章 系统设计
3.1设计方案
该电路由时钟模块,液晶模块,键盘扫描模块组成。
时钟模块:由时钟模块1307实现,能够正确显示北京时间,以及扩展显示星期等等。
液晶模块:将时钟模块的信息正确的显示到液晶显示屏上,使用1602的液晶。
键盘扫描模块:对十六个按键进行逐次扫描,扫描到前八个按键时,蜂鸣器依次发出1,2,3,4,5,6,7,8的音调声。其余按键,可以跳转到不同的曲目以及液晶模块显示,保留几个按键做以后的扩展用。
- 3 -
单片机课程设计报告
3.2 系统设计
3.2.1 系统流程图
分析各项设计要求后,可绘制如下程序流程图
- 4 -
单片机课程设计报告
开始初始化While 1NN有键盘按下Y再次从新扫描延时一段时间真的有键盘按下吗Y键盘扫描处理根据不同的扫描值赋值于Key根据Key值做相应程序处理结束
- 5 -
单片机课程设计报告
3.2.2 系统原理图
3.3 文件程序代码
(1). 液晶模块头文件 sbit LCD_RS = P3^6; sbit LCD_RW
= P3^5;
sbit LCD_EN = P3^3; sfr LCDData=0x80;
- 6 -
单片机课程设计报告
void LCDWrite(bit cd,unsigned char input); void LCDWait(unsigned char CiShu); void LCDDelay(); void LCDInitialize();
void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string); void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char bits,unsigned int number);
unsigned char ReadState();
void LCDInitialize() {
LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x38); LCDDelay(); LCDWrite(0,0x08); LCDDelay(); LCDWrite(0,0x01); LCDDelay();
- 7 -
单片机课程设计报告
LCDWrite(0,0x06); LCDDelay(); LCDWrite(0,0x0c); }
void LCDWrite(bit cd,unsigned char DATA) {
LCDWait(20); LCD_RS=cd; LCD_RW=0; LCD_EN=0; LCDData=DATA; LCD_EN=1; LCD_EN=0; }
void LCDPrintString(unsigned char x,unsigned char y,unsigned char *string) {
unsigned char address; address=x+(1-y)*0x40+0x80; LCDWrite(0,address); while(*string!='\\0') {
LCDWrite(1,*string);
- 8 -
单片机课程设计报告
string++; } }
void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char WeiShu,unsigned int number) {
unsigned char address; unsigned char j,temp[5];
address=x+(1-y)*0x40+0x80; LCDWrite(0,address); //if(number>0) {
temp[0]=(number0000)/10000+48; temp[1]=(number000)/1000+48; temp[2]=(number00)/100+48; temp[3]=(number0)/10+48; temp[4]=number+48; for(j=5-WeiShu;j<5;j++) {
LCDWrite(1,temp[j]); } } }
- 9 -
单片机课程设计报告
void LCDWait(unsigned char CiShu) {
unsigned char i; for(i=0;i if(ReadState()&0x80)continue; else break; } } unsigned char ReadState() { unsigned char temp; P0=0xff; LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_EN=1; temp=LCDData; LCD_EN=0; return temp; } void LCDDelay() - 10 - 单片机课程设计报告 { unsigned int a; for(a=0;a<1000;a++); } (2).时钟芯片模块头文件 void iicdelay(unsigned int times); void iicstart() { MDE=1; MDO=1; iicdelay(2); MCO=1; iicdelay(2); MDO=0; iicdelay(2); } void iicstop() { MDE=1; MDO=0; iicdelay(2); MCO=1; iicdelay(2); - 11 - 单片机课程设计报告 MDO=1; } void iicack() { MDE=1; MCO=0; MDO=0; iicdelay(2); MCO=1; iicdelay(2); MCO=0; iicdelay(1); MDO=1; } void iicnack() { MDE=1; //MCO=0; MDO=1; iicdelay(2); MCO=1; iicdelay(2); MCO=0; } - 12 - 单片机课程设计报告 bit iicreadack() { bit ack; MCO = 0; iicdelay(2); MDE=1; MDO=1; MCO=1; iicdelay(2); MDE=0; ack=MDI; MCO=0; return ack; } void iicwriteda(unsigned char da) { unsigned char i; MDE=1; for(i=0;i<8;i++) { MCO=0; iicdelay(0); if((da< - 13 - 单片机课程设计报告 MDO=1; else MDO=0; iicdelay(2); MCO=1; iicdelay(3); } MCO=0; } unsigned char iicreadda() { unsigned char da; int i; da=0; MDE=1; MDO=1; MDE=0; for(i=0;i<8;i++) { MCO=0; iicdelay(3); MCO=1; iicdelay(1); - 14 - 单片机课程设计报告 if(MDI==1) {da=da<<1;da++;} else da=da<<1; } MCO=0; return da; } void iicdelay(unsigned int t) { unsigned int i,j; for(i=0;i for(j=5;j>0;j--); } void ReadTime(unsigned char TIME[7]) { bit EATemp; unsigned char temp; EATemp=EA; iicstart(); - 15 - 单片机课程设计报告 iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicstop(); iicdelay(1); iicstart(); iicwriteda(0xd1); iicreadack(); TIME[0]=iicreadda(); iicack(); TIME[1]=iicreadda(); iicack(); TIME[2]=iicreadda(); iicack(); TIME[3]=iicreadda(); iicack(); TIME[4]=iicreadda(); iicack(); TIME[5]=iicreadda(); iicack(); TIME[6]=iicreadda(); - 16 - 单片机课程设计报告 iicnack(); iicstop(); iicdelay(1); TIME[0]=((TIME[0]&0x7f)>>4)*10+(TIME[0]&0x0f); //second TIME[1]=((TIME[1]&0x7f)>>4)*10+(TIME[1]&0x0f); //minute if(TIME[2]&0x40) { if(TIME[2]&0x20)temp=0x80;else temp=0x40; TIME[2]=((TIME[2]&0x1f)>>4)*10+(TIME[2]&0x0f); //hour TIME[2]|=temp; } else { TIME[2]=((TIME[2]&0x3f)>>4)*10+(TIME[2]&0x0f); } TIME[3]=TIME[3]&0x07; //week TIME[4]=((TIME[4]&0x3f)>>4)*10+(TIME[4]&0x0f); //date TIME[5]=((TIME[5]&0x1f)>>4)*10+(TIME[5]&0x0f); //month TIME[6]=(TIME[6]>>4)*10+(TIME[6]&0x0f); //year - 17 - 单片机课程设计报告 EA=EATemp; } void SetTime(unsigned char TIME[7]) { bit EATemp; unsigned char temp=0; unsigned char TimeTemp[7]; EATemp=EA; for(temp=0;temp<7;temp++)TimeTemp[temp]=TIME[temp]; temp=0; TimeTemp[6]=((TimeTemp[6]/10)<<4)+(TimeTemp[6]); TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]); TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]); TimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]); if((TimeTemp[2]&0xc0)==0x00) { TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]); } else { if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60; - 18 - 单片机课程设计报告 TimeTemp[2]&=0x3f; TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]); TimeTemp[2]|=temp; } TimeTemp[1]=((TimeTemp[1]/10)<<4)+(TimeTemp[1]); TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]); TimeTemp[0]&=0x7f; iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicwriteda(TimeTemp[0]); iicreadack(); iicwriteda(TimeTemp[1]); iicreadack(); iicwriteda(TimeTemp[2]); iicreadack(); iicwriteda(TimeTemp[3]); iicreadack(); iicwriteda(TimeTemp[4]); iicreadack(); iicwriteda(TimeTemp[5]); - 19 - 单片机课程设计报告 iicreadack(); iicwriteda(TimeTemp[6]); iicreadack(); iicstop(); iicdelay(1); EA=EATemp; } void SwitchRTC(unsigned char SWITCH) { unsigned char temp; bit EATemp; EATemp=EA; iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicstop(); //iicdelay(1); - 20 - 单片机课程设计报告 iicstart(); iicwriteda(0xd1); iicreadack(); temp=iicreadda(); iicnack(); iicstop(); //iicdelay(1); if(SWITCH)temp&=0x7f; else temp|=0x80; iicstart(); iicwriteda(0xd0); iicreadack(); iicwriteda(0x00); iicreadack(); iicwriteda(temp); iicreadack(); iicstop(); //iicdelay(1); EA=EATemp; (3)主体程序 #include #include - 21 - 单片机课程设计报告 #include unsigned char n=0; //n为节拍常数变量 unsigned char a[7]={00,59,19,3,4,8,10}; unsigned char b[7]; void delay1s(void) { unsigned char i,k; for(k=100;k>0;k--) for(i=100;i>0;i--); } /*定时器0中断*/ void TIMER0(void) interrupt 1 { TH0=STH0; - 22 - 单片机课程设计报告 TL0=STL0; PWM1=~PWM1; } /*定时器1中断*/ void int0() interrupt 3 //采用中断3 控制节拍 节拍延时 { TH1=0xd8; TL1=0xef; n--; } /*定时器2中断*/ void int1() interrupt 5 //采用中断3 控制节拍 节拍延时 { TH2=0xd8; TL2=0xef; n--; } void delay (unsigned char m) //控制频率延时 { unsigned i=3*m; while(--i); } void delayms(unsigned char a) //豪秒延时子程序 { - 23 - 单片机课程设计报告 while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了! } unsigned int code tab[]={0xfc43,0xfd08,0,0,0xfd08,0xfd32,0,0,0xfd81,0xfdc7,0,0,0xfe05,0xfe21,0,0,}; /*unsigned char code table[]={0x03,0x9f,0x25,0x0d, 0x99,0x49,0x41,0x1f, 0x01,0x09,0x11,0xc1, 0x63,0x85,0x61,0x71,0xff}; */ unsigned char code music_tab_1[]={ /*1*/ 0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20, 0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10, 0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20, 0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20, 0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60, /*2*/ 0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20, 0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10, 0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, - 24 - 单片机课程设计报告 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20, 0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20, 0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60, //1176711237755 0x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10, 0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20, 0x19,0x20,0x20,0x10,0x20,0x10, //63221117 0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x40,0x18,0x20,0x19,0x20, //6711237755 0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20, 0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10, //632211 0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x60, - 25 - 单片机课程设计报告 //00000 0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60, //1155555 577755 0x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10, 0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10, 0x19,0x20,0x20,0x10,0x20,0x10, //55556511112 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10, //3244332443 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, //32443 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, //5511 - 26 - 单片机课程设计报告 0x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10, //55555577755 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20, 0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10, 0x20,0x10, //55556511112 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10, //3244332171 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10, 0x18,0x60,0x01,0x40,0x01,0x40, //第二次 /*3*/ 0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20, 0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10, 0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20, - 27 - 单片机课程设计报告 0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20, 0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60, /*4*/ 0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20, 0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10, 0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20, 0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20, 0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60, //1176711237755 0x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10, 0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20, 0x19,0x20,0x20,0x10,0x20,0x10, //63221117 0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x40,0x18,0x20,0x19,0x20, - 28 - 单片机课程设计报告 //6711237755 0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20, 0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10, //632211 0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x60, //33535 0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60, //1155555 577755 0x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10, 0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10, 0x19,0x20,0x20,0x10,0x20,0x10, //55556511112 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10, - 29 - 单片机课程设计报告 //3244332443 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, //32443 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, //5511 0x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10, //55555577755 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20, 0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10, 0x20,0x10, //55556511112 0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10, //3244332171 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10, - 30 - 单片机课程设计报告 0x18,0x60,0x01,0x40,0x01,0x40, //结尾 //321712133423342 0x13,0x20,0x15,0x20,0x18,0x30,0x19,0x10,0x18,0x10,0x15,0x10, 0x18,0x40,0x13,0x40,0x13,0x40,0x12,0x40,0x15,0x40, 0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60, 0x00}; unsigned char code music_tab_2[]={ 0x10,0x03, 0x11,0x03, 0x15,0x66, 0x11,0x03, 0x15,0x02, 0x17,0x02, 0x11,0x01, 0x0D,0x02, 0x0D,0x02, 0x10,0x66, 0x0F,0x03, 0x10,0x02, 0x15,0x02, 0x0F,0x15, 0x0D,0x03, 0x0D,0x03, 0x0E,0x66, 0x0D,0x03, 0x0E,0x03, 0x15,0x66, 0x0D,0x01, 0x15,0x02, 0x15,0x02, 0x15,0x02, 0x11,0x66, 0x0E,0x03, 0x0E,0x02, 0x11,0x02, 0x11,0x15, 0x10,0x03, 0x11,0x03, 0x15,0x66, 0x11,0x03, 0x15,0x02, 0x17,0x02, 0x11,0x15, 0x0D,0x03, 0x0D,0x03, 0x10,0x66, 0x0F,0x03, 0x10,0x02, 0x15,0x02, 0x0F,0x01, 0x0D,0x03, 0x0E,0x02, 0x15,0x03, 0x11,0x03, 0x11,0x02, 0x15,0x02, 0x16,0x03, 0x16,0x03, 0x17,0x03, 0x15,0x16, 0x15,0x02, 0x11,0x03, 0x10,0x03, 0x10,0x03, 0x11,0x02, 0x0F,0x02, 0x10,0x15, 0x15,0x03, 0x16,0x03, 0x17,0x66, 0x16,0x03, 0x17,0x02, 0x19,0x02, 0x16,0x15, 0x0F,0x03, 0x0F,0x03, 0x15,0x03, 0x11,0x03, 0x15,0x02, 0x17,0x02, 0x17,0x15, 0x10,0x03, 0x11,0x03, 0x15,0x02, 0x11,0x02, 0x16,0x03, 0x16,0x03, - 31 - 单片机课程设计报告 0x15,0x66, 0x0F,0x03, 0x0F,0x16, 0x18,0x02, 0x17,0x02, 0x16,0x02, 0x15,0x02, 0x17,0x00, 0x17,0x02, 0x1A,0x01, 0x19,0x02, 0x19,0x02, 0x17,0x03, 0x16,0x03, 0x15,0x02, 0x15,0x02, 0x16,0x02, 0x15,0x03, 0x16,0x03, 0x16,0x03, 0x19,0x02, 0x17,0x15, 0x17,0x02, 0x1A,0x01, 0x19,0x01, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03, 0x16,0x03, 0x11,0x02, 0x10,0x01, 0x00,0x00}; void main(void) { unsigned char p,m; //m为频率常数变量 unsigned char i=0; TMOD=0x11; IE=0xaa; TH1=0xd8; TL1=0xef; TH2=0xd8; TL2=0xef; P2=0xe0; P3=0x0f; I2CCON=0xE8; SetTime(a); SwitchRTC(1); LCDInitialize(); - 32 - 单片机课程设计报告 while(1) { P1=0xf0; P2=0xff; lie0=0; temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { delay1s(); temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { temp=P1; temp=temp & 0x0f; switch(temp) { case 0x0e: key=0; break; case 0x0d: key=4; break; - 33 - 单片机课程设计报告 case 0x0b: key=8; break; case 0x07: key=12; break; } P0=tab[key]; STH0=tab[key]/256; STL0=tab[key]%6; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P1; temp=temp&0x0f; } TR0=0; } } P1=0xf0; P2=0xff; lie1=0; temp=P1; - 34 - 单片机课程设计报告 temp=temp & 0x0f; if (temp!=0x0f) { delay1s(); temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { temp=P1; temp=temp & 0x0f; switch(temp) { case 0x0e: key=1; break; case 0x0d: key=5; break; case 0x0b: key=9; break; case 0x07: key=13; break; - 35 - 单片机课程设计报告 } P0=tab[key]; STH0=tab[key]/256; STL0=tab[key]%6; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P1; temp=temp&0x0f; } TR0=0; } } P1=0xf0; P2=0xff; lie2=0; temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { delay1s(); temp=P1; temp=temp & 0x0f; - 36 - 单片机课程设计报告 if (temp!=0x0f) { temp=P1; temp=temp & 0x0f; switch(temp) { case 0x0e: key=2; break; case 0x0d: key=6; break; case 0x0b: key=10; break; case 0x07: key=14; break; } P0=tab[key]; } } P1=0xf0; P2=0xff; - 37 - 单片机课程设计报告 lie3=0; temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { delay1s(); temp=P1; temp=temp & 0x0f; if (temp!=0x0f) { temp=P1; temp=temp & 0x0f; switch(temp) { case 0x0e: key=3; break; case 0x0d: key=7; break; case 0x0b: key=11; break; case 0x07: - 38 - 单片机课程设计报告 key=15; break; } P0=tab[key]; } } switch(key) {case 0,4,8,12,1,5,9,13,8,12,7,11,15:break; case 2: { play_1: { a_1: p=music_tab_1[i]; if(p==0x00) { i=0, delayms(1000); goto play_1;} //如果碰到结束符,延时1秒,回到头再来一遍 else if(p==0xff) { i=i+1;delayms(100),TR1=0; goto a_1;} //若碰到休止符,延时100ms,继续取下一音符 else {m=music_tab_1[i++], n=music_tab_1[i++];} //取频率常数 和 节拍常数 TR1=1; //开定时器1 while(n!=0) PWM1=~PWM1,delay(m); //等待节拍完成, 通过P1口输出音频 TR1=0; //关定时器1 } break; - 39 - 单片机课程设计报告 } case 6: { play_2: { a_2: p=music_tab_2[i]; if(p==0x00) { i=0, delayms(1000); goto play_2;} //如果碰到结束符,延时1秒,回到开始再来一遍 else if(p==0xff) { i=i+1;delayms(100),TR2=0; goto a_2;} //碰到休止符,延时100ms,取下一音符 else {m=music_tab_2[i++], n=music_tab_2[i++];} //取频率常数和节拍常数 TR2=1; //开定时器2 while(n!=0) PWM1=~PWM1,delay(m);//等待节拍完成, 通过P1口输出音频( TR2=0; //关定时器2 } break; } case 3: {jishi=1; break;} default:break; } if(jishi==1) {ReadTime(b); LCDPrintNumber(0,1,2,b[0]); //LCDPrintString(3,1,1,\ - 40 - 单片机课程设计报告 } } LCDPrintNumber(4,1,2,b[1]); //LCDPrintString(6,1,1,\ LCDPrintNumber(7,1,2,b[2]); //LCDPrintString(9,1,1,\ LCDPrintNumber(10,1,2,b[4]); //LCDPrintString(12,1,,1,\ LCDPrintNumber(13,1,2,b[5]); //LCDPrintString(15,1,\ LCDPrintString(0,0,\ } 第6章 心得体会 这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试,下载,最后终于完成了这次具有实际使用价值的实验。 在设计中我运用自己平时学到的一些知识,以及自己在课下所查找的进行设计,刚开始遇到很多困难,包括对使用C语言环境语言的不熟悉,后来一起和同学研究,而一些课程设计中的故障,也请同学帮忙参考一下,最终找到了解决问题的答案。我感觉自己在设计方面提高很大,特别是在设计程序时,逻辑思维能力有所加强,同时对以前所学的知识有了更深刻的认识,并进一步的得到了巩固和提高,充分的做到了理论联系实际,也使我认识到理论与实际的差别,通过该 - 41 - 单片机课程设计报告 课程设计,不但对单片机有了较为全面的认识,而且相关的知识也有了足够的掌握,我感觉最重要的还是设计思维的形成。更发现自己在平时学习中的缺陷。对以后的学习也有很大的帮助。 两周的课程设计,我所收获的不仅是学习知识方面,更多的是生活方面。我了解到,在我们生活中,应该学会与别人共同分享,分享知识,分享问题,这样更有助于我们的交流,有利于我们共同进步,有利于我们对学习养成良好的兴趣。 最后,我要感谢那些带我们课程设计的老师们,感谢你们对我们的耐心,感谢你们对我们的鼓励,让我们有信心继续下去,成功走到最后。 - 42 -
正在阅读:
单片机电子琴设计报告01-07
我要长大作文250字07-07
《数据结构》课程期末考试试卷(A卷)DAOAN- 副本 - 图文03-09
山东省济宁一中2014届高三年级10月月考语文试题06-14
小学一二年级硬笔书法11-01
建设工程监理概述05-21
2019届广西来宾市高考英语一轮复习阅读理解专项练习:26(含解析)10-15
第十一册语文教学计划08-23
专业辨析神经生长因子(NGF)的神话10-08
工业工程研究领域06-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 电子琴
- 单片机
- 报告
- 设计
- 抛石、理坡、安放标高质量检验评定表
- 毕业设计开题报告 - 图文
- 八年级政治下册 我们的文化经济权利检测题 新人教版
- 初中英语新课程标准词汇及短语表
- 总结·汇报最新优秀共青团员自我鉴定-优质范文 - 图文
- microsoft excel 基本操作
- 高中生物新课程中的科学方法教育
- 小学庆六一节目主持词-精选模板
- 明心2015年(秋)数学资优生测试3年级试卷简答 doc - 图文
- 教科小学科学五下《3.5、机械摆钟》教案
- 2019年中考英语总复习第一部分夯实基础过教材九全Units1-2习题人教新目标版
- 八字的命宫与胎元
- 一次同学聚会精选优秀作文700字
- 江苏省初中学生化学素质和实验能力竞赛初赛试题 doc
- 初一数学暑假作业单元试题及答案
- 人教版小学数学五年级上册《三角形的面积》教学实录
- 破产和解制度的现实意义与完善
- 初一奥数40题
- 高中历史十、丰富“一国两制”实践和推进祖国统一
- 三类人员专职安全员试题