本帖最后由 何必919 于 2013-7-29 13:14 編輯
多媒體設(shè)計(jì)總體設(shè)計(jì)本設(shè)計(jì)主要實(shí)現(xiàn)PC機(jī)和單片機(jī)之間的數(shù)據(jù)傳輸,單片機(jī)MCU采用AT89C51RD2,以XP操作系統(tǒng)自帶的超級(jí)終端軟件和單片機(jī)進(jìn)行信息傳輸,為了更好地人機(jī)交互、便于使用,上位機(jī)界面使用MFC軟件設(shè)計(jì)。此系統(tǒng)功能: (1)電壓采集并顯示;(2)計(jì)數(shù)并顯示;(3)led控制并顯示狀態(tài);(4)EEPROM掉電保護(hù);(5)音樂(lè)播放;(6)圖片瀏覽;(7)超級(jí)終端通信,可通過(guò)命令控制單片機(jī)進(jìn)行多項(xiàng)操作;(8)MFC上位機(jī)控制,實(shí)現(xiàn)更友好的人機(jī)交互功能,屏蔽超級(jí)終端下的指令操作,便于操作;(9)uCos ii移植的應(yīng)用,能更好的管理任務(wù),提高工作效率和系統(tǒng)升級(jí)空間,uCos ii和ucGUI搭配能夠快速設(shè)計(jì)出比較美觀的LCD界面。 本設(shè)計(jì)總體框圖如下:
漢字和圖片取模 下載一個(gè)取模軟件,字體取模時(shí)的選項(xiàng)設(shè)置為:點(diǎn)陣格式為陰碼,取模方式為列行式,取模走向?yàn)槟嫦,文字大小為?/font>x高=16x16;數(shù)字和英文字母大小點(diǎn)陣為:寬x高=8x16 ; 圖片取模方法:首先對(duì)圖片進(jìn)行處理,因?yàn)?/font>LCD12864不能顯示彩色,而且點(diǎn)陣大小只有128*64,所以必須縮小圖片大小和去除彩色;取模方式和字體取模方式類似。 仿真結(jié)果LCD12864實(shí)時(shí)顯示系統(tǒng)計(jì)數(shù)個(gè)數(shù)、電壓和led狀態(tài),如下圖: 圖2.2 系統(tǒng)狀態(tài) 多媒體模塊設(shè)計(jì)音樂(lè)播放曲譜存貯格式 unsigned charcode MusicName{音高,音長(zhǎng),音高,音長(zhǎng)...., 0,0}; 末尾:0,0 表示結(jié)束(Important) 音高由三位數(shù)字組成: 個(gè)位是表示 1~7 這七個(gè)音符 十位是表示音符所在的音區(qū):1-低音,2-中音,3-高音; 百位表示這個(gè)音符是否要升半音: 0-不升,1-升半音。 音長(zhǎng)最多由三位數(shù)字組成: 個(gè)位表示音符的時(shí)值,其對(duì)應(yīng)關(guān)系是: 數(shù)值(n): |0 |1 |2 |3 | 4 | 5 | 6 幾分音符: |1 |2 |4 |8 |16|32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-連音,2-頓音 百位是符點(diǎn)位: 0-無(wú)符點(diǎn),1-有符點(diǎn) 調(diào)用演奏子程序的格式 Play(樂(lè)曲名,調(diào)號(hào),升降八度,演奏速度); 樂(lè)曲名 : 要播放的樂(lè)曲指針,結(jié)尾以(0,0)結(jié)束; 調(diào)號(hào)(0-11) : 是指樂(lè)曲升多少個(gè)半音演奏; 升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度; 演奏速度(1-12000): 值越大速度越快; 音樂(lè)播放采用兩個(gè)定時(shí)器,單片機(jī)系統(tǒng)存貯了4首音樂(lè)曲譜,由于ROM空間有限,只能存放曲調(diào)沒(méi)有歌詞,可由按鍵選擇播放,如下圖:
圖2.3 音樂(lè)播放 圖片瀏覽 ROM里面存貯了多張圖片取模后的點(diǎn)陣信息,可通過(guò)按鍵選擇播放, 如下圖:
圖2.4 圖片瀏覽
超級(jí)終端通信配置超級(jí)終端波特率9600,數(shù)據(jù)位8位,無(wú)奇偶校驗(yàn),停止位1位,無(wú)數(shù)據(jù)流如圖2,5所示: 圖2,5 配置超級(jí)終端 2.5.2 超級(jí)終端命令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"}, }; //指令;指令函數(shù);幫助; 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 超級(jí)終端 MFC上位機(jī)設(shè)計(jì)收發(fā)數(shù)據(jù)函數(shù)下面是數(shù)據(jù)接收、發(fā)送的函數(shù): //串口數(shù)據(jù)接收事件 LRESULT CSerialCommunicationDlg::OnCommNotify(WPARAM wp, LPARAM lp) { //得到文本內(nèi)容 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); //隨時(shí)跟蹤滾動(dòng)條的位置 output->LineScroll(output->GetLineCount());
returnTRUE; } void CSerialCommunicationDlg::OnBnClickedButtonClear() { //TODO: 在此添加控件通知處理程序代碼 //TODO: 在此添加控件通知處理程序代碼 CString str; str="setclear"; //將數(shù)據(jù)寫入串口 intnLen = (str.GetLength() + 1) * sizeof(TCHAR); m_com.WriteData((byte*)(LPCTSTR)str, nLen);
} 配對(duì)串口通過(guò)串口(軟件配對(duì)串口COM1-COM2,如圖2.6所示)連接proteus單片機(jī)系統(tǒng);COM1連接proteus,COM2連接超級(jí)終端或MFC上位機(jī);
圖2.7 配對(duì)串口 仿真結(jié)果實(shí)現(xiàn)控制單片機(jī)系統(tǒng)的led狀態(tài)、計(jì)數(shù)復(fù)位、顯示數(shù)據(jù)和復(fù)位功能,其效果如圖2.8所示:
圖2.8 MFC界面
總結(jié)本設(shè)計(jì)通過(guò)串口對(duì)單片機(jī)進(jìn)行控制,選擇LCD12864顯示,MFC編寫上位機(jī)界面,可以遠(yuǎn)程對(duì)單片機(jī)進(jìn)行簡(jiǎn)單操作; u 主要設(shè)計(jì)內(nèi)容: Ø 電壓采集設(shè)計(jì); Ø 計(jì)數(shù)設(shè)計(jì); Ø led控制設(shè)計(jì); Ø EEPROM掉電保護(hù)設(shè)計(jì); Ø 音樂(lè)播放設(shè)計(jì); Ø 圖片瀏覽設(shè)計(jì); Ø 超級(jí)終端通信設(shè)計(jì); Ø MFC上位機(jī)界面設(shè)計(jì); Ø uCos ii移植的應(yīng)用。 電子DIY交流平臺(tái) QQ群: 215363597附錄: 附件:proteus仿真文件
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
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
|