单片机电子琴设计报告

更新时间: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 #include 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]%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 -

本文来源:https://www.bwwdw.com/article/k67x.html

Top