单片机电子琴设计报告

时间:2024.4.21

单片机课程设计报告

设计题目 单片机电子琴

- 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 -

单片机课程设计报告

- 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]=(number%100000)/10000+48;

temp[1]=(number%10000)/1000+48;

temp[2]=(number%1000)/100+48;

temp[3]=(number%100)/10+48;

temp[4]=number%10+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<CiShu;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<<i)&0x80)

- 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<t;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]%10); TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]%10); TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]%10); TimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]%10);

if((TimeTemp[2]&0xc0)==0x00)

{

TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); }

else

{

if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60;

- 18 -

单片机课程设计报告

TimeTemp[2]&=0x3f;

TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); TimeTemp[2]|=temp;

}

TimeTemp[1]=((TimeTemp[1]/10)<<4)+(TimeTemp[1]%10); TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]%10); 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<aduc848.h> #include <INTRINS.H>

- 21 -

单片机课程设计报告

#include<LCD1602.h>

#include<rtc.h>

sbit lie0=P2^3;

sbit lie1=P2^2;

sbit lie2=P2^1;

sbit lie3=P2^0;

sbit PWM1=P2^6;

unsigned char temp;

unsigned char key;

unsigned char STH0,STL0;

unsigned char jishi=0;

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]%256; 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]%256; 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,"HuNan University!"); }

第6章 心得体会

这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试,下载,最后终于完成了这次具有实际使用价值的实验。

在设计中我运用自己平时学到的一些知识,以及自己在课下所查找的进行设计,刚开始遇到很多困难,包括对使用C语言环境语言的不熟悉,后来一起和同学研究,而一些课程设计中的故障,也请同学帮忙参考一下,最终找到了解决问题的答案。我感觉自己在设计方面提高很大,特别是在设计程序时,逻辑思维能力有所加强,同时对以前所学的知识有了更深刻的认识,并进一步的得到了巩固和提高,充分的做到了理论联系实际,也使我认识到理论与实际的差别,通过该

- 41 -

单片机课程设计报告

课程设计,不但对单片机有了较为全面的认识,而且相关的知识也有了足够的掌握,我感觉最重要的还是设计思维的形成。更发现自己在平时学习中的缺陷。对以后的学习也有很大的帮助。

两周的课程设计,我所收获的不仅是学习知识方面,更多的是生活方面。我了解到,在我们生活中,应该学会与别人共同分享,分享知识,分享问题,这样更有助于我们的交流,有利于我们共同进步,有利于我们对学习养成良好的兴趣。

最后,我要感谢那些带我们课程设计的老师们,感谢你们对我们的耐心,感谢你们对我们的鼓励,让我们有信心继续下去,成功走到最后。

- 42 -

更多相关推荐:
单片机电子琴设计报告

单片机课程设计报告设计题目单片机电子琴摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴…

51单片机电子琴设计报告

扬州大学水利与能源动力工程学院课程设计报告题目电子琴设计课程单片机原理及应用课程设计专业电气工程及其自动化班级姓名学号0第一部任务书1分单片机原理及应用课程设计任务书一课题名称电子琴设计二课程设计目的课程设计是...

基于单片机的电子琴设计报告-含有经典的程序案例

设计报告课程微机接口技术与数字控制设计名称基于单片机的电子琴设计小组成员学号专业机械电子工程日期指导老师成绩1设计任务以生活中的电子琴为设计对象实现音乐的按键控制功用尽量能弹奏出和谐而优美的旋律2设计目的通过单...

51单片机设计电子琴报告含代码

电子琴设计报告一实验目的1更深刻的了解学习8051单片机的发声原理利用定时器可以发出不同频率的脉冲不同频率的脉冲经喇叭驱动电路放大滤波后就会发出不同的音调2其次定时器按设置的定时参数产生中断这一次中断发出脉冲低...

基于51单片机的电子琴课程设计

河南理工大学本科课程设计报告河南理工大学单片机应用与仿真训练设计报告基于单片机的电子琴设计姓名薛吉星学号专业班级自动化088班指导老师刘巍所在学院电气工程与自动化学院20xx年7月5日1河南理工大学本科课程设计...

基于单片机的电子琴设计报告

CAD课程设计简易电子琴姓名专业班级学号指导老师1电子电路摘要简易电子琴电路是以NE555芯片为核心组成的多谐振荡器由振荡器电路产生频率信号再通过由LM386小功率集成功放为核心组成的功放电路最后由扬声器输出信...

专业方向课程设计报告-基于单片机的电子琴设计

专业方向课程设计报告基于单片机的电子琴设计班级组员组号基于单片机的电子琴设计1设计要求44按键组成16个按键矩阵设计成16个音然后再用一个音频放大模块来使音乐播出的声音变大用户可通过这16个键的随意组合来随意弹...

基于单片机的简易电子琴电路设计

单片机课程设计任务书题目基于单片机的简易电子琴电路设计初始条件简易电子琴一般具有弹奏一个自然大调7声音阶的功能本课程设计要求用AT89C51等系列芯片实现控制功能利用按键实现音符和音调的输入两位的数码管进行被操...

基于单片机的简易电子琴设计(汇编语言)00

课程设计11目的本课程设计目的在于培养学生运用已学的单片机原理及应用的基础知识和基本理论加以综合运用进行单片机系统设计的初等训练掌握运用单片机进行系统控制设计的原则设计内容和设计步骤为从事单片机相关的毕业设计或...

单片机设计与制作 简易电子琴的设计

20xx级单片机设计与制作技术报告中国矿业大学徐海学院单片机设计与制作技术报告姓名学号班级电气091班题目基于单片机的简易电子琴任课教师胡明20xx年9月20xx级单片机设计与制作技术报告单片机设计与制作任务书...

基于AT89C51的简易电子琴单片机课程设计

单片机课程设计专业班级学生姓名学号指导教师题目名称基于单片机的可演奏电子琴设计摘要电子琴是现代电子科技与音乐结合的产物是一种新型的键盘乐器它在现代音乐扮演着重要的角色单片机具有强大的控制功能和灵活的编程实现特性...

单片机设计-简易电子琴

电子设计报告基于51单片机的多功能电子琴队别地方生系一大队一队组长冯硕组员易森20xx5401004冯硕20xx5401086程远文20xx5401046刘爽20xx5401628一作品简介漂亮的外观清澈洪亮的...

单片机电子琴设计报告(32篇)