本帖最后由 何必919 于 2013-7-29 13:14 编辑
多媒体设计总体设计本设计主要实现PC机和单片机之间的数据传输,单片机MCU采用AT89C51RD2,以XP操作系统自带的超级终端软件和单片机进行信息传输,为了更好地人机交互、便于使用,上位机界面使用MFC软件设计。此系统功能: (1)电压采集并显示;(2)计数并显示;(3)led控制并显示状态;(4)EEPROM掉电保护;(5)音乐播放;(6)图片浏览;(7)超级终端通信,可通过命令控制单片机进行多项操作;(8)MFC上位机控制,实现更友好的人机交互功能,屏蔽超级终端下的指令操作,便于操作;(9)uCos ii移植的应用,能更好的管理任务,提高工作效率和系统升级空间,uCos ii和ucGUI搭配能够快速设计出比较美观的LCD界面。 本设计总体框图如下:
汉字和图片取模 下载一个取模软件,字体取模时的选项设置为:点阵格式为阴码,取模方式为列行式,取模走向为逆向,文字大小为宽x高=16x16;数字和英文字母大小点阵为:宽x高=8x16 ; 图片取模方法:首先对图片进行处理,因为LCD12864不能显示彩色,而且点阵大小只有128*64,所以必须缩小图片大小和去除彩色;取模方式和字体取模方式类似。 仿真结果LCD12864实时显示系统计数个数、电压和led状态,如下图: 图2.2 系统状态 多媒体模块设计音乐播放曲谱存贮格式 unsigned charcode MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) 音高由三位数字组成: 个位是表示 1~7 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: 数值(n): |0 |1 |2 |3 | 4 | 5 | 6 几分音符: |1 |2 |4 |8 |16|32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 调用演奏子程序的格式 Play(乐曲名,调号,升降八度,演奏速度); 乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束; 调号(0-11) : 是指乐曲升多少个半音演奏; 升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度; 演奏速度(1-12000): 值越大速度越快; 音乐播放采用两个定时器,单片机系统存贮了4首音乐曲谱,由于ROM空间有限,只能存放曲调没有歌词,可由按键选择播放,如下图:
图2.3 音乐播放 图片浏览 ROM里面存贮了多张图片取模后的点阵信息,可通过按键选择播放, 如下图:
图2.4 图片浏览
超级终端通信配置超级终端波特率9600,数据位8位,无奇偶校验,停止位1位,无数据流如图2,5所示: 图2,5 配置超级终端 2.5.2 超级终端命令COMMAND CommandList[MAX_COMMAND_NUM]= { {"help",Help," help -----Command help"}, {"set",Set," set <clearor led><num> ----- Change LED or Count"}, {"display",Display,"display ----- Display LED Count Voltage"}, {"reboot",Reboot," reboot----- Reboot the MCU"}, }; //指令;指令函数;帮助; voidRunHyperTerminal() { if(ExecCommandFlag) { ExecCommand(&SerialBuffer[0]); SerialSendStr(&PromptBuffer[0]); memset(&SerialBuffer[0],'\0',MAX_SERIAL_BUFFER_SIZE); CursorPosion = 0; ExecCommandFlag = 0; } } cmd->>:help help ----- Command help set <clear or led><num> -----Change LED or Count display ----- Display LED Count Voltage reboot ----- Reboot the MCU cmd->>:display The LED Num is : 3 The Count is : 5 The Voltage is : 2.70V cmd->>:setclear The Count is clear! cmd->>:setled 1 The LED stat is change!
图2.6 超级终端 MFC上位机设计收发数据函数下面是数据接收、发送的函数: //串口数据接收事件 LRESULT CSerialCommunicationDlg::OnCommNotify(WPARAM wp, LPARAM lp) { //得到文本内容 LPCTSTR pBuf = (LPCTSTR)wp; //将文本写入文本框 CString str; GetDlgItemText(IDC_EDIT_READ,str); char*pBufChar=(char *)pBuf; str += pBufChar; SetDlgItemText(IDC_EDIT_READ,str); CEdit * output=(CEdit*)GetDlgItem(IDC_EDIT_READ); //随时跟踪滚动条的位置 output->LineScroll(output->GetLineCount());
returnTRUE; } void CSerialCommunicationDlg::OnBnClickedButtonClear() { //TODO: 在此添加控件通知处理程序代码 //TODO: 在此添加控件通知处理程序代码 CString str; str="setclear"; //将数据写入串口 intnLen = (str.GetLength() + 1) * sizeof(TCHAR); m_com.WriteData((byte*)(LPCTSTR)str, nLen);
} 配对串口通过串口(软件配对串口COM1-COM2,如图2.6所示)连接proteus单片机系统;COM1连接proteus,COM2连接超级终端或MFC上位机;
图2.7 配对串口 仿真结果实现控制单片机系统的led状态、计数复位、显示数据和复位功能,其效果如图2.8所示:
图2.8 MFC界面
总结本设计通过串口对单片机进行控制,选择LCD12864显示,MFC编写上位机界面,可以远程对单片机进行简单操作; u 主要设计内容: Ø 电压采集设计; Ø 计数设计; Ø led控制设计; Ø EEPROM掉电保护设计; Ø 音乐播放设计; Ø 图片浏览设计; Ø 超级终端通信设计; Ø MFC上位机界面设计; Ø uCos ii移植的应用。 电子DIY交流平台 QQ群: 215363597附录: 附件:proteus仿真文件
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image015.png
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image017.jpg
|