当前位置:文档之家› 简单音乐播放器实验报告 - 副本

简单音乐播放器实验报告 - 副本

简单音乐播放器实验报告 - 副本
简单音乐播放器实验报告 - 副本

多媒体技术教程

期末实验报告

题目:基于MFC的简单音乐播放器班级:软件工程

专业:软件工程

姓名:xxx

学号:xxxxxxxxxx

指导老师:xxx

Xxxxxxx

一、课题描述

音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个功能非常简单易于操作的MP3播放器。要求能够播放常用Windows音频格式的文件;实现播放控制:播放、暂停、音量增减、添加歌曲等功能;实现从本地磁盘加入文件,然后对其进行播放。本程序是基于MFC对话框的简单程序实现音乐的简单控制。

二、功能分析

MFC简单音乐播放器主要对常用Windows音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。利用MCI 基本知识实现相关功能。通过该程序可以实现简单的音乐播放。核心是让音乐文件和音乐播放设备关联。

三、源代码和截图

具体属性和类向导如下:

实现后截图:

四、实验心得:

实现播放时间的控制是我在实验时遇到的难题,通过上网查询资料得以实现。制作音乐播放器其实是个挺有趣的体验,完成了也有小小成就感。但这个简易音乐播放器还有许多功能尚未实现,例如同步歌词显示等等,要真正做一个完善的播放器还需要很多努力。

各个控件的函数如下:

//浏览

void CMFCDlg::Onfilechoice()

{

char szFileFilter[]="mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|"

"所有文件(*.*)|*.*|";

CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

if(dlg.DoModal()==IDOK)

{

CString strFilepath=dlg.GetPathName();

CString strFilename=dlg.GetFileName();

SetDlgItemText(IDC_filename,strFilename);

Load(this->m_hWnd,strFilepath);

GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的

GetDlgItem(IDC_pause)->EnableWindow(true);

GetDlgItem(IDC_stop)->EnableWindow(true);

m_list.InsertString(m_list.GetCount(),strFilename);

m_list.SetCurSel(m_list.GetCount()-1);

}

}

//播放

void CMFCDlg::Onplay()

{

CString strfilename;

int index=m_list.GetCurSel();

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);

if(index==-1)

{

MessageBox("请添加音乐");

return;

}

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

stop();

Load(this->m_hWnd,strfilename);

play();

SetTimer(0,1000,NULL);

}

//暂停

void CMFCDlg::Onpause()

{

CString strtemp;

GetDlgItemText(IDC_pause,strtemp);//获取按钮状态

if(https://www.doczj.com/doc/5a14527505.html,pare("暂停")==0)

{

pause();

SetDlgItemText(IDC_pause,"恢复");

KillTimer(0);//取消计数器的显示

}

if(https://www.doczj.com/doc/5a14527505.html,pare("恢复")==0)

{

resume();

SetTimer(0,1000,NULL);

SetDlgItemText(IDC_pause,"暂停");

}

}

//停止

void CMFCDlg::Onstop()

{

stop();

SetDlgItemText(IDC_pause,"暂停");

KillTimer(0);//取消计数器的显示

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(320,85,mtime);

GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用

GetDlgItem(IDC_pause)->EnableWindow(false);

GetDlgItem(IDC_del)->EnableWindow(false);

}

//添加

void CMFCDlg::Onfileopen()

{

char filefiler[]="mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|";

CFileDialog

dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefi ler);

if (dlg.DoModal()==IDOK)

{

CString strfilepath=dlg.GetPathName();

CString strfilename=dlg.GetFileName();

SetDlgItemText(IDC_filename,strfilename);

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(320,85,mtime);

Load(this->m_hWnd,strfilepath);

GetDlgItem(IDC_play)->EnableWindow(true);

GetDlgItem(IDC_pause)->EnableWindow(true);

GetDlgItem(IDC_stop)->EnableWindow(true);

GetDlgItem(IDC_del)->EnableWindow(true);

m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名

m_list.SetCurSel(m_list.GetCount()-1);

}

}

//删除

void CMFCDlg::Ondel()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

int index=m_list.GetCurSel();

stop();

SetDlgItemText(IDC_filename,"");

KillTimer(0);

hour=0;minute=0;second=0;

if(index!=CB_ERR)

{

m_list.DeleteString(index);

}

}

void CMFCDlg::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

CString mtime;

second++;

CClientDC dc(this);

dc.SetBkColor(RGB(124,252,0));

dc.SetTextColor(RGB(255,255,203));

if(second==60)

{

minute++;

second=0;

}

if(minute==60){

hour++;

minute=0;

}

mtime.Format("%02d:%02d:%02d",hour,minute,second);

dc.TextOut(320,85,mtime);

DWORD cdf=getinformation(MCI_STATUS_POSITION);

DWORD cdfrom;

cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRA

ME(cdf));

UpdateData(false);

CDialog::OnTimer(nIDEvent);

}

//双击列表

void CMFCDlg::OnDblclkList()

{

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);

CString strfilename;

int index=m_list.GetCurSel();

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

stop();

Load(this->m_hWnd,strfilename);

play();

SetTimer(0,1000,NULL);

}

//上一首

void CMFCDlg::Onprevious()

{

int index;

index=m_list.GetCurSel();

index-=1;

if(index<0){

MessageBox("亲,没有上一首了哟~");

return;

}

m_list.SetCurSel(index);

Onplay();

}

//下一首

void CMFCDlg::Onnext()

{

CString filename;

CString temp;

int index;

index=m_list.GetCurSel();

index+=1;

if(index==m_list.GetCount())

{

MessageBox("已经是最后一首了,亲^.^");

return;

}

m_list.SetCurSel(index);

Onplay();

}

//退出软件

void CMFCDlg::Onexitbt()

{

CDialog::OnCancel();

}

==========================MFC音乐播放器Dlg.cpp================================ // MFC音乐播放器Dlg.cpp : implementation file

//

#include "stdafx.h"

#include "MFC音乐播放器.h"

#include "MFC音乐播放器Dlg.h"

#include "Mmsystem.h"

#include "Digitalv.h"

#pragma comment(lib,"Winmm.lib")

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

HWND m_hWnd;

DWORD DeviceID;

MCI_OPEN_PARMS mciopenparms;

int hour,minute,second;

void Load(HWND hWnd,CString strFilepath)

{

m_hWnd=hWnd;

mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空上一次播放的设备

mciopenparms.lpstrElementName=strFilepath;//将音乐文件路径传给设备

DWORD dwReturn;

if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(L PVOID)&mciopenparms))

{

//如果打开文件失败,则将出错信息储存在buffer,并显示出错警告

char buffer[256];

mciGetErrorString(dwReturn,buffer,256);

MessageBox(hWnd,buffer,"出错警告!",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);

}

DeviceID=mciopenparms.wDeviceID;

//打开文件成功就关联文件到设备

}

DWORD getinformation(DWORD item){

MCI_STATUS_PARMS mcistatusparms;

mcistatusparms.dwItem=item;

mcistatusparms.dwReturn=0;

mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);

return mcistatusparms.dwReturn;

}

void play()

{

MCI_PLAY_PARMS mciplayparms;

mciplayparms.dwCallback=(DWORD)m_hWnd;

mciplayparms.dwFrom=0;//每次播放都是从0开始播放

mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplaypa rms);

}

void pause()

{

mciSendCommand(DeviceID,MCI_PAUSE,0,0);

}

void resume()

{

mciSendCommand(DeviceID,MCI_RESUME,0,0);

}

void stop()

mciSendCommand(DeviceID,MCI_STOP,0,0);

mciSendCommand(DeviceID,MCI_CLOSE,0,0);

//当点击停止按钮时,将所有的信息都清除掉

}

DWORD setvolume(DWORD vol)

{

MCI_DGV_SETAUDIO_PARMS setvolume;//这是设置音量的参数数据结构

setvolume.dwCallback=NULL;

setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;//动作是设置音量

setvolume.dwValue=vol;//音量值是vol

mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO _VALUE,(DWORD)(LPVOID)&setvolume);

return 0;

}

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CMFCDlg dialog

CMFCDlg::CMFCDlg(CWnd* pParent /*=NULL*/)

: CDialog(CMFCDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMFCDlg)

m_int = 0;

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

hour=0;minute=0;second=0;

}

void CMFCDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMFCDlg)

DDX_Control(pDX, IDC_LIST, m_list);

DDX_Control(pDX, IDC_SLIDER, m_slider);

DDX_Text(pDX, IDC_vol, m_int);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)

//{{AFX_MSG_MAP(CMFCDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_about, Onabout)

ON_BN_CLICKED(IDC_exitbt, Onexitbt)

ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER, OnCustomdrawSlider)

ON_BN_CLICKED(IDC_filechoice, Onfilechoice)

ON_BN_CLICKED(IDC_play, Onplay)

ON_BN_CLICKED(IDC_pause, Onpause)

ON_BN_CLICKED(IDC_stop, Onstop)

ON_BN_CLICKED(IDC_fileopen, Onfileopen)

ON_BN_CLICKED(IDC_del, Ondel)

ON_WM_TIMER()

ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)

ON_BN_CLICKED(IDC_previous, Onprevious)

ON_BN_CLICKED(IDC_next, Onnext)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMFCDlg message handlers

BOOL CMFCDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

m_slider.SetRange(0,1000);//滑块的移动范围0~1000

m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50

GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的

GetDlgItem(IDC_pause)->EnableWindow(false);

GetDlgItem(IDC_stop)->EnableWindow(false);

return TRUE; // return TRUE unless you set the focus to a control

}

void CMFCDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CMFCDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

//CDialog::OnPaint();

CPaintDC dc(this);

CRect rect;

GetClientRect(&rect);

CDC dcMem;

dcMem.CreateCompatibleDC(&dc);

CBitmap bmpBackground;

bmpBackground.LoadBitmap(IDB_BITMAP5);

BITMAP bitmap;

bmpBackground.GetBitmap(&bitmap);

CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeig ht,SRCCOPY);

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CMFCDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CMFCDlg::Onabout()

{

CAboutDlg dlg;

dlg.DoModal();

}

void CMFCDlg::Onexitbt()

{

CDialog::OnCancel();

}

void CMFCDlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult)

{

UpdateData(true);

m_int=m_slider.GetPos()/10;

setvolume(m_slider.GetPos());

UpdateData(false);

*pResult = 0;

}

void CMFCDlg::Onfilechoice()

{

char szFileFilter[]="mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|"

"所有文件(*.*)|*.*|";

CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

if(dlg.DoModal()==IDOK)

{

CString strFilepath=dlg.GetPathName();

CString strFilename=dlg.GetFileName();

SetDlgItemText(IDC_filename,strFilename);

Load(this->m_hWnd,strFilepath);

GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的

GetDlgItem(IDC_pause)->EnableWindow(true);

GetDlgItem(IDC_stop)->EnableWindow(true);

m_list.InsertString(m_list.GetCount(),strFilename);

m_list.SetCurSel(m_list.GetCount()-1);

}

}

void CMFCDlg::Onplay()

{

CString strfilename;

int index=m_list.GetCurSel();

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);

if(index==-1)

{

MessageBox("请添加音乐");

return;

}

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

stop();

Load(this->m_hWnd,strfilename);

play();

SetTimer(0,1000,NULL);

}

void CMFCDlg::Onpause()

{

CString strtemp;

GetDlgItemText(IDC_pause,strtemp);//获取按钮状态

if(https://www.doczj.com/doc/5a14527505.html,pare("暂停")==0)

{

pause();

SetDlgItemText(IDC_pause,"恢复");

KillTimer(0);//取消计数器的显示

}

if(https://www.doczj.com/doc/5a14527505.html,pare("恢复")==0)

{

resume();

SetTimer(0,1000,NULL);

SetDlgItemText(IDC_pause,"暂停");

}

}

void CMFCDlg::Onstop()

{

stop();

SetDlgItemText(IDC_pause,"暂停");

KillTimer(0);//取消计数器的显示

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(320,85,mtime);

GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用

GetDlgItem(IDC_pause)->EnableWindow(false);

GetDlgItem(IDC_del)->EnableWindow(false);

}

void CMFCDlg::Onfileopen()

{

char filefiler[]="mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|";

CFileDialog

dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefi ler);

if (dlg.DoModal()==IDOK)

{

CString strfilepath=dlg.GetPathName();

CString strfilename=dlg.GetFileName();

SetDlgItemText(IDC_filename,strfilename);

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(320,85,mtime);

Load(this->m_hWnd,strfilepath);

GetDlgItem(IDC_play)->EnableWindow(true);

GetDlgItem(IDC_pause)->EnableWindow(true);

GetDlgItem(IDC_stop)->EnableWindow(true);

GetDlgItem(IDC_del)->EnableWindow(true);

m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名

m_list.SetCurSel(m_list.GetCount()-1);

}

}

void CMFCDlg::Ondel()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

int index=m_list.GetCurSel();

stop();

SetDlgItemText(IDC_filename,"");

KillTimer(0);

hour=0;minute=0;second=0;

if(index!=CB_ERR)

{

m_list.DeleteString(index);

}

}

void CMFCDlg::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

CString mtime;

second++;

CClientDC dc(this);

dc.SetBkColor(RGB(124,252,0));

dc.SetTextColor(RGB(255,255,203));

if(second==60)

{

minute++;

second=0;

}

if(minute==60){

hour++;

minute=0;

}

mtime.Format("%02d:%02d:%02d",hour,minute,second);

dc.TextOut(320,85,mtime);

DWORD cdf=getinformation(MCI_STATUS_POSITION);

DWORD cdfrom;

cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRA ME(cdf));

UpdateData(false);

CDialog::OnTimer(nIDEvent);

}

void CMFCDlg::OnDblclkList()

{

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(320,85,mtime);

CString strfilename;

int index=m_list.GetCurSel();

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

stop();

Load(this->m_hWnd,strfilename);

play();

SetTimer(0,1000,NULL);

}

void CMFCDlg::Onprevious()

{

int index;

index=m_list.GetCurSel();

index-=1;

if(index<0){

MessageBox("亲,没有上一首了哟~");

return;

}

m_list.SetCurSel(index);

Onplay();

}

void CMFCDlg::Onnext()

{

CString filename;

CString temp;

int index;

index=m_list.GetCurSel();

index+=1;

if(index==m_list.GetCount())

{

MessageBox("已经是最后一首了,亲^.^");

return;

}

m_list.SetCurSel(index);

Onplay();

}

安卓音乐播放器开发,含源代码

基于an droid平台的音乐播放器开发 实验报告 学生姓名:_______ 温从林 _________________ 学号: ___________________________________ 班级:计自1201 _____________ 第一章引言 1.1项目背景 当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Win dowsmobile,symbia n,以及谷歌的An droid操作系统,其中占有开放源代码优势的An droid系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌An droid系统就能做到。本文的音乐播放器就是基于谷歌An droid手机平台的播放器。 An droid :是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于An droid平台的。 1.2编写目的 现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3 Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。

本项目是一款基于An droid手机平台的音乐播放器,使An droid手机拥有个性的 多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练An droid的技术和其它在市场上的特点。 1.3开发环境 Eclipse、An droid SDK 320 第二章系统需求分析 2.1功能需求(用例图分析) 根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述: 2.1.1播放器的用例图 假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作, 启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下 图2.1 播放器基本用例图 2.1.2用例分析

计算机手工模拟实验报告.doc---完整版---副本

计算手工模拟实验 学生实验报告 学院: 课程名称: 专业班级: 姓名: 学号: 郑州大学商学院

学生实验报告 第一部分:实验概况 一、实验的目的 通过此账套的计算机模拟手工实验网络,使我们比较系统地了解、学习和掌握企业会计核算的基本程序和基础的操作方法,以加强我们对于基本理论的理解,对于基本操作流程的熟悉以及对于基本会计技能的训练,达到理论知识与会计实务的双向统一。另外,强化学生的动手能力,一个人亲自尝试出纳员、存货核算员、成本核算员、工资核算员、记账员、会计主管等多项工作,从而对会计的各个岗位,有了更进一步的了解。以达到学生从全面角度,认识、了解、掌握会计工作的要求。 二、实验的要求 1、熟悉会计工作的基本流程,工作内容以及工作规范等基础知识; 2、能够熟练的进行对实验企业所发生各经济业务的会计核算和账务处理; 3、掌握模拟实验企业建立账户、填制凭证,登记账簿、编制报表等会计实 务操作流程。 第二部分:实验的内容及具体操作的程序 一、实验内容: (一)模拟企业概况 单位名称:天海振中机械股份有限公司 法定住所:天海市珠江道15号 法定代表人:杨帆

纳税识别号:19547365 开户银行:工行陈塘分理处 账号:60488-148 行号:604 设立日期:2002年12月20日 电话:2 (二)会计业务处理的方法 1、会计核算方面采用科目汇总表记账程序(每半个月汇总一次)会计核算。 2、企业使用机打“增值税专用发票”,税率17%、营业税5%、教育费附加3%, 核定每月交纳一次增值税。 3、材料按实际成本计价,存货采取永续盘存制。 4、固定资产折旧采取平均年限法。 5、企业固定资产的后续支出,符合固定资产确认条件的,计入固定资产成本: 与固定资产有关的修理费用等后续支出,计入当期损益。 6、工会经费、职工教育经费、应付福利费分别按职工工资总额的2%、1.5%、14% 提取。工会经费提取后划拨工会账户,职果张经费采用发生时直接计入当期损益的方法。 7、生产费用的归集分配按受益原则,根据计量记录、定额工时比例分配。制造 费用按生产人员工资进行分配,生产成本在在产品与完工产品之间的分配采用约当产量法。 8、企业业务招待费按年销售额的0.4%限额列入管理费用,年末按照应收账款余 额的0.5%提取坏账准备金,差旅费按当地政府规定的标准报销。 9、企业每月按25%的税率预缴所得税,于每月结束后10日内办理完税入库手续, 年底清算,多退少补。 10、利润分配:按利润的10%和5%分别提取法定盈余公积金、任意盈余公积金, 然后按45%比例向投资者分配红利。 (三)本次实验过程 1、期初建账。建立明细分类账,日记账,总账。登记期初余额。 2、经济业务处理。

数据结构实验一 实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK;

基于java的音乐播放器的设计源代码+实验报告

主类M U S I C P L A Y E R类:import .*; public class MusicPlayer implements ActionListener, Serializable,ControllerListener { private static final long serialVersionUID = 1L; private JFrame frame = null; private JPanel controlPanel = null; private JButton btnPlay = null; private JButton btnPre = null; private JButton btnNext = null; private JScrollPane listPane = null; private JList list = null; private DefaultListModel listModel = null; private JMenuBar menubar = null; private JMenu menuFile = null, menuAbout = null, menuMode = null; private JMenuItem itemOpen, itemOpens, itemExit, itemAbout; private JRadioButtonMenuItem itemSingle, itemSequence ,itemRandom; private ListItem currentItem = null; private static Player player = null; private boolean isPause = false; private int mode; private int currentIndex; private ImageIcon iconPlay = new ImageIcon("d:\\"); private ImageIcon iconPre = new ImageIcon("d:\\"); private ImageIcon iconNext = new ImageIcon("d:\\"); private ImageIcon iconPause = new ImageIcon("d:\\"); public static void main(String[] args) { new MusicPlayer(); } public MusicPlayer() { init(); } public void init() { frame = new JFrame(); ("音乐播放器"); (400, 300); (false); (null); ; menubar = new JMenuBar(); menuFile = new JMenu("文件");

化学实验报告单模板

( 实验报告) 姓名:____________________ 单位:____________________ 日期:____________________ 编号:YB-BH-053853 化学实验报告单模板Template of chemical experiment report

化学实验报告单模板 xx中学化学实验报告 高xxxx届x班 固体酒精的制取 指导教师:xxx 实验小组成员:xxxx 实验日期:xxxx-xx-xx 一、实验题目:固态酒精的制取 二、实验目的:通过化学方法实现酒精的固化,便于携带使用 三、实验原理:固体酒精即让酒精从液体变成固体,是一个物理变化过程,其主要成分仍是酒精,化学性质不变.其原理为:用一种可凝固的物质来承载酒精,包容其中,使其具有一定形状和硬度.硬脂酸与氢氧化钠混合后将发生下列反应: CHCOOH+NaOH →1735 CHCOONa+HO 17352 四、实验仪器试剂:250ml烧杯三个1000ml烧杯一个蒸馏水热水硬脂酸氢氧化钠乙醇模版 五、实验操作:1.在一个容器中先装入75g水,加热至60℃至80℃,加入125g酒精,再加入90g硬脂酸,搅拌均匀。 2.在另一个容器中加入75g水,加入20g氢氧化钠溶解,将配置的氢氧化

钠溶液倒入盛有酒精、硬脂酸和石蜡混合物的容器,再加入125g酒精,搅拌,趁热灌入成形的模具中,冷却后即可得固体酒精燃料。 六、讨论: 1、不同固化剂制得的固体霜精的比较: 以醋酸钙为固化剂操作温度较低,在40~50 C即可.但制得的固体酒精放置后易软化变形,最终变成糊状物.因此储存性能较差.不宜久置。 以硝化纤维为固化剂操作温度也在4O~50 c,但尚需用乙酸乙酯和丙酮 溶解硝化纤维.致使成本提高.制得的固体酒精燃烧时可能发生爆炸,故安全性较差。 以乙基羧基乙基纤维素为固化剂虽制备工艺并不复杂,但该固化剂来源困难,价格较高,不易推广使用。 使用硬脂酸和氢氧化钠作固化剂原料来源丰富,成本较低,且产品性能优良。 2 加料方式的影晌: (1)将氢氧化钠同时加入酒精中.然后加热搅拌.这种加料方式较为简单,但由于固化的酒精包在固体硬脂酸和固体氢氧化钠的周围,阻止了两种固体的溶解的反应的进一步进行,因而延长了反应时间和增加了能耗。 (2)将硬脂酸在酒精中加热溶解,再加入固体氢氧化钠,因先后两次加热溶解,较为复杂耗时,且反应完全,生产周期较长。 (3)将硬脂酸和氢氧化钠分别在两份酒精中加热溶解,然后趁热混合,这样反应所用的时间较短,而且产品的质量也较好.3 、温度的影响:见下表:可见在温度很低时由于硬脂酸不能完全溶解,因此无法制得固体酒精;在30 度时硬脂酸可以溶解,但需要较长的时间.且两液混合后立刻生成固体酒精,

实验1实验报告

实验一词法分析 班级:计科12-3 学号:08123282 姓名:樊鑫 一.实验目的 1、学会针对DFA转换图实现相应的高级语言源程序。 2、深刻领会状态转换图的含义,逐步理解有限自动机。 3、掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理。 二.实验内容 TINY计算机语言的编译程序的词法分析部分实现。 从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token)送给语法分析程序。 为了简化程序的编写,有具体的要求如下: (1)数仅仅是整数。 (2)空白符仅仅是空格、回车符、制表符。 (3)代码是自由格式。 (4)注释应放在花括号之内,并且不允许嵌套 三.实验要求 要求实现编译器的以下功能: (1)按规则拼单词,并转换成二元式形式 (2)删除注释行 (3)删除空白符 (空格、回车符、制表符) (4)列表打印源程序,按照源程序的行打印,在每行的前面加上行号,并且打印出每行包含的记号的二元形式 (5)发现并定位错误 ,词法分析进行具体的要求: (1)记号的二元式形式中种类采用枚举方法定义;其中保留字和特殊字符是每个都一个种类,标示符自己是一类,数字是一类;单词的属性就是表示的字符串值。

(2)词法分析的具体功能实现是一个函数GetToken(),每次调用都对剩余的字符串分析得到一个单词或记号识别其种类,收集该记号的符号串属性,当识别一个 单词完毕,采用返回值的形式返回符号的种类,同时采用程序变量的形式提供 当前识别出记号的属性值。这样配合语法分析程序的分析需要的记号及其属性, 生成一个语法树。 (3)标示符和保留字的词法构成相同,为了更好的实现,把语言的保留字建立一个表格存储,这样可以把保留字的识别放在标示符之后,用识别出的标示符对比 该表格,如果存在该表格中则是保留字,否则是一般标示符。 四.实验程序 #include #include #include #include #include using namespace std; enum WordType {WRONG, NUMBER, BIAOSHI, IF, THEN, ELSE, END, REPEAT, UNTIL, //9 READ, WRITE, PLUS, SUBTRACT, MULTIPLY, DIVIDEY, EQUAL, LESSTHAN, COLON,//18 ASSIGNMENT, LINE_FEED, SPACE, TAB, BRACKET_L, BRACKET_R}; //24 enum CharType {ALPHABET, OTHER}; enum WrongType {ZERO, ALP_NUM, NUM_ALP, UNLEAGL_S, NO_MA TCH, UNKNOW}; char *Words [] = {"wrong", "number", "biaoshi", "if", "then", "else", "end", "repeat", "until", //9 "read", "write", "+", "-", "*", "/", "=", "<", ":",//18 ":=", "\n", " ", " ", "{", "}"}; //24 typedef struct { char *str; int wordtype; }Two; char ArrayChar[100], cbuffer; int i=-1, numline = 1, wordtype; string LineChar; Two T; ifstream fp("source.txt",ios::in); int main () { void HandleAlphabet(); void HandleNumber (); void HandleOther (); if (!fp) cout<<"文件打开错误!"<

电子音乐发生器报告-单片机设计实验报告

单片机设计实验报告 题目:电子音乐发生器 班级: 班内序号: 实验组号: 学生姓名: 指导教师:

电子音乐发生器

实验摘要 此次本组制作的基于pic单片机的电子音乐发生器是具有液晶显示屏提示的音乐简单演奏、播放等功能的演示作品。在目前很多简单音乐播放器件(如贺卡、礼品中的简单音乐单元)中,这样的简单电路和rom编程原理都是可以通用的,而且电路搭接、布局简单,十分适合电路原理学习、汇编语言编程零基础训练以及简单礼品核心部分制作参考。 整个系统中,微控制器采用了Microchip公司的PIC16F877,软件设计中涉及PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。本实验用单片机PORTB\D接收来自键盘输入的指令信息,由此确定lcd液晶屏幕显示以及喇叭播放内容,再通过PORTC\D\E输出声音或字幕信息。 A b s t r a c t In this experiment,our group made this pic microcontroller based electronic music generator is a simple LCD prompts music playing, playback and other functions to the presentation. In the current lot of simple music playback devices (such as greeting cards, gift of simple musical elements), such a simple circuit and rom programming principles can all be generic, and the circuit lap, the layout is simple, very suitable circuit schematic learn assembly language zero-based training program and a simple gift core part of the production reference. Throughout the system, the microcontroller uses Microchip's PIC16F877, software design involves PORTB \ PORTC \ PORTD \ PORTE used as a normal digital I / O pin functions. The experiment with the microcontroller PORTB \ D receives commands from the keyboard input information, thereby determining the LCD screen display and speakers to play the content, and then through PORTC \ D \ E output sound or subtitle information. 关键字 单片机——microcontroller 芯片——CMOS chip lcd液晶显示屏——LCD screen 输入输出端口——I / O pin 一.实验论证与比较 电子音乐发生器采用以Microchip公司的PIC16F877芯片为核心的简单控制系统,外部

焊接万用表实验报告 - 副本

电子工艺实习报告 题目名称焊接万用表 班级自动化1106 学号 学生姓名

一、实习目的 1.熟悉手工焊锡的常用工具的使用及其维护与修理。 2.了解基本电子元器件(电阻,电容,电感,电位器,二极管,三极管等),并了解其功能和结构。能正确的读出电阻的阻值。 3.能正确的看懂万用表的电路图,并通过现代焊接技术,把电子元器件焊接组装好万用表,并通过所学知识分析和测试, 4.通过万用表组装实训,进一步熟悉万用表结构、工作原理和使用方法。 5.了解电路理论的实际应用,熟悉仪表的装配和调试工艺,提高专业技能。 6.培养学生的自己动手能力,独立思考,遇到问题时能够独立解决。 二、实习内容 模块一:电子装配、基本识图 1.焊接工艺及注意事项 2.焊接基本流程:清洁处理、加热、给锡。 首次使用电烙铁时,插上电源插头后,电烙铁温度上升的同时,先在烙铁头上涂上少许松香,待加热到焊锡熔点时,再往烙铁头上加焊锡,在使用过程中,由于电烙铁温度很高,达300℃以上,长时间加热会使焊锡熔化挥发,在烙铁头上留下一层污垢,影响焊接,使用时用擦布将烙铁头擦拭干净或在松香里清洗干净,再往烙铁头上加焊锡,保持烙铁头上有一层光亮的焊锡,这样电烙铁才好使用。 3.焊点的正确形状: 1.正确焊点,焊点就象光滑小山丘; 2.不正确焊点,焊锡多,中间空,虚焊; 3.烙铁不正确焊点,元件线未出头 4.不正确焊点,半焊,振动易脱焊; 5.不正确焊点,撤离时带出一个小尖峰; 6.正确焊点,桃形焊点,烙铁从元件引脚方向离; 7.不正确焊点,象油滴焊点,与焊盘未焊接。

元器件焊接好后,元器件引脚不高出电路板面1mm,应将多余部分的引脚用斜口钳或其它剪切工具剪去,使印刷电路板整洁美观。 实际操作时应该尽量按照上图1,6所示,防止虚焊错焊,这样在众多的焊点焊完之后,才能保证这个电路没有断路的焊点。 4.烙铁头的保护 为了便于使用,烙铁在每次使用后都要进行维修,将烙铁头上的黑色氧化层锉去,露出铜的本色,在烙铁加热的过程中要注意观察烙铁头表面的颜色变化,随着颜色的变深,烙的温度渐渐升高,这时要及时把焊锡丝点到烙铁头上,焊锡丝在一定温度时熔化,将烙铁头镀锡,保护烙铁头,镀锡后的烙铁头为白色。 5.烙铁头上多余锡的处理 如果烙铁头上挂有很多的锡,不易焊接,可在烙铁架中带水的海棉上或者在烙铁架的钢丝上抹去多余的锡。不可在工作台或者其他地方抹去。 6.练习试焊 在实际操作前应该找一块练习板来实践,可以使平时废弃的电路板,拿来做实验,练习和熟悉基本操作,在练习的时候要注意纠正自己操作上存在的问题。 练习时注意不断总结,把握加热时间、送锡多少,不可在一个点加热时间过长,否则会使线路板的焊盘烫坏。注意应尽量排列整齐,以便前后对比,改进不足。焊接时先将电烙铁在线路板上加热,大约两秒钟后,送焊锡丝,观察焊锡量的多少,不能太多,造成堆焊;也不能太少,造成虚焊。当焊锡熔化,发出光泽时焊接温度最佳,应立即将焊锡丝移开,再将电烙铁移开。为了再加热中使加热面积最大,要将烙铁头的斜面靠在元件引脚上,烙铁头的顶尖抵在线路板的焊盘上。焊点高度一般在2毫米左右,直径应与焊盘相一致,引脚应高出焊点大约0.5 mm。 模块二:电子制作-MF47A型万用表 1.焊接前准备 对照电路图,将原件按照图示插入对应的焊孔内。 我在焊接的时候焊接顺序是先焊接电阻,在焊接其他的元件,因为其他的元件个数较少而且形态各异,比较容易辨认。而电阻一旦焊接错误就会产生连锁反应。 2.元器件的焊接 在焊接前先做好焊接的练习后在进行操作。

实验1实验报告-

实验1 Windows编程基础实验报告 一、实验目的和要求 (1)创建一个Win32应用程序Ex_SDK,在程序中构造一个编辑框控件和一个按钮。 (2)编辑框用于输入一元二次方程的系数,当单击“计算”按钮,获取方程系数得的根通过TextOut显示在窗口客户区中。 二、实验环境 操作系统:Windows 2000 编译器:Visual C++ 6.0的开发环境 三、实验准备和说明 (1)具备知识:简单的SDK编程基础。 (2)准备本次上机所需要的程序。 (3)创建本次实验工作文件夹“…\Visual C++程序\实验\实验1” 四、实验内容和步骤 1.启动Visual C++ 6.0 打开计算机,启动Visual C++ 6.0系统。 2.创建工程并添加代码 ①选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。单击“工程”标签,从列表框中选中Win32 Application(Win32 应用程序)项。在工程名称框中输入Win32应用程序项目名称Ex_SDK。单击浏览按钮...将工程定位到文件夹“…\Visual C++ 6.0程序\实验\实验1”。 ②单击“确定”按钮继续。在向导第一步对话框中,选中An empty project(一个空的工程)项。单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。 ③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_SDK.cpp,单击“确定”按钮。 ④在打开的文档窗口中输入下面的代码: #include #include #include // 求一元二次方程的根,函数返回根的个数 int GetRoot(float a, float b, float c, double *root) { double delta, deltasqrt; delta = b*b - 4.0 * a * c; if (delta<0.0) return 0; // 无根 deltasqrt = sqrt(delta);

电子音乐发生器报告单片机设计实验报告

单片机设计实验报告 2013年小学期单片机设计实验报告 题目:电子音乐发生器 班级: 班内序号: 实验组号: 学生姓名: 指导教师:

单片机设计实验报告期中检查 教师评语 指导教师签字: 年月日

单片机设计实验报告 电子音乐发生器 ――2011211****班实验摘要 此次本组制作的基于pic单片机的电子音乐发生器是具有液晶显示屏提示的音乐简单演奏、播放等功能的演示作品。在目前很多简单音乐播放器件(如贺卡、礼品中的简单音乐单元)中,这样的简单电路和rom编程原理都是可以通用的,而且电路搭接、布局简单,十分适合电路原理学习、汇编语言编程零基础训练以及简单礼品核心部分制作参考。 整个系统中,微控制器采用了Microchip公司的PIC16F877,软件设计中涉及PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。本实验用单片机PORTB\D接收来自键盘输入的指令信息,由此确定lcd液晶屏幕显示以及喇叭播放内容,再通过PORTC\D\E输出声音或字幕信息。 A b s t r a c t In this experiment,our group made this pic microcontroller based electronic music generator is a simple LCD prompts music playing, playback and other functions to the presentation. In the current lot of simple music playback devices (such as greeting cards, gift of simple musical elements), such a simple circuit and rom programming principles can all be generic, and the circuit lap, the layout is simple, very suitable circuit schematic learn assembly language zero-based training program and a simple gift core part of the production reference. Throughout the system, the microcontroller uses Microchip's PIC16F877, software design involves PORTB \ PORTC \ PORTD \ PORTE used as a normal digital I / O pin functions. The experiment with the microcontroller PORTB \ D receives commands from the keyboard input information, thereby determining the LCD screen display and speakers to play the content, and then through PORTC \ D \ E output sound or subtitle information. 关键字 单片机——microcontroller 芯片——CMOS chip lcd液晶显示屏——LCD screen 输入输出端口——I / O pin

计算机导论实验报告

实验报告 课程名称计算机导论 实验项目名称 Office软件简单运用 班级与班级代码计算机科学与技术1班 实验室名称(或课室) SS1-305 专业计算机科学与技术 任课教师王志坚 学号: 姓名: 实验日期: 2013 年 11 月 27 日

广东财经大学教务处制姓名实验报告成绩评语: 指导教师(签名)

年月日说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 WORD文档的常用编辑与排版 一、实验目的 1、掌握常用的编辑方法。 2、掌握字符和段落的格式化。 3、掌握样式的使用。 4、掌握分栏格式的设置。 一、实验设备和软件 1、计算机。 2、Word2002或以上版本。 二、实验内容和步骤: 1、打开“《世界因你而不同读后感》”文档 2、将标题居中。点击菜单“格式”→“段落”,对齐方式选择居中,然后点击【确定】。(或点击工具条中的【居中】按钮) 3、将标题设成二号黑体、加单线下划线、色字。点击菜单“格式”→“字体”,中文字体选择黑体,字号选择二号,字体颜色选择红色,下划线线型选择单线,然后点击【确定】。

4、格式设置:将第四段设置成:宋体、五号、居中、红色字;整段左缩进1厘米、右缩进1厘米、段前距6磅、段后距3磅、1.5倍行距。选中第七段,第一步:点击菜单“格式”→“字体”,打开“字体”对话框,将中文字体设成宋体,字号设成五号,字体颜色生成红色,然后单击【确定】;第二步:单击菜单“格式”→“段落”,打开“段落”对话框,将对齐方式设成居中,缩进左1厘米、右1厘米,间距段前6磅、段后3磅,行距设成1.5倍行距,然后单击【确定】。

实验1实验报告格式

实验1实验报告格式 《计算机图形学》实验1实验报告 实验题目:用户坐标、视图坐标、Java awt坐标概念的建立和应用 实验内容:掌握用户坐标、视图坐标、Java awt坐标概念,掌握三类坐标的转换算法。编写自己的算法函数,并形成Java语言程序包。编写程序调用验证之。 参考程序:有两个示范程序MyTest.java和MyLineDrawApplet.java 基本概念: 用户坐标:是独立于设备的逻辑坐标,可以是用户用来定义设计对象的各种坐标。 应用程序使用该坐标系:所有传给Java 2D渲染过程的坐标都是指用户坐标。例如下面程序中的默认用户坐标的范围是X轴从-1到1,Y轴也是凑够-1到1。 视图坐标:是设备相关的坐标,随目标渲染设备不同而不同。下面程序中定义的视图坐标的缺省值为(0,0)和(1,1)。 Java awt坐标:使用java.awt时使用的坐标,即窗口显示图像时的边界坐标。 填充:这个过程可以抽象的理解为以已知的线为中心,向周围扩展像素,然后对这些像素所在的方块进行着色。 将用户坐标转换为视图坐标实际上是将独立于设备的逻辑坐标转换为设备相关的坐标,将视图坐标转化为A WT坐标就是将视图坐标按照显示窗口的大小进行缩放。 算法设计:(详细叙述自己设计程序的功能、算法及实现) 程序的功能: 可以根据传入的用户坐标进行视图坐标、A WT坐标之间的转换,其反向转换同理也可以实现,即将转换的方法逆过去即可。此外,程序还可以进行图形的绘画和填充,比如矩形、椭圆、多边形等。 算法及其实现函数: 用户坐标到视图坐标的转换:对于相应的用户坐标应用数学中的平移与放缩,就可以得到视图坐标。具体方法如下:在用户坐标系下,设矩形窗口的左下角坐标为(Ux1,Uyb), 右上角为(Uxr,Uyt),视图坐标系下的两个点坐标分别为(Vx1,V yb)和(Vxr,V yt), 则视图坐标的表达式为:(Xu,Y u)是已知的用户坐标,(Xv ,Y v)是要求的视图坐标Xv=aXu+b Y v=cY u+d 其中:a=(Vxr-Vxl)/(Uxr-Uxl) b=Vxl-aUxl c=(V yt-V yb)/(Uyt-Uyb) d=V yb-cUyb //将用户坐标的点转换到视图坐标 public double view_x(double x) { double s=(x-user_i_x)/(user_a_x- user_i_x); double t=view_i_x[currentV iew]+s* //坐标的平移及压缩 (view_a_x[currentView]-view_i_x[currentV iew]); return t; } public double view_y(double y) { double s=(y-user_i_y)/(user_a_y-user_i_y); double t=view_i_y[currentV iew]+s* //坐标的平移及压缩 (view_a_y[currentView]-view_i_y[currentV iew]); return t; } 视图坐标到A WT坐标的转换:由于视图坐标在0到1之间,因此将显示窗口的宽和高

音乐播放器实验报告

一、实验项目名称 基于单片机的音乐播放器 二、实验目的 Ⅰ设计方案 设计一个基于AT89C51系列单片机的音乐盒,利用按键控制切换演奏出不同的音乐。蜂鸣器发出某个音调,与之对应的LED灯亮起。使用两个按键,一个用来切换歌曲,另一个切换LED的变化花样。Ⅱ研究内容 ①电路有两种模式:演奏音乐模式和花样灯模式 A 演奏音乐模式:演奏完整的一首歌曲,LED随着音乐变化; B 花样灯模式:LED变化出各种花样,蜂鸣器随着发出“滴滴”声; ②按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲; 按下按键2进入花样灯模式,再按切换LED花样,共三种花样。Ⅲ总体方案图 a组成框图: 音乐盒的系统结构以AT89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。系统组成框图如下所示:

b功能结构图: Key1负责切换播放歌曲,共两首。分别是祝你生日快乐和寂寞沙洲冷;Key2负责切换LED显示花样,共3种:顺序显示,由两边向中间移动然后向两边移动,循环显示。 三、实验器材 Windows7 操作系统Proteus仿真软件 keil4软件AT89C51单片机 共阴极数码管开关电容晶振 电阻发光二极管蜂鸣器 四、实验要求 (1)以单片机为主控处理器,用蜂鸣器播放歌曲;

(2)系统要求有选择上一首、下一曲功能; (3)两个按键,可在播放和显示花样中进行切换; (4)用一个键控制花样类型的显示功能; (5)用LED灯闪烁“伴奏”。 五、实训基本原理(附原理图、源程序清单) 1 硬件设计 ①LED显示电路设计与原理 LED显示电路是由8个LED发光二极管组成,连接方式是共阳极,LED接到单片机的P1口,若是低电平,可使LED亮。发光二极管的亮灭是由内部程序控制的,8个LED发光二极管分别对应不同的音阶,所以LED会随着音阶的变化按规律亮灭。 ②硬件电路图及其功能介绍 1)电路中用P3.2、P3.3 控制键; 2)P1.0~P1.7控制LED; 3)P2.3控制蜂鸣器; 4)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。

电机学实验1实验报告

实验报告 课程名称:电机学指导老师:史涔溦成绩:__________________实验名称:直流电动机实验实验类型:验证性实验同组学生姓名: 一、实验目的和要求(必填)二、实验内容和原理(必填) 三、主要仪器设备(必填)四、操作方法和实验步骤 五、实验数据记录和处理六、实验结果与分析(必填) 七、讨论、心得 一、实验目的和要求 1、进行电机实验安全教育和明确实验的基本要求 2、认识在直流电机实验中所用的电机、仪表、变阻器等组件 3、学习直流电动机的接线、起动、改变电机转向以及调速的方法 4、掌握用实验方法测取直流并励电动机的工作特性和机械特性 5、掌握直流并励电动机的调速方法 6、并励电动机的能耗制动 二、实验内容和原理 1、并励直流电动机起动实验 2、改变并励直流电动机转向实验 : 3、测取并励直流电动机的工作特性和机械特性 4、并励直流电动机的调速方法 三、主要仪器设备 1、直流电源(220V,3A,可调) 2、并励直流电动机 3、负载:测功机。与被测电动机同轴相连。 4、调节电阻。电枢调节电阻选取0-90欧,磁场调节电阻选取0—3000欧。 5、直流电压电流表。电压表为直流250V,电枢回路电流表量程,励磁回路电流表量程200mA。 四、操作方法与实验步骤 (1)并励直流电动机的起动实验 接线图: `

实验时,首先将电枢回路电阻调节到最大,因为起动初n=0,而端电压为额定值,如果电枢回路电阻过小那么会因电流过大而烧坏电机。其次应该Rf调节到最小,因为当电枢电流和电动势一定时,磁通量和转速是成反比的,如果磁场太弱,那么会造成很大的转速,从而造成危险。调节电源电压,缓缓启动电机,观察电动机的旋转方向是否符合负载的加载方向。最后逐步减小R1,实现分级起动,直到完全切除R1. 注意每次起动前,将测功机加载旋钮置0。实验完成后,将电压和测功机加载旋钮置0。 (2)改变并励直流电动机转向实验 改变转向,即改变导体的受力方向,则改变电枢电流或者磁场的方向都可以实现。因此对调励磁绕组或者电枢绕组的极性即可。重新起动,观察转向。 (3)测量并励直流电动机的工作特性和机械特性 1、完全起动电机并获取稳定转速,使得R1=0 2、将电动机调节到额定状态,调节电源电压测功机加载旋钮及磁场调节电阻R f ,至额定状态:U=U N , I=I N ,n=n N ,记下此时的I f ,即I fN 。 . 3、保持U=U N ,I f =I fN 不变,调测功机加载旋钮,逐渐减小电动机负载至最小,测I、n、T 2 。 (4)并励直流电动机的调速特性1、改变电枢电压调速 1) 按操作1起动后,切除电枢调节电阻R 1(R 1 =0)

音响放大器的实验报告

音响放大器的实验报告 篇一:实验5 音响放大器报告 东南大学电工电子实验中心 实验报告 课程名称:电子线路实践 第5次实验 实验名称:院(系):专业: 姓名:学号: 实验室:103实验组别: \同组人员: \ 实验时间:XX年6月3日评定成绩:审阅教师: 实验五音响放大器设计 【实验内容】 设计一个音响放大器,性能指标要求为: 功能要求话筒扩音、音量控制、混音功能、音调可调(选作) 额定功率≥0.5W(失真度THD≤10%) 负载阻抗10Ω频率响应fL≤50Hz fH≥20kHz 输入阻抗≥20kΩ话音输入灵敏度≤5mV 音调控制特性(扩展) 1kHz处增益为0dB,125Hz和8kHz 处有±12dB的调节范围 1. 基本要求 功能要求话筒扩音、音量控制、混音功能额定功率≥0.5W(失真度THD≤10%) 负载阻抗10Ω频率响应fL≤

50Hz fH≥20kHz 输入阻抗≥20kΩ话音输入灵敏度≤5mV 2. 提高要求 音调控制特性 1kHz处增益为0dB,125Hz和8kHz处有±12dB的调节范围。 3. 发挥部分 可自行设计实现一些附加功能【实验目的】 1. 了解实验过程:学习、设计、实现、分析、总结。 2. 系统、综合地应用已学到的模拟电路、数字电路的知识,在单元电路设计的基础上,利用multisim软件工具设计出具有一定工程意义和实用价值的电子电路。 3. 通过设计、调试等环节,增强独立分析与解决问题的能力。【报告要求】 (1) 根据实验内容、技术指标及实验室现有条件,自选方案设计出原理图,分析工作原理,计算元件参数。 1)音响放大器电路包含4个模块:话音放大器、混合前置放大器、音调控制器及功率 放大器。电路设计框图如下: 2)各级电路增益分配 3)话音放大器 由于话筒的输出信号一般只有5mV左右,而输出阻抗达到20k。所以话音放大器的作用是不失真地放大声音信号(最

DSB温控实验报告副本

D S B温控实验报告副本Prepared on 21 November 2021

桂林航院电子工程系 单片机课程设计与制作说明书设计题目:DS18B20数字温度计的设计 专业:通信技术 班级: 学号: 姓名: 指导教师: 2012年 6 月28日 桂林航天工业学院 单片机课程设计与制作成绩评定表

单片机课程设计与制作任务书 专业:通信技术学号:2姓名: 一、设计题目:DS18B20数字温度计的设计 二、设计要求: 1.要求采集温度精确到0.1度。 2.显示测量温度 三、设计内容: 硬件设计、软件设计及样品制作 四、设计成果形式: 1、设计说明书一份(不少于4000字); 2、样品一套。 五.完成期限:2010年月日 指导教师:贾磊磊年月日 教研室:年月日 目录 一摘要 (1) 1.1设计要求 (1) 二理论设计 (2)

2.1硬件电路计 (2) 2.1.1芯片介绍 (2) 2.1.2DS18B20简介 (7) 2.2设计方案 (9) 2.2.1.显示方案 (9) 2.2.2.系统硬件电路设计 (11) 2.2.3软件设计流程及描述 (11) 三.系统的调试 (13) 3.1.硬件的调试 (13) 3.2实验结果 (19) 四、设计注意事项 (19) 4.1点阵设计注意事项 (20) 4.2单片机注意事项 (16) 4.3仿真器使用注意事项 (16) 五.设计心得体会 (17) 5.1总结与体会 (17) 摘要 在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越重要。在工业生产的很多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的控制问题。

相关主题
文本预览
相关文档 最新文档