版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 嵌入式課程設(shè)計(jì)</b></p><p> ---------基于QT的界面程序設(shè)計(jì)</p><p> 學(xué)院: 信息科學(xué)與工程學(xué)院 </p><p> 專業(yè): 電子科學(xué)與技術(shù) </p><p> 班級(jí): 電科1101 </p&g
2、t;<p> 姓名: </p><p><b> 目錄</b></p><p><b> 一、設(shè)計(jì)目的2</b></p><p> 二、設(shè)計(jì)任務(wù)及要求2</p><p><b> 三、方案設(shè)計(jì)3</b></p&g
3、t;<p> 四、嵌入式系統(tǒng)開發(fā)環(huán)境建立3</p><p><b> 五、NFS掛載6</b></p><p> 六、QT界面設(shè)計(jì)及運(yùn)行程序9</p><p> 七、課設(shè)完成質(zhì)量分析13</p><p> 八、設(shè)計(jì)過程中遇到的問題13</p><p> 九、
4、設(shè)計(jì)總結(jié)…………………………………………………………………………………………..14</p><p> 十、參考文獻(xiàn)…………………………………………………………………………………………..14</p><p> 十一、附錄………………………………………………………………………………………………15</p><p> 基于QT界面的程序設(shè)計(jì)</p>
5、<p><b> 設(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&g
6、t;<p> 5.學(xué)會(huì)查閱有關(guān)專業(yè)資料及設(shè)計(jì)手冊(cè);</p><p> 6. QT界面編程。</p><p><b> 二、設(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
7、><p> 3、QT在PC上的安裝、</p><p> 4、QT在開發(fā)板上的移植</p><p> 1)、觸摸屏原理及tslib庫(kù)的工作原理;</p><p> 2)、QT設(shè)計(jì)LED燈控制,設(shè)計(jì)方案自由發(fā)揮,可以單個(gè)控制LED燈、也可以流水燈的控制,可控制流水燈的頻率(1-5HZ可選)</p><p> 5、QT
8、界面程序設(shè)計(jì)</p><p> 6.編寫設(shè)計(jì)說明書(方案的確定、設(shè)計(jì)環(huán)節(jié)的考慮及必要說明等)及設(shè)備的使用說明;</p><p><b> 7.繪制有關(guān)圖紙.</b></p><p><b> 三、方案設(shè)計(jì)</b></p><p><b> 1 系統(tǒng)文件</b></
9、p><p> 可以遠(yuǎn)程掛載,也可以編譯成鏡像文件。編譯鏡像文件的話,只要里面的東西改變就要重新編譯,重新導(dǎo)入。所以我選擇NFS掛載。</p><p><b> 2 內(nèi)核編譯</b></p><p> 有兩種方案,一種是靜態(tài)編譯內(nèi)核,另一種是動(dòng)態(tài)編譯內(nèi)核。動(dòng)態(tài)編譯的好處是便于對(duì)驅(qū)動(dòng)的測(cè)試,但是還要進(jìn)行相應(yīng)的操作;靜態(tài)編譯的好處是一次編譯,之后就
10、不用再進(jìn)行插入的操作?;谝陨系姆治?,所以我采用了靜態(tài)編譯的方法。</p><p> 3 開發(fā)板應(yīng)用程序的運(yùn)行方式</p><p> 我們編寫的應(yīng)用程序有兩種方式啟動(dòng),一種是在系統(tǒng)啟動(dòng)之后,用命令手動(dòng)啟動(dòng),另外一種是系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載,為了更方便,所以我選擇了后一種方案,修煉了系統(tǒng)的一個(gè)腳本文件,讓LED控制程序在系統(tǒng)啟動(dòng)之后自動(dòng)啟動(dòng)。</p><p> 四、
11、嵌入式系統(tǒng)開發(fā)環(huán)境建立</p><p><b> 1 安裝交叉編譯器</b></p><p> (1)解壓EABI-4.3.3_EmbedSky_20091210.tar.bz2</p><p> tar -jxvf EABI-4.3.3_EmbedSky_20091210.tar.bz2 </p><p><
12、;b> (2)設(shè)置環(huán)境變量</b></p><p> export PATH=/opt/EmbedSky/4.3.3/bin:$PATH</p><p> (3).永久設(shè)置環(huán)境變量</p><p> vi /etc/profile 在最后添加一行</p><p> export PATH=/opt/EmbedSky
13、/4.3.3/bin:$PATH</p><p> 2 安裝tslib-1.4.1</p><p> (1)解壓tslib-1.4.tar.gz</p><p> tar -zxvf tslib-1.4.tar.gz -C /</p><p><b> (2)創(chuàng)建目錄</b></p><p&g
14、t; mkdir /opt /EmbedSky/tslib_install</p><p> (3)生成configure</p><p> ./autogen.sh</p><p><b> (4)配置</b></p><p> ./configure --prifix=/opt/EmbedSky/tslib
15、_insatall --host=arm-linux ac_cv_func_malloc_0_nonnull=yes</p><p> (5)編譯(大概20~30分鐘)</p><p><b> make</b></p><p><b> (6)安裝</b></p><p> make in
16、stall</p><p> 如果以上步驟沒錯(cuò),則可以在/opt/tslib_install下出現(xiàn)我們需要的庫(kù)文件,這些庫(kù)文件我們移植時(shí)會(huì)用到。</p><p><b> 3 安裝Qt4.7</b></p><p> (1)解壓qt-everywhere-opensource-src-4.7.0.tar.gz</p><
17、;p> tar -zxvf qt-everywhere-opensource-src-4.7.0.tar.gz -C /</p><p> (2)創(chuàng)建目錄,把QT4.7安裝在qt-4.7.0-arm目錄下</p><p> mkdir /opt/QtEmbedded/qt-4.7.0-arm</p><p> 配置configure</p>
18、<p> ./configure -embedded arm -release -opensource -silent -qt-libpng -qt-libjpeg -qt-libmng -qt-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demos -qt-kbd-linuxinput -qt
19、-mouse-tslib -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-qt3support -no-nis -no-cups -no-iconv -no-dbus -no-openssl -no-fast -no-accessibility -no-scripttools -no-mmx -no-mu
20、ltimedia -svg -no-webkit -no-3dnow -no-sse -no-sse2 -no-gfx-transformed -</p><p> 編譯(大概兩個(gè)小時(shí))</p><p><b> make</b></p><p><b> 安裝</b></p><p> m
21、ake install</p><p> 安裝成功后/opt/QtEmbedded-4.7.0-arm/bin里面有qmake</p><p> 4、qt-4.5文件系統(tǒng)</p><p> 將root_qt_4.5_2.6.30.4_20100601.tar.bz2 解壓到根下</p><p><b> 修改用戶權(quán)限<
22、/b></p><p><b> ?。?)拷貝字體文件</b></p><p> 解壓: tar xvfz /opt/wqy-zenhei-0.8.38-1.tar.gz -C /opt/EmbedSky</p><p> 5、Qt4.7相關(guān)文件</p><p> mkdir -p /opt/EmbedSky
23、/root_nfs/opt/qt-4.7</p><p> cp -rf /opt/EmbedSky/qt-4.7-arm/lib /opt/EmbedSky/root_nfs/opt/qt-4.7</p><p> cp -rf /opt/EmbedSky/qt-4.7-arm/plugins /opt/EmbedSky/root_nfs/opt/qt-4.7</p>
24、<p> mkdir /opt/EmbedSky/root_nfs/opt/qt-4.7/bin</p><p> 拷貝自己的可執(zhí)行文件到bin/opt/EmbedSky/root_nfs/opt/qt-4.7/bin</p><p> 修改環(huán)境profile</p><p> vi /etc/profile</p><p>
25、; export set QTDIR=/opt/qt-4.5 改成 export set QTDIR=/opt/qt-4.7export set QPEDIR=/opt/qt-4.5 改成 export set QPEDIR=/opt/qt-4.7</p><p><b> 五、NFS掛載</b></p><p> 在ubuntu下安裝、配置nfs服務(wù)的步驟
26、如下:</p><p> Ubuntu10.10配置TFTP和NFS</p><p> 1、已安裝好tftp和nfs的情況下,請(qǐng)先進(jìn)行卸載工作:</p><p> sudo apt-get remove tftpd tftp xinetd</p><p> sudo apt-get remove nfs-kernel-server&l
27、t;/p><p><b> 2、安裝NFS</b></p><p> Ubuntu上默認(rèn)是沒有安裝nfs服務(wù)器的,因此我們首先安裝nfs服務(wù)器端:</p><p> $sudo apt-get install nfs-kernel-server </p><p> 3、配置/etc/exports</p>
28、<p> NFS允許掛載的目錄及權(quán)限在文件/etc/exports中進(jìn)行了定義。例如,我們要將根目錄下的/opt/EmbedSky/rootfs目錄共享出來,那么我們需要在/etc/exports文件末尾添加如下一行:</p><p> /opt/EmbedSky/rootfs *(rw,sync,no_root_squash)</p><p><b&
29、gt; 拷貝文件</b></p><p> 將 tslib_install/lib/下的文件及bin下 tslib提供的觸摸屏校準(zhǔn)程序 ts_calibrate和僅利用qt-4.7生成的 lib和 plugins 文件。</p><p> 拷貝到共享目錄/source/rootfs下</p><p><b> 5 文件系統(tǒng)掛載</
30、b></p><p> (1)設(shè)置虛擬機(jī)的IP地址</p><p><b> (2)設(shè)置參數(shù)</b></p><p> 先輸入0,再輸入1,依次設(shè)置192.168.1.7(PC 的Linux 的IP 地址)->192.168.1.6(開發(fā)板的Linux 的IP 地址)->255.255.255.0(開發(fā)板的掩碼地址)/o
31、pt/EmbedSky/root_nfs(PC 的Linux 中的NFS 文件系統(tǒng)的路徑)。然后選擇s保存,q退出。 (3)啟動(dòng)</p><p> 選擇8進(jìn)入系統(tǒng),成功后 ,輸入ls,看看有沒有之前拷貝的那些文件,如果有,即掛載成功。</p><p> QT界面設(shè)計(jì)及運(yùn)行程序</p><p> 1在/opt/EmbedSky下 安裝qtcreater &l
32、t;/p><p> 2 添加ARM平臺(tái)的編譯環(huán)境設(shè)置</p><p><b> 添加arm的環(huán)境</b></p><p><b> 3 創(chuàng)建一個(gè)工程</b></p><p><b> 創(chuàng)建工程</b></p><p> 打開qtcreator后,創(chuàng)
33、建一個(gè)工程,如下圖,命名為hzt,類名為led,之后一直next</p><p> (2)添加arm 和pc機(jī)環(huán)境下的qmake</p><p><b> 4 界面設(shè)計(jì)</b></p><p><b> 5 主要程序代碼</b></p><p> void Led::LedOpen()
34、 //打開LED驅(qū)動(dòng)</p><p><b> {</b></p><p> led_fd = open("/dev/mini2440_led",0);</p><p> if(led_fd < 0)</p><p><b> {<
35、;/b></p><p> printf("led open failed!\n");</p><p><b> }</b></p><p><b> }</b></p><p> void Led::LedCtl(int led, int on) //
36、操作LED</p><p><b> {</b></p><p> if(led>=0 && led <=3 && (on == 0 || on == 1))</p><p><b> {</b></p><p> ioctl(led_fd, on
37、, led);</p><p><b> }</b></p><p><b> }</b></p><p> void Led::LedClose() //打開LED驅(qū)動(dòng)</p><p><b> {</b></p&
38、gt;<p> close(led_fd);</p><p><b> }</b></p><p> void MainWindow::on_led_1_statusButton_clicked() //控制單個(gè)LED燈亮滅</p><p><b> {</b></p><p
39、> static int led_st = 0; //LED顯示狀態(tài),下同</p><p> if(led_st == 0)</p><p><b> {</b></p><p> ui->led_1_statusButton->setText("LED1 close");</p&g
40、t;<p> led_st = 1;</p><p> Led::LedCtl(0, led_st);</p><p><b> }</b></p><p><b> else</b></p><p> if(led_st == 1)</p><p>
41、;<b> {</b></p><p> ui->led_1_statusButton->setText("LED1 open");</p><p> led_st = 0;</p><p> Led::LedCtl(0, led_st);</p><p><b> }
42、</b></p><p><b> }</b></p><p> void MainWindow::on_led_1_flashButton_clicked()//控制單個(gè)LED燈閃爍</p><p><b> {</b></p><p><b> int res;
43、</b></p><p> pthread_t led1_thread;</p><p> res = pthread_create(&led1_thread, NULL, do_led1_flash, NULL);</p><p><b> }</b></p><p> void *do_l
44、ed_rolling(void * arg)//跑馬燈</p><p><b> {</b></p><p> int flag = 0;</p><p><b> while(1)</b></p><p><b> {</b></p><p
45、> if(flag == 0)</p><p><b> {</b></p><p> Led::LedCtl(0, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(1, 1);</p><p><
46、b> sleep(1);</b></p><p> Led::LedCtl(2, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(3, 1);</p><p><b> sleep(1);</b></p>
47、<p><b> flag = 1;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> Led::LedCtl(0, 0);</p
48、><p> Led::LedCtl(1, 0);</p><p> Led::LedCtl(2, 0);</p><p> Led::LedCtl(3, 0);</p><p><b> flag = 0;</b></p><p><b> }</b></p>
49、;<p><b> }</b></p><p> 6 應(yīng)用程序交叉編譯</p><p> 進(jìn)入應(yīng)用程序所在目錄</p><p> qmake –project</p><p><b> qmake</b></p><p><b> make
50、</b></p><p> 編譯成一個(gè)可執(zhí)行的二進(jìn)制文件</p><p> 7 應(yīng)用程序下載到開發(fā)板</p><p> 1.使用rz命令選擇要下載的可執(zhí)行程序</p><p> 2.屏蔽/etc/init.d/rcS里的</p><p> 3.進(jìn)入/bin目錄,復(fù)制qt4為qt4huzt,并改名q
51、t4為qt4_back。</p><p> 然后打開qt4huzt,修改如下所示:</p><p> 4.進(jìn)入/etc/init.d/目錄,修改rcS文件,使程序自動(dòng)啟動(dòng)</p><p> 注:若報(bào)找不到,可把/usr/local/lib/libts-0.0.so.0拷貝到/lib目錄下。</p><p><b> 課設(shè)完成
52、質(zhì)量分析</b></p><p> 本次課程設(shè)計(jì)完成了基于QT的arm開發(fā)板的LED控制程序,這個(gè)程序?qū)崿F(xiàn)的功能主要有:</p><p> 實(shí)現(xiàn)了對(duì)單個(gè)LED燈的亮滅控制</p><p> 實(shí)現(xiàn)了LED燈頻閃的控制</p><p> 實(shí)現(xiàn)了LED跑馬燈控制</p><p> 八、設(shè)計(jì)過程中遇到的問
53、題</p><p> 1.調(diào)用led驅(qū)動(dòng)的時(shí)候出現(xiàn)錯(cuò)誤,主要是因?yàn)閷?shí)際的led驅(qū)動(dòng)名字叫做leds,而應(yīng)用程序在調(diào)用的時(shí)候使用的卻是led,導(dǎo)致兩個(gè)的名字不一致,不能正確的打開驅(qū)動(dòng)led。</p><p> 2.通過串口顯示的數(shù)據(jù)時(shí)亂碼,原因是波特率設(shè)置的不正確,導(dǎo)致雙方數(shù)據(jù)交互出現(xiàn)錯(cuò)誤。3.開發(fā)板的系統(tǒng)上電后,不能重新啟動(dòng),究其原因,是因?yàn)閮?nèi)核、根文件系統(tǒng)或者Bootloader
54、沒有正確的燒寫,重新燒寫這些東西,系統(tǒng)正常啟動(dòng)。</p><p> 4.程序下載到開發(fā)板上時(shí)不能正確運(yùn)行,提示缺少某個(gè)動(dòng)態(tài)庫(kù),解決辦法是將缺少的這些庫(kù)文件從Qt的安裝包里拷貝到lib目錄下,完成之后,程序可以正常的啟動(dòng)。</p><p><b> 九、設(shè)計(jì)總結(jié)</b></p><p> 本學(xué)期為期二周的嵌入式課程設(shè)計(jì)在不知不覺中結(jié)束了,雖
55、說這次課程設(shè)計(jì)時(shí)間不是很長(zhǎng),但是感覺自己收獲頗豐,不僅學(xué)習(xí)到了一些新知識(shí),回顧了以前的一些快要遺忘的知識(shí)點(diǎn),而且使自己的學(xué)習(xí)目標(biāo)更加明確,學(xué)習(xí)方法更加完善,也體會(huì)到軟件開發(fā)的趣味,更加清楚地認(rèn)識(shí)到了自己在軟件開發(fā)及學(xué)習(xí)上的一些不足之處。下面就來詳細(xì)寫一下我關(guān)于此次課程設(shè)計(jì)的心得體會(huì)。</p><p> 由于要考試的原因,第一周的沒有參加,實(shí)際上是用了后一周的時(shí)間做完的,主要是在應(yīng)用層進(jìn)行的程序設(shè)計(jì),實(shí)現(xiàn)對(duì)LED
56、燈的簡(jiǎn)單控制。在這期間熟悉了linux內(nèi)核、bootloader、根文件系統(tǒng)的燒寫,初步掌握了QT的使用,會(huì)進(jìn)行簡(jiǎn)單的界面設(shè)計(jì)。在了解了基礎(chǔ)知識(shí)后,我開始進(jìn)行設(shè)計(jì),當(dāng)然,其中遇到了很多的難題,很多東西第一次接觸 ,又沒有偶人在旁邊指導(dǎo)操作,完全憑借自己去摸索練習(xí)。其中的困難可想而知。然而堅(jiān)持就是勝利,牙一咬眼一閉堅(jiān)持做下去,而通過本次課程設(shè)計(jì),更重要的是端正自己的學(xué)習(xí)態(tài)度,只有真正下功夫?qū)W習(xí),才能有收獲,正所謂“一分耕耘,一分收獲”。沒
57、有付出,何談回報(bào)呢?再者,通過本次課程設(shè)計(jì),我也學(xué)會(huì)了如何去分析問題,如何找出自己設(shè)計(jì)中的不足,繼而去排除解決問題,這就是一個(gè)自我學(xué)習(xí)的過程。當(dāng)我們通過實(shí)驗(yàn)區(qū)學(xué)習(xí)理論知識(shí)后時(shí),自己動(dòng)手得出的結(jié)論,不僅能加深我們對(duì)嵌入式的理解,更能加深對(duì)此的記憶。</p><p> 短短二周的課程設(shè)計(jì)很快結(jié)束了,我發(fā)現(xiàn)我對(duì)計(jì)算機(jī)這個(gè)專業(yè)、對(duì)嵌入式技術(shù)、對(duì)Linux都有了新的認(rèn)識(shí)。通過這次課程設(shè)計(jì),我發(fā)現(xiàn)了嵌入式是一門很深的學(xué)科,
58、需要我們掌握很多專業(yè)技能,而自己只是略懂一些皮毛,在以后的學(xué)習(xí)中,我一定要更加注重對(duì)這方面的學(xué)習(xí)。</p><p><b> 十、參考文獻(xiàn)</b></p><p> 1 《ARM嵌入式LInux應(yīng)用開發(fā)入門》 中國(guó)電力出版社團(tuán) 王銘虎 歐文盛 編著</p><p> 2 《TQ6410_QT4.7移植手冊(cè)》2010年9月10日</p
59、><p> 3 《天嵌科技出品--Qt程序開發(fā)完全手冊(cè)之24小時(shí)超級(jí)版本_V2.2_20100606》</p><p><b> 十一、附錄</b></p><p> 附錄一 LED控制程序源碼</p><p><b> led.h</b></p><p> #ifnd
60、ef LED_H</p><p> #define LED_H</p><p> #include <linux/ioctl.h></p><p> #include <stdio.h></p><p> #include <fcntl.h></p><p> #inclu
61、de <sys/types.h></p><p> #include <sys/stat.h></p><p> #include <string.h></p><p> #include <sys/ioctl.h></p><p> #include <stdlib.h>&
62、lt;/p><p> #include <unistd.h></p><p><b> #if 0</b></p><p> //防止訪問底層代碼出錯(cuò) 后續(xù)添加</p><p> #define MINI2440_LED_CMD_0 _IOW('l', 0, int) //l
63、ed0</p><p> #define MINI2440_LED_CMD_1 _IOW('l', 1, int) //led1</p><p> #define MINI2440_LED_CMD_2 _IOW('l', 2, int) //led2</p><p> #define MINI2440
64、_LED_CMD_3 _IOW('l', 3, int) //led3</p><p><b> #endif</b></p><p><b> class Led</b></p><p><b> {</b></p><p><b&g
65、t; public:</b></p><p> static int led_fd;</p><p><b> public:</b></p><p> static void LedOpen();</p><p> static void LedCtl(int led, int on);</
66、p><p> static void LedClose();</p><p><b> };</b></p><p> #endif // LED_H</p><p><b> led.cpp</b></p><p> #include "led.h"
67、;</p><p> int Led::led_fd = -1;</p><p> void Led::LedOpen() //打開LED驅(qū)動(dòng)</p><p><b> {</b></p><p> led_fd = open("/dev/mini2440
68、_led",0);</p><p> if(led_fd < 0)</p><p><b> {</b></p><p> printf("led open failed!\n");</p><p><b> }</b></p><p&
69、gt;<b> }</b></p><p> void Led::LedCtl(int led, int on) //操作LED</p><p><b> {</b></p><p> if(led>=0 && led <=3 && (on == 0 || o
70、n == 1))</p><p><b> {</b></p><p> ioctl(led_fd, on, led);</p><p><b> }</b></p><p><b> }</b></p><p> void Led::LedC
71、lose() //打開LED驅(qū)動(dòng)</p><p><b> {</b></p><p> close(led_fd);</p><p><b> }</b></p><p> mainwindow.h</p><p>
72、 #ifndef MAINWINDOW_H</p><p> #define MAINWINDOW_H</p><p> #include <QMainWindow></p><p> #include <time.h></p><p> #include <pthread.h></p>
73、<p> namespace Ui {</p><p> class MainWindow;</p><p><b> }</b></p><p> class MainWindow : public QMainWindow</p><p><b> {</b></p&
74、gt;<p><b> Q_OBJECT</b></p><p><b> public:</b></p><p> explicit MainWindow(QWidget *parent = 0);</p><p> ~MainWindow();</p><p> priv
75、ate slots:</p><p> void on_led_1_statusButton_clicked();</p><p> void on_led_2_statusButton_clicked();</p><p> void on_led_3_statusButton_clicked();</p><p> void on
76、_led_4_statusButton_clicked();</p><p> void on_led_1_flashButton_clicked();</p><p> void on_led_2_flashButton_clicked();</p><p> void on_led_3_flashButton_clicked();</p>&
77、lt;p> void on_led_4_flashButton_clicked();</p><p> void on_rollingButton_clicked();</p><p><b> private:</b></p><p> Ui::MainWindow *ui;</p><p><b&
78、gt; };</b></p><p> #endif // MAINWINDOW_H</p><p> mainwindow.cpp</p><p> #include "mainwindow.h"</p><p> #include "ui_mainwindow.h"</p
79、><p> #include "led.h"</p><p> MainWindow::MainWindow(QWidget *parent) :</p><p> QMainWindow(parent),</p><p> ui(new Ui::MainWindow)</p><p><
80、b> {</b></p><p> ui->setupUi(this);</p><p> ui->led_1_statusButton->setText("LED1 open"); //LED狀態(tài)顯示初始化</p><p> ui->led_2_statusButton->setT
81、ext("LED2 open");</p><p> ui->led_3_statusButton->setText("LED3 open");</p><p> ui->led_4_statusButton->setText("LED4 open");</p><p> Le
82、d::LedOpen(); //打開LED</p><p><b> }</b></p><p> MainWindow::~MainWindow()</p><p><b> {</b></p><p> delete ui;</p><p><b&g
83、t; }</b></p><p> void *do_led1_flash(void * arg);</p><p> void *do_led2_flash(void * arg);</p><p> void *do_led3_flash(void * arg);</p><p> void *do_led4_fla
84、sh(void * arg);</p><p> void *do_led_rolling(void * arg);</p><p><b> //開關(guān)</b></p><p> void MainWindow::on_led_1_statusButton_clicked()</p><p><b>
85、{</b></p><p> static int led_st = 0; //LED顯示狀態(tài),下同</p><p> if(led_st == 0)</p><p><b> {</b></p><p> ui->led_1_statusButton->setText(&quo
86、t;LED1 close");</p><p> led_st = 1;</p><p> Led::LedCtl(0, led_st);</p><p><b> }</b></p><p><b> else</b></p><p> if(led_
87、st == 1)</p><p><b> {</b></p><p> ui->led_1_statusButton->setText("LED1 open");</p><p> led_st = 0;</p><p> Led::LedCtl(0, led_st);</
88、p><p><b> }</b></p><p><b> }</b></p><p> void MainWindow::on_led_2_statusButton_clicked()</p><p><b> {</b></p><p> st
89、atic int led_st = 0;</p><p> if(led_st == 0)</p><p><b> {</b></p><p> ui->led_2_statusButton->setText("LED2 close");</p><p> led_st = 1;
90、</p><p> Led::LedCtl(1, led_st);</p><p><b> }</b></p><p><b> else</b></p><p> if(led_st == 1)</p><p><b> {</b><
91、/p><p> ui->led_2_statusButton->setText("LED2 open");</p><p> led_st = 0;</p><p> Led::LedCtl(1, led_st);</p><p><b> }</b></p><
92、p><b> }</b></p><p> void MainWindow::on_led_3_statusButton_clicked()</p><p><b> {</b></p><p> static int led_st = 0;</p><p> if(led_st =
93、= 0)</p><p><b> {</b></p><p> ui->led_3_statusButton->setText("LED3 close");</p><p> led_st = 1;</p><p> Led::LedCtl(2, led_st);</p&
94、gt;<p><b> }</b></p><p><b> else</b></p><p> if(led_st == 1)</p><p><b> {</b></p><p> ui->led_3_statusButton->setT
95、ext("LED3 open");</p><p> led_st = 0;</p><p> Led::LedCtl(2, led_st);</p><p><b> }</b></p><p><b> }</b></p><p> void
96、 MainWindow::on_led_4_statusButton_clicked()</p><p><b> {</b></p><p> static int led_st = 0;</p><p> if(led_st == 0)</p><p><b> {</b></p&
97、gt;<p> ui->led_4_statusButton->setText("LED4 close");</p><p> led_st = 1;</p><p> Led::LedCtl(3, led_st);</p><p><b> }</b></p><p&g
98、t;<b> else</b></p><p> if(led_st == 1)</p><p><b> {</b></p><p> ui->led_4_statusButton->setText("LED4 open");</p><p> led_s
99、t = 0;</p><p> Led::LedCtl(3,led_st);</p><p><b> }</b></p><p><b> }</b></p><p><b> //閃爍</b></p><p> void MainWindo
100、w::on_led_1_flashButton_clicked()</p><p><b> {</b></p><p><b> int res;</b></p><p> pthread_t led1_thread;</p><p> res = pthread_create(&
101、led1_thread, NULL, do_led1_flash, NULL);</p><p><b> }</b></p><p> void MainWindow::on_led_2_flashButton_clicked()</p><p><b> {</b></p><p><
102、;b> int res;</b></p><p> pthread_t led2_thread;</p><p> res = pthread_create(&led2_thread, NULL, do_led2_flash, NULL);</p><p><b> }</b></p><p
103、> void MainWindow::on_led_3_flashButton_clicked()</p><p><b> {</b></p><p><b> int res;</b></p><p> pthread_t led3_thread;</p><p> res =
104、pthread_create(&led3_thread, NULL, do_led3_flash, NULL);</p><p><b> }</b></p><p> void MainWindow::on_led_4_flashButton_clicked()</p><p><b> {</b><
105、/p><p><b> int res;</b></p><p> pthread_t led4_thread;</p><p> res = pthread_create(&led4_thread, NULL, do_led4_flash, NULL);</p><p><b> }</b&
106、gt;</p><p> void MainWindow::on_rollingButton_clicked()</p><p><b> {</b></p><p><b> int res;</b></p><p> pthread_t rolling_thread;</p>
107、<p> res = pthread_create(&rolling_thread, NULL, do_led_rolling, NULL);</p><p><b> }</b></p><p><b> //LED控制線程</b></p><p> void *do_led1_flash(
108、void * arg)</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> Led::LedCtl(0, 1);</p><p><b>
109、sleep(1);</b></p><p> Led::LedCtl(0, 0);</p><p><b> sleep(1);</b></p><p><b> }</b></p><p> Led::LedClose();</p><p> pthr
110、ead_exit((void *)"do_led1_flash exit\n");</p><p><b> }</b></p><p> void *do_led2_flash(void * arg)</p><p><b> {</b></p><p><b>
111、; while(1)</b></p><p><b> {</b></p><p> Led::LedCtl(1, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(1, 0);</p><p>&l
112、t;b> sleep(1);</b></p><p><b> }</b></p><p> Led::LedClose();</p><p> pthread_exit((void *)"do_led2_flash exit\n");</p><p><b>
113、}</b></p><p> void *do_led3_flash(void * arg)</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p&g
114、t; Led::LedCtl(2, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(2, 0);</p><p><b> sleep(1);</b></p><p><b> }</b></p>
115、<p> Led::LedClose();</p><p> pthread_exit((void *)"do_led3_flash exit\n");</p><p><b> }</b></p><p> void *do_led4_flash(void * arg)</p><p&
116、gt;<b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> Led::LedCtl(3, 1);</p><p><b> sleep(1);</b></p>
117、<p> Led::LedCtl(3, 0);</p><p><b> sleep(1);</b></p><p><b> }</b></p><p> Led::LedClose();</p><p> pthread_exit((void *)"do_led
118、4_flash exit\n");</p><p><b> }</b></p><p><b> //跑馬燈</b></p><p> void *do_led_rolling(void * arg)</p><p><b> {</b></p>
119、<p> int flag = 0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(flag == 0)</p><p><b> {</b></p><p>
120、 Led::LedCtl(0, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(1, 1);</p><p><b> sleep(1);</b></p><p> Led::LedCtl(2, 1);</p><p
121、><b> sleep(1);</b></p><p> Led::LedCtl(3, 1);</p><p><b> sleep(1);</b></p><p><b> flag = 1;</b></p><p><b> }</b>
122、</p><p><b> else</b></p><p><b> {</b></p><p> Led::LedCtl(0, 0);</p><p> Led::LedCtl(1, 0);</p><p> Led::LedCtl(2, 0);</p&g
123、t;<p> Led::LedCtl(3, 0);</p><p><b> flag = 0;</b></p><p><b> }</b></p><p><b> }</b></p><p> Led::LedClose();</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于qt的界面程序設(shè)計(jì)-嵌入式課程設(shè)計(jì)
- arm嵌入式系統(tǒng)課程設(shè)計(jì)——mmcsd卡驅(qū)動(dòng)程序設(shè)計(jì)
- 基于qt的嵌入式終端界面開發(fā)畢業(yè)設(shè)計(jì)
- 基于嵌入式系統(tǒng)的聊天程序設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)基于qt的嵌入式終端界面開發(fā)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)
- 嵌入式程序設(shè)計(jì)復(fù)習(xí)題
- 嵌入式Linux的驅(qū)動(dòng)程序設(shè)計(jì)與GUI界面開發(fā).pdf
- 基于嵌入式led顯示課程設(shè)計(jì)
- 基于arm嵌入式的以太網(wǎng)通信程序設(shè)計(jì)
- 基于嵌入式系統(tǒng)的應(yīng)用程序設(shè)計(jì)研究.pdf
- 嵌入式課程設(shè)計(jì)--基于嵌入式系統(tǒng)的開源游戲模擬器的設(shè)計(jì)
- 基于ARM的嵌入式系統(tǒng)驅(qū)動(dòng)程序設(shè)計(jì).pdf
- 嵌入式應(yīng)用程序設(shè)計(jì)項(xiàng)目報(bào)告
- 基于arm嵌入式的以太網(wǎng)通信程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論