版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 1設(shè)計(jì)目的:1</b></p><p> 2設(shè)計(jì)任務(wù)及要求:1</p><p><b> 3設(shè)計(jì)思路2</b></p><p><b> 4設(shè)計(jì)實(shí)現(xiàn)2</b></p
2、><p> 4.1MiniGui運(yùn)行環(huán)境設(shè)置2</p><p> 4.2、Minigui交叉編譯環(huán)境的建立3</p><p> 4.3、MiniGui在S3C2440上的移植5</p><p><b> 5界面編程6</b></p><p> 5.1基本的編程概念6</p&g
3、t;<p><b> 5.2頭文件7</b></p><p> 5.3程序入口點(diǎn)7</p><p> 5.4進(jìn)入消息循環(huán)7</p><p> 5.5窗口過程函數(shù)7</p><p> 5.6程序的推出7</p><p> 5.7編譯、鏈接和運(yùn)行7</p&g
4、t;<p> 5.8對(duì)話框編程基礎(chǔ)8</p><p> 5.9對(duì)話框的回調(diào)函數(shù)8</p><p> 5.10控件編程基礎(chǔ)10</p><p> 5.11可以看到運(yùn)行的界面如下圖所示:16</p><p> 5.12打開串口16</p><p> 5.13設(shè)置串口17</p&g
5、t;<p> 5.14串口讀寫19</p><p> 5.15鍵盤處理程序23</p><p><b> 6調(diào)試23</b></p><p><b> 7設(shè)計(jì)總結(jié)24</b></p><p> 8設(shè)計(jì)參考文獻(xiàn)24</p><p><b&
6、gt; 1設(shè)計(jì)目的:</b></p><p> 1.進(jìn)一步鞏固嵌入式系統(tǒng)的基本知識(shí);</p><p> 2.掌握嵌入式應(yīng)用系統(tǒng)的基本結(jié)構(gòu);</p><p> 3.掌握嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用;</p><p> 4.掌握嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法;</p><p>
7、 5.學(xué)會(huì)查閱有關(guān)專業(yè)資料及設(shè)計(jì)手冊(cè);</p><p> 6. MiniGUI界面編程。</p><p><b> 2設(shè)計(jì)任務(wù)及要求:</b></p><p> 1.掌握嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用;</p><p> 2.掌握嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法;</p><
8、;p> 3、MiniGUI在PC上的安裝、移植</p><p> 4、Linux串口編程與MiniGUI界面編程</p><p> 5、串口傳輸數(shù)據(jù)(位圖)并在TQ2440的LCD上顯示</p><p> 6.編寫設(shè)計(jì)說明書(方案的確定、設(shè)計(jì)環(huán)節(jié)的考慮及必要說明等)及設(shè)備的使用說明;</p><p><b> 7.繪
9、制有關(guān)圖紙.</b></p><p><b> 3設(shè)計(jì)思路</b></p><p> 基礎(chǔ)知識(shí)的回顧復(fù)習(xí),包括:虛擬機(jī)的安裝,F(xiàn)edora10的基本使用,嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用,嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法.。</p><p> MiniGUI在pc機(jī)上的安裝。(可參照《minigui用戶手冊(cè)》)
10、</p><p> 參照《Minigui技術(shù)白皮書》和《Minigui編程指南》學(xué)習(xí)基于 MiniGUI的應(yīng)用界面編程方法。</p><p> 運(yùn)行minigui演示程序,設(shè)計(jì)界面,開始界面編程。</p><p> 交叉編譯環(huán)境的建立,及MiniGui在TQ2440上的移植</p><p><b> 開始綜合調(diào)
11、試</b></p><p><b> 4設(shè)計(jì)實(shí)現(xiàn)</b></p><p> 4.1MiniGui運(yùn)行環(huán)境設(shè)置</p><p><b> 1、安裝qvfb</b></p><p> 進(jìn)入到/opt/minigui目錄下:cd /opt/minigui</p><
12、p> 解壓:#tar zxvf /mnt/hgfs/linux/ qvfb-1.1.tar.gz</p><p> #cd / qvfb-1.1</p><p> #./configure //生成Makefile文件</p><p> #make //編譯</p><p> #make install //安裝</p
13、><p><b> 測(cè)試qvfb</b></p><p><b> #qvfb &</b></p><p> 2、安裝運(yùn)行MiniGui</p><p> 在/opt下新建目錄/opt/minigui</p><p> 1)、先將下載的源碼包,包括libmini
14、gui-1.6.10.tar.gz minigui-res-1.6.10.tar.gz、mde-1.6.10.tar.gz放到共享目錄下。</p><p> 2)、資源文件的安裝</p><p> 進(jìn)入到/opt/minigui目錄下:cd /opt/minigui</p><p> 解壓:#tar zxvf /mnt/hgfs/linux/minigui-r
15、es-1.6.10.tar.gz</p><p> 安裝:#cd /minigui-res-1.6.10</p><p> #make install</p><p> 3)、配置和編譯minigui</p><p> 進(jìn)入到/opt/minigui目錄下cd /opt/minigui</p><p> 解壓
16、:#tar zxvf /mnt/hgfs/linux/libminigui -1.6.10.tar.gz</p><p> #cd / libminigui -1.6.10</p><p> #./configure //生成Makefile文件</p><p> #make //編譯</p><p> #make install
17、//安裝</p><p> 在文件/etc/ld.so.conf添加/usr/local/lib</p><p> 3)編譯并運(yùn)行MiniGui的演示程序</p><p> 解壓:#tar zxvf /mnt/hgfs/linux/mg-samples-1.6.10.tar.gz</p><p> #cd mg-samples-1.6
18、.10</p><p> #./configure</p><p><b> #make</b></p><p> #qvfb & //出現(xiàn)如下圖所示</p><p> 為了匹配,修改配置如下圖:</p><p> #cd /opt//minigui/mg-samples-1.6
19、.10/src</p><p> #./helloworld </p><p> 執(zhí)行完后會(huì)啟動(dòng)字體演示程序,若能正常顯示,說明 MiniGui環(huán)境成功建立。 </p><p> 4.2、Minigui交叉編譯環(huán)境的建立</p><p> 1、安裝交叉編譯器arm-linux-gcc</p><p> 2、在
20、/opt/minigui下新建目錄temp </p><p> #cd /opt/minigui</p><p> #mkdir temp</p><p> 3、建立交叉編譯的lib</p><p> 修改libminigui -1.6.10下的configure文件,在文件頭添加</p><p> CC=
21、arm-linux-gcc</p><p> CPP= arm-linux--cpp</p><p> LD= arm-linux-ld</p><p> AR= arm-linux-ar</p><p> RANLIB= arm-linux-ranlib</p><p> STRIP= arm-linux-
22、strip</p><p> 將libcross.sh拷到libminigui -1.6.10文件夾中</p><p> libcross.sh文件內(nèi)容如下:</p><p><b> #/bin/sh</b></p><p> ./configure --prefix=/opt/minigui/temp/ --
23、host=arm-linux --target=arm-linux</p><p><b> make</b></p><p> make install</p><p> 運(yùn)行腳本#sh libcross.sh</p><p> 之后可以查看到/opt/minigui/temp下面生成了etc、lib、incl
24、ude三個(gè)目錄</p><p> 4、建立交叉編譯的res</p><p> 修改minigui-res-1.6.10下的config.linux文件的第11行TOPDIR=/home/nick/minigui/tmp</p><p> 將rescross.sh 拷到minigui-res-1.6.10文件夾中</p><p> re
25、scross.sh文件內(nèi)容如下:</p><p><b> #!/bin/sh</b></p><p> make install</p><p> 運(yùn)行腳本#sh rescross.sh</p><p> 可以查看/opt/minigui/temp下面生成usr目錄</p><p>
26、5、修改mg-samples-1.6.10下的configure文件,在文件頭添加</p><p> CC= arm-linux-gcc</p><p> CPP= arm-linux--cpp</p><p> LD= arm-linux-ld</p><p> AR= arm-linux-ar</p><p&g
27、t; RANLIB= arm-linux-ranlib</p><p> STRIP= arm-linux-strip</p><p> 將samplecorss.sh拷到mg-samples-1.6.10文件夾中</p><p> samplecorss.sh文件內(nèi)容如下:</p><p><b> #!/bin/sh&
28、lt;/b></p><p> ./configure --host=arm-linux --target=arm-linux --prefix=/opt/minigui/temp/ LDFLAGS=-L/opt/minigui/temp/lib CPPFLAGS=-I/opt/minigui/temp/include CFLAGS=-I/opt/minigui/temp/include</p>
29、;<p><b> Make</b></p><p> 運(yùn)行腳本#sh samplecorss.sh</p><p> 可以查看/opt/minigui/ mg-samples-1.6.10/src下生成了可執(zhí)行文件</p><p> 4.3、MiniGui在S3C2440上的移植</p><p>
30、 1、修改/opt/minigui/temp下的etc下的MINIGUI的配置文件</p><p><b> [system] </b></p><p> #GAL engine and default options </p><p> gal_engine=fbcon </p><
31、;p> defaultmode=800x480-16bpp </p><p> # IAL engine </p><p> ial_engine=console </p><p> mdev=/dev/mice </p><p> mtype=IMPS2 </p><p>
32、 [fbcon] </p><p> defaultmode=800x480-16bpp </p><p> [qvfb] </p><p> defaultmode=800x480-16bpp </p><p><b> display=0</b></p><p
33、> gal_engine:指定使用的圖形引擎 </p><p> defaultmode:指定圖形引擎的顯示模式,格式為:寬 x高-顯示位數(shù)(bpp) </p><p> ial_engine:指定使用的輸入引擎 </p><p> mdev:指定鼠標(biāo)設(shè)備文件 </p><p> mtype:指定鼠標(biāo)協(xié)議類型 </p&
34、gt;<p> 其中ial_engine輸入引擎中mdev的設(shè)備文件目錄路徑可通過在超級(jí)終端運(yùn)行:#ls /dev 來具體查看。</p><p><b> 2、建立超級(jí)終端</b></p><p> 1)pc機(jī)與開發(fā)板串口相連</p><p> 2)開始-附件-通信-超級(jí)終端(波特率115200,數(shù)據(jù)位8,奇偶校驗(yàn):無,停
35、止位1,數(shù)據(jù)控制流:無)</p><p><b> 3.NFS服務(wù)配置</b></p><p> 1)、#setup,選擇system services 將nfs選中</p><p> 點(diǎn)ok退出選擇Firewall configuration 進(jìn)入防火墻設(shè)置</p><p> 將enable前的*號(hào)去掉<
36、/p><p> 2)、將pc機(jī)與開發(fā)板的網(wǎng)線相連</p><p> 執(zhí)行#ifconfig 查看pc機(jī) ip地址,或是修改pc機(jī)的ip地址</p><p> #ifconfig eth1 192.168.1.10 </p><p> 在超級(jí)終端同樣執(zhí)行:#ifconfig查看開發(fā)板的IP地址,實(shí)驗(yàn)中查得為192.168.1.6,然后執(zhí)行#
37、ping 192.168.1.10 若能ping得同,說明網(wǎng)線正常連接</p><p> #vim /etc/profile,修改/etc/profile中內(nèi)容如下:</p><p> #service nfs reatart 啟動(dòng)nfs服務(wù),啟動(dòng)成功會(huì)有如下圖所示:</p><p> 3)在超級(jí)終端運(yùn)行:</p><p> #mou
38、nt –o nolock,rsize=1024,wsize=1024 192.168.1.10:/ /mnt</p><p> 完成pc機(jī)根目錄下的內(nèi)容掛載至開發(fā)板/mnt目錄下。</p><p><b> #cd /mnt </b></p><p><b> #ls</b></p><p>
39、 若能看到pc機(jī)的根目錄內(nèi)容,說明掛載成功。</p><p><b> 4、移植</b></p><p> 1)將/opt/minigui/temp/etc下的Mingui.cfg文件拷到開發(fā)板/etc目錄下。2)將/opt/minigui/temp /lib下的所有文件拷貝到開發(fā)板/usr/lib目錄下</p><p> 3)將pc機(jī)
40、/opt/minigui/temp/usr/local/lib中所有內(nèi)容拷貝到開發(fā)板的/usr/local/lib下</p><p> 12、把/opt/minigui/mg-samples-1.6.10/src中任意可執(zhí)行文件和資源文件拷貝到開發(fā)板的/usr/minigui下面,沒有這個(gè)目錄自己建一個(gè),最后運(yùn)行科執(zhí)行程序,觀察開發(fā)板上的lcd顯示情況,若能出現(xiàn)相應(yīng)串口,則證明移植成功。</p>
41、<p><b> 5界面編程</b></p><p> 5.1基本的編程概念</p><p> MiniGUI是一個(gè)圖形用戶界面支持的系統(tǒng),通常的GUI編程概念均適用于MiniGUI編程,如窗口和事件驅(qū)動(dòng)編程等。</p><p><b> 5.2頭文件</b></p><p>
42、Com.c的開始所包括的四個(gè)頭文件分別是:</p><p> <minigui/common.h> <minigui/minigui.h> <minigui/gdi.h> <minigui/window.h> </p><p> 他們是所有的MiniGUI應(yīng)用程序都必須包括的頭文件。</p><p><b&
43、gt; 5.3程序入口點(diǎn)</b></p><p> 一個(gè)C程序的入口點(diǎn)為main函數(shù),而一個(gè)MiniGUI程序的入口點(diǎn)為</p><p> MiniGUIMain,該函數(shù)原型如下:</p><p> int MiniGUIMain (int argc, const char* argv[])</p><p> main函
44、數(shù)已經(jīng)在MiniGUI的函數(shù)庫中定義了,該函數(shù)在進(jìn)行一些MiniGUI的出始化工作之后調(diào)用MiniGUIMain函數(shù)。</p><p><b> 5.4進(jìn)入消息循環(huán)</b></p><p> 在函數(shù)DialogBoxIndirectParam (&DlgMyCom, HWND_DESKTOP, DialogBoxProc2, 0L);和函數(shù)static i
45、nt DialogBoxProc2 (HWND hDlg1, int message, WPARAM wParam, LPARAM lParam)的MSG_INITDIALOG進(jìn)行消息的循環(huán)。</p><p> 其中: 1、hwnd 消息發(fā)往的窗口的句柄。</p><p> 2、message 消息標(biāo)識(shí)符。</p><p> 3、wParam 一個(gè)32位的消息
46、參數(shù),其含義是根據(jù)消息的不同而不同。</p><p> 4、IParam 一個(gè)32位的消息參數(shù),去含義是取決于消息的類型。</p><p><b> 5.5窗口過程函數(shù)</b></p><p> 窗口過程函數(shù)是MiniGUI程序的主體部分,應(yīng)用程序?qū)嶋H所做的工作大部分都發(fā)生在窗口的過程函數(shù)中,以為GUI程序的主要任務(wù)是接收和處理窗口收的
47、各種消息。</p><p><b> 5.6程序的推出</b></p><p> 用戶單擊窗口右上角的關(guān)閉按鈕時(shí)窗口過程函數(shù)將收到一個(gè)MSG_CLOSE消息。</p><p> 5.7編譯、鏈接和運(yùn)行</p><p> 編寫自己的Makefile文件</p><p> LFLAGS+=-
48、Llib/-lpthread -lminigui -lm -lpng -lpthread –ljpeg//庫的路徑</p><p> com: com.o</p><p> cc $(LFLAGS) -o com com.o</p><p> com.o: com.c</p><p> cc -c com.c</p>&
49、lt;p><b> clean:</b></p><p> rm *.o com</p><p> 把編好的Makefile文件和C程序放到一起。</p><p><b> $make</b></p><p><b> $./ com</b></p>
50、<p><b> 就可以運(yùn)行程序了。</b></p><p> 5.8對(duì)話框編程基礎(chǔ)</p><p> 在MiniGUI中,對(duì)話框是一類特殊的主窗口,這中主窗口只關(guān)注與用戶的交互—向用戶提供輸出消息,但更多的是用于用戶輸入。對(duì)話框可以理解為子類化之后的主窗口。它針對(duì)對(duì)話框的特殊性進(jìn)行了特殊設(shè)計(jì)。</p><p> /***
51、************對(duì)話框定義****************************************/</p><p> static DLGTEMPLATE DlgMyCom = </p><p><b> { </b></p><p> WS_BORDER | WS_CAPTION, </p><p&
52、gt; WS_EX_NONE, </p><p> 0, 0, 800, 480, </p><p><b> "MyCom", </b></p><p><b> 0, 0, </b></p><p> 28, NULL, </p><p>&
53、lt;b> 0 </b></p><p> };這個(gè)函數(shù)就是對(duì)話框的一個(gè)基本定義了。其中28是包含的控件數(shù),如果包含的控件沒有填入正確的個(gè)數(shù),那么Qt不會(huì)正常顯示。</p><p> 5.9對(duì)話框的回調(diào)函數(shù)</p><p> static int DialogBoxProc2 (HWND hDlg, int message, WPARAM
54、wParam, LPARAM lParam) </p><p><b> { </b></p><p><b> int i;</b></p><p> switch (message) { </p><p> case MSG_INITDIALOG:</p><p>
55、; printf("init dialog\n"); </p><p><b> { </b></p><p> for (i = IDC_BUTTON_SEND; i <= IDC_BUTTON_9; i++) </p><p> SetNotificationCallback (GetDlgItem (hD
56、lg, i), my_notif_proc);</p><p><b> }</b></p><p><b> /*端口選擇*/</b></p><p> SendDlgItemMessage(hDlg, IDC_BOX_PORT, CB_ADDSTRING, 0, (LPARAM)"串口0");
57、</p><p> SendDlgItemMessage(hDlg, IDC_BOX_PORT, CB_ADDSTRING, 0, (LPARAM)"串口1"); </p><p><b> /*波特率設(shè)置*/</b></p><p> SendDlgItemMessage(hDlg, IDC_BOX_BAUDRAT
58、E, CB_ADDSTRING, 0, (LPARAM) "115200");</p><p> SendDlgItemMessage(hDlg, IDC_BOX_BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "57600"); </p><p> SendDlgItemMessage(hDlg, IDC_BOX_BA
59、UDRATE, CB_ADDSTRING, 0, (LPARAM) "38400");</p><p> SendDlgItemMessage(hDlg, IDC_BOX_BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "19200");</p><p> SendDlgItemMessage(hDlg, IDC_BOX_
60、BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "9600"); </p><p> SendDlgItemMessage(hDlg, IDC_BOX_BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "4800"); </p><p> SendDlgItemMessage(hDlg, IDC_BO
61、X_BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "2400"); </p><p> SendDlgItemMessage(hDlg, IDC_BOX_BAUDRATE, CB_ADDSTRING, 0, (LPARAM) "300"); </p><p><b> /*奇偶校驗(yàn)位*/</b>
62、</p><p> SendDlgItemMessage(hDlg, IDC_BOX_PARITYBIT, CB_ADDSTRING, 0, (LPARAM)"None");</p><p> SendDlgItemMessage(hDlg, IDC_BOX_PARITYBIT, CB_ADDSTRING, 0, (LPARAM)"Odd");&
63、lt;/p><p> SendDlgItemMessage(hDlg, IDC_BOX_PARITYBIT, CB_ADDSTRING, 0, (LPARAM)"Even"); </p><p> SendDlgItemMessage(hDlg, IDC_BOX_PARITYBIT, CB_ADDSTRING, 0, (LPARAM)"Space"
64、); </p><p> /* 加入數(shù)據(jù)位 */</p><p> SendDlgItemMessage(hDlg, IDC_BOX_DATABIT, CB_ADDSTRING, 0, (LPARAM)"8");</p><p> SendDlgItemMessage(hDlg, IDC_BOX_DATABIT, CB_ADDSTRING
65、, 0, (LPARAM)"7");</p><p> /* 加入停止位 */</p><p> SendDlgItemMessage(hDlg, IDC_BOX_STOPBIT, CB_ADDSTRING, 0, (LPARAM)"0");</p><p> SendDlgItemMessage(hDlg, IDC_B
66、OX_STOPBIT, CB_ADDSTRING, 0,(LPARAM) "1"); </p><p><b> return 1;</b></p><p> case MSG_COMMAND:</p><p> switch (wParam) {</p><p> case IDO
67、K: </p><p><b> break;</b></p><p> case IDCANCEL://窗口關(guān)閉消息時(shí),銷毀對(duì)話框,控件</p><p> EndDialog (hDlg, wParam);//退出對(duì)話框</p><p><b> break;</b></p&
68、gt;<p><b> }</b></p><p><b> break; </b></p><p><b> }; </b></p><p> return DefaultDialogProc (hDlg, message, wParam, lParam);//對(duì)話框缺省消息返
69、回。</p><p><b> }</b></p><p> 在DialogBoxProc2中,需要定義對(duì)話框模板、對(duì)話框的托管主窗口句柄、對(duì)話框回調(diào)函數(shù)地址,以及要傳遞到對(duì)話框過程的參數(shù)值。EndDialog用來結(jié)束對(duì)話框過程。DestroyAllControls用來銷毀對(duì)話框中的所有子控件。</p><p> 5.10控件編程基礎(chǔ)&l
70、t;/p><p> 較為復(fù)雜的GUI系統(tǒng)中,都帶有預(yù)定義的控件集合,他們是人機(jī)交互的主要元素。而此次實(shí)驗(yàn)用到的控件分別是靜態(tài)框、按鈕、多行編輯框、旋鈕組合和框。</p><p> 他們的定義分別如下:</p><p> static CTRLDATA CtrlMyTaste[] = </p><p><b> { </b&
71、gt;</p><p> /*****************定義端口選擇的復(fù)選框***************************************/</p><p><b> { </b></p><p> "static", </p><p> WS_VISIBLE | SS_
72、LEFT | WS_GROUP, </p><p> 16, 60, 100, 80, </p><p> IDC_PROMPT_PORT, </p><p><b> "串口選擇", </b></p><p><b> 0 </b></p><p&g
73、t;<b> }, </b></p><p><b> {</b></p><p> "combobox",</p><p> WS_VISIBLE | CBS_DROPDOWNLIST | CBS_NOTIFY,</p><p> 100, 60, 100, 30,&
74、lt;/p><p> IDC_BOX_PORT,</p><p><b> "串口0",</b></p><p><b> 60</b></p><p><b> },</b></p><p> /***************
75、**定義波特率設(shè)置的復(fù)選框***************************************/</p><p><b> { </b></p><p> "static", </p><p> WS_VISIBLE | SS_LEFT | WS_GROUP, </p><p> 1
76、6, 90, 100, 110, </p><p> IDC_PROMPT_BAUDRATE, </p><p><b> "波特率設(shè)置", </b></p><p><b> 0 </b></p><p><b> }, </b></p>
77、;<p><b> {</b></p><p> "combobox",</p><p> WS_VISIBLE | CBS_DROPDOWNLIST | CBS_NOTIFY,</p><p> 100, 90, 100, 30,</p><p> IDC_BOX_BAUDR
78、ATE,</p><p><b> "115200",</b></p><p><b> 60</b></p><p><b> },</b></p><p> /**************定義數(shù)據(jù)位的復(fù)選框********************
79、************/</p><p><b> {</b></p><p><b> "static",</b></p><p> WS_VISIBLE | SS_LEFT | WS_GROUP,</p><p> 16, 120, 100, 30,</p&g
80、t;<p> IDC_PROMPT_DATABIT,</p><p><b> "數(shù)據(jù)位",</b></p><p><b> 0</b></p><p><b> },</b></p><p><b> {</b&g
81、t;</p><p> "combobox",</p><p> WS_VISIBLE | CBS_DROPDOWNLIST | CBS_NOTIFY,</p><p> 100, 120, 100, 30,</p><p> IDC_BOX_DATABIT,</p><p><b&g
82、t; "8",</b></p><p><b> 60</b></p><p><b> },</b></p><p> /**************定義停止位的復(fù)選框********************************/</p><p><
83、;b> {</b></p><p><b> "static",</b></p><p> WS_VISIBLE | SS_LEFT | WS_GROUP,</p><p> 16, 150, 100, 30,</p><p> IDC_PROMPT_STOPBIT,<
84、;/p><p><b> "停止位",</b></p><p><b> 0</b></p><p><b> },</b></p><p><b> {</b></p><p> "combob
85、ox",</p><p> WS_VISIBLE | CBS_DROPDOWNLIST | CBS_NOTIFY,</p><p> 100, 150, 100, 30,</p><p> IDC_BOX_STOPBIT,</p><p><b> "1",</b></p>
86、;<p><b> 40</b></p><p><b> },</b></p><p> /**************定義奇偶校驗(yàn)位的復(fù)選框********************************/</p><p><b> {</b></p><
87、p><b> "static",</b></p><p> WS_VISIBLE | SS_LEFT | WS_GROUP,</p><p> 16, 180, 100, 30,</p><p> IDC_PROMPT_PARITYBIT,</p><p><b> &quo
88、t;奇偶校驗(yàn)位",</b></p><p><b> 0</b></p><p><b> },</b></p><p><b> {</b></p><p> "combobox",</p><p>
89、 WS_VISIBLE | CBS_DROPDOWNLIST | CBS_NOTIFY,</p><p> 100, 180, 100, 30,</p><p> IDC_BOX_PARITYBIT,</p><p><b> "N",</b></p><p><b> 60<
90、/b></p><p><b> }, </b></p><p> /**************************定義打開、關(guān)閉串口按鈕*****************************/</p><p><b> { </b></p><p> "butto
91、n", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 16, 210, 80, 30, </p><p> IDC_BUTTON_OPEN, </p><p><b> "打開串口", <
92、;/b></p><p><b> 0 </b></p><p><b> },</b></p><p><b> { </b></p><p> "button", </p><p> WS_VISIBLE | BS
93、_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 120, 210, 80, 30, </p><p> IDC_BUTTON_CLOSE, </p><p><b> "關(guān)閉串口", </b></p><p><b> 0 <
94、/b></p><p><b> },</b></p><p> /***********************定義信息顯示模塊**********2***********************/</p><p><b> { </b></p><p> "static&
95、quot;, </p><p> WS_VISIBLE | SS_LEFT | WS_GROUP, </p><p> 16, 30, 150, 20, </p><p> IDC_PROMPT_MESSAGE, </p><p> "等待.....................", </p>&l
96、t;p><b> 0 </b></p><p><b> }, </b></p><p> /**************************定義發(fā)送接收按鈕*****************************/</p><p><b> { </b></p>&
97、lt;p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 146, 270, 50, 30, </p><p> IDC_BUTTON_SEND, </p><p><b>
98、 "發(fā)送", </b></p><p><b> 0 </b></p><p><b> }, </b></p><p> /***********************定義數(shù)據(jù)顯示模塊***********************************/</p>&
99、lt;p><b> { </b></p><p> "static", </p><p> WS_VISIBLE, </p><p> 280, 30, 200, 370, </p><p> IDC_STATIC, </p><p><b> &q
100、uot;接收數(shù)據(jù)", </b></p><p><b> 0 </b></p><p><b> }, </b></p><p><b> { </b></p><p> CTRL_MLEDIT, </p><p> WS
101、_VISIBLE | WS_BORDER | WS_VSCROLL | ES_BASELINE | ES_AUTOWRAP, </p><p> 280, 50, 180,350, </p><p> IDC_RECIEVE_CHARS, </p><p><b> "", </b></p><p&
102、gt;<b> 0 </b></p><p><b> },</b></p><p><b> { </b></p><p> "static", </p><p> WS_VISIBLE, </p><p> 16, 2
103、80, 200, 120, </p><p> IDC_STATIC, </p><p><b> "發(fā)送數(shù)據(jù)", </b></p><p><b> 0 </b></p><p><b> }, </b></p><p>&
104、lt;b> { </b></p><p> CTRL_MLEDIT, </p><p> WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_BASELINE | ES_AUTOWRAP, </p><p> 16, 300, 180,100, </p><p> IDC_SEND_C
105、HARS, </p><p><b> "", </b></p><p><b> 0 </b></p><p><b> },</b></p><p> /***********************定義鍵盤*******************
106、****************/ </p><p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 530, 280, 30
107、, 30, </p><p> IDC_BUTTON_0, </p><p><b> "0", </b></p><p><b> 0 </b></p><p><b> },</b></p><p><b>
108、{</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 500, 310, 30, 30, </p><p> IDC_BUTTON_1, </p>
109、<p><b> "1", </b></p><p><b> 0 </b></p><p><b> },</b></p><p><b> {</b></p><p> "button",
110、 </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 530, 310, 30, 30, </p><p> IDC_BUTTON_2, </p><p><b> "2", </b></p
111、><p><b> 0 </b></p><p><b> },</b></p><p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON
112、 | WS_TABSTOP | WS_GROUP, </p><p> 560, 310, 30, 30, </p><p> IDC_BUTTON_3, </p><p><b> "3", </b></p><p><b> 0 </b></p><
113、;p><b> },</b></p><p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 500,
114、 340, 30, 30, </p><p> IDC_BUTTON_4, </p><p><b> "4", </b></p><p><b> 0 </b></p><p><b> },</b></p><p><
115、;b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 530, 340, 30, 30, </p><p> IDC_BUTTON_5, &l
116、t;/p><p><b> "5", </b></p><p><b> 0 </b></p><p><b> },</b></p><p><b> {</b></p><p> "butto
117、n", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 560, 340, 30, 30, </p><p> IDC_BUTTON_6, </p><p><b> "6", </b&g
118、t;</p><p><b> 0 </b></p><p><b> },</b></p><p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPU
119、SHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 500, 370, 30, 30, </p><p> IDC_BUTTON_7, </p><p><b> "7", </b></p><p><b> 0 </b></p&
120、gt;<p><b> },</b></p><p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p&g
121、t; 530, 370, 30, 30, </p><p> IDC_BUTTON_8, </p><p><b> "8", </b></p><p><b> 0 </b></p><p><b> },</b></p><
122、p><b> {</b></p><p> "button", </p><p> WS_VISIBLE | BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP, </p><p> 560, 370, 30, 30, </p><p> IDC_BUTT
123、ON_9, </p><p><b> "9", </b></p><p><b> 0 </b></p><p><b> },</b></p><p><b> };</b></p><p> 在上
124、面的定義中,我們可以通過坐標(biāo)來改變他們的位置,使控件能擺放到合適的位置上去。其中,BUTTON控件有3中風(fēng)格,我采用了普通按鈕和單選按鈕的風(fēng)格。</p><p> 其中在Qt上進(jìn)行文字打印時(shí),只需要加以個(gè)靜態(tài)框定義。通過SetWindowText</p><p> ()函數(shù)來實(shí)現(xiàn),文本的打印。</p><p> 把編寫好的com.c文件進(jìn)行make生成可執(zhí)行文
125、件com.然后運(yùn)行com文件。</p><p> 5.11可以看到運(yùn)行的界面如下圖所示:</p><p><b> 5.12打開串口</b></p><p> 在 Linux 下串口文件是位于 /dev 下的。串口一 為 /dev/ttyS0,串口二 為 /dev/ttyS1。打開串口是通過使用標(biāo)準(zhǔn)的文件打開函數(shù)操作:</p>
126、<p> /*****************打開設(shè)備函數(shù)**************************************/</p><p> int OpenDevice(char *Dev) </p><p><b> { </b></p><p> int fd = open( Dev, O_RDWR )
127、; //打開你選擇的端口</p><p> if (-1 == fd) </p><p><b> { </b></p><p> perror("Can't Open Serial Port"); //設(shè)備打開失敗 </p><p> return -1; </
128、p><p><b> } </b></p><p><b> else </b></p><p><b> {</b></p><p> printf("Open Serial Port:%s\n",Dev);</p><p>
129、 return fd;</p><p><b> } </b></p><p><b> } </b></p><p><b> 5.13設(shè)置串口</b></p><p> 最基本的設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置。</p><p>
130、 /*****************設(shè)置波特率**************************************/</p><p> int set_speed(int fd, int speed)</p><p><b> {</b></p><p><b> int i;</b></p>
131、<p> int status;</p><p> struct termios options; </p><p> bzero(&options, sizeof(options)); </p><p> tcgetattr(fd,&options);// 得到當(dāng)前串口的參數(shù)</p><p&
132、gt; for (i = 0; i < sizeof(speed_arr)/sizeof(int); i++)</p><p><b> {</b></p><p> if (speed == name_arr[i])</p><p><b> {</b></p><p> tcfl
133、ush(fd, TCIOFLUSH);</p><p> cfsetispeed(&options, speed_arr[i]);//設(shè)置輸入波特率</p><p> cfsetospeed(&options, speed_arr[i]);//設(shè)置輸出波特率</p><p> status = tcsetattr(fd, T
134、CSANOW, &options);</p><p> printf("status=%d\n",status);</p><p> if (status != 0)</p><p><b> {</b></p><p> perror("tcsetattr fd"
135、);</p><p> return(-1);</p><p><b> }</b></p><p><b> }</b></p><p> options.c_cflag |= (CLOCAL | CREAD); // 使能接收并使能本地狀態(tài)</p><p>
136、tcflush(fd, TCIOFLUSH);</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> } </b></p><p> /*****************設(shè)置奇偶檢驗(yàn)********
137、******************************/ </p><p> int set_Parity(int fd, char databits, char stopbits, char parity)</p><p><b> {</b></p><p> struct termios options;</p>
138、<p> if(tcgetattr(fd,&options)!=0){</p><p> perror("Setup Serial Port");</p><p> return -1;</p><p><b> }</b></p><p> options.c_cfl
139、ag &= ~CSIZE;</p><p> //--------------------------這里要設(shè)置數(shù)據(jù)位------------------------------------------------------ </p><p> switch (databits) </p><p><b> {</b>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計(jì)報(bào)告 (2)
- 嵌入式課程設(shè)計(jì)報(bào)告---嵌入式文件鎖應(yīng)用
- 嵌入式課程設(shè)計(jì)報(bào)告91452
- 《嵌入式系統(tǒng)設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告--數(shù)字相框
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)報(bào)告--qtopia移植
- 嵌入式課程設(shè)計(jì)報(bào)告畢業(yè)論文
- 嵌入式課程設(shè)計(jì)報(bào)告畢業(yè)論文
- 嵌入式硬件課程設(shè)計(jì)報(bào)告---電梯系統(tǒng)
- 嵌入式課程設(shè)計(jì)---嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
- 嵌入式課程設(shè)計(jì)--串口通信
- 嵌入式課程設(shè)計(jì)大作業(yè)
- 嵌入式系統(tǒng)綜述課程設(shè)計(jì)
- 嵌入式wince課程設(shè)計(jì)報(bào)告(黑白棋)
評(píng)論
0/150
提交評(píng)論