2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  嵌入式課程設(shè)計(jì)</b></p><p>  ---------基于QT的界面程序設(shè)計(jì)</p><p>  學(xué)院: 信息科學(xué)與工程學(xué)院 </p><p>  專業(yè): 電子科學(xué)與技術(shù) </p><p>  班級: 電科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)的基本知識;</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ì)手冊;</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庫的工作原理;</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)編譯的好處是便于對驅(qū)動(dòng)的測試,但是還要進(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)我們需要的庫文件,這些庫文件我們移植時(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的情況下,請先進(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平臺的編譯環(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> ?。?)添加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)了對單個(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)庫,解決辦法是將缺少的這些庫文件從Qt的安裝包里拷貝到lib目錄下,完成之后,程序可以正常的啟動(dòng)。</p><p><b>  九、設(shè)計(jì)總結(jié)</b></p><p>  本學(xué)期為期二周的嵌入式課程設(shè)計(jì)在不知不覺中結(jié)束了,雖

55、說這次課程設(shè)計(jì)時(shí)間不是很長,但是感覺自己收獲頗豐,不僅學(xué)習(xí)到了一些新知識,回顧了以前的一些快要遺忘的知識點(diǎn),而且使自己的學(xué)習(xí)目標(biāo)更加明確,學(xué)習(xí)方法更加完善,也體會(huì)到軟件開發(fā)的趣味,更加清楚地認(rèn)識到了自己在軟件開發(fā)及學(xué)習(xí)上的一些不足之處。下面就來詳細(xì)寫一下我關(guān)于此次課程設(shè)計(jì)的心得體會(huì)。</p><p>  由于要考試的原因,第一周的沒有參加,實(shí)際上是用了后一周的時(shí)間做完的,主要是在應(yīng)用層進(jìn)行的程序設(shè)計(jì),實(shí)現(xiàn)對LED

56、燈的簡單控制。在這期間熟悉了linux內(nèi)核、bootloader、根文件系統(tǒng)的燒寫,初步掌握了QT的使用,會(huì)進(jìn)行簡單的界面設(shè)計(jì)。在了解了基礎(chǔ)知識后,我開始進(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í),自己動(dòng)手得出的結(jié)論,不僅能加深我們對嵌入式的理解,更能加深對此的記憶。</p><p>  短短二周的課程設(shè)計(jì)很快結(jié)束了,我發(fā)現(xiàn)我對計(jì)算機(jī)這個(gè)專業(yè)、對嵌入式技術(shù)、對Linux都有了新的認(rèn)識。通過這次課程設(shè)計(jì),我發(fā)現(xiàn)了嵌入式是一門很深的學(xué)科,

58、需要我們掌握很多專業(yè)技能,而自己只是略懂一些皮毛,在以后的學(xué)習(xí)中,我一定要更加注重對這方面的學(xué)習(xí)。</p><p><b>  十、參考文獻(xiàn)</b></p><p>  1 《ARM嵌入式LInux應(yīng)用開發(fā)入門》 中國電力出版社團(tuán) 王銘虎 歐文盛 編著</p><p>  2 《TQ6410_QT4.7移植手冊》2010年9月10日</p

59、><p>  3 《天嵌科技出品--Qt程序開發(fā)完全手冊之24小時(shí)超級版本_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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論